diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_anim.c | 298 | ||||
-rw-r--r-- | src/battle_anim_effects_1.c | 5617 | ||||
-rw-r--r-- | src/battle_anim_mons.c | 4 | ||||
-rw-r--r-- | src/bug.c | 18 | ||||
-rw-r--r-- | src/dark.c | 10 | ||||
-rw-r--r-- | src/dragon.c | 12 | ||||
-rw-r--r-- | src/electric.c | 36 | ||||
-rw-r--r-- | src/fighting.c | 40 | ||||
-rw-r--r-- | src/fire.c | 38 | ||||
-rw-r--r-- | src/flying.c | 32 | ||||
-rw-r--r-- | src/ghost.c | 18 | ||||
-rw-r--r-- | src/ground.c | 14 | ||||
-rw-r--r-- | src/ice.c | 38 | ||||
-rw-r--r-- | src/mevent_8145654.c | 4 | ||||
-rw-r--r-- | src/normal.c | 20 | ||||
-rw-r--r-- | src/oak_speech.c | 20 | ||||
-rw-r--r-- | src/poison.c | 14 | ||||
-rw-r--r-- | src/psychic.c | 32 | ||||
-rw-r--r-- | src/rock.c | 28 | ||||
-rw-r--r-- | src/text.c | 4 |
20 files changed, 5948 insertions, 349 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index be78558ca..de5f08f38 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_bg.h" #include "bg.h" #include "decompress.h" #include "dma3.h" @@ -22,6 +23,8 @@ extern const u16 gMovesWithQuietBGM[]; extern const u8 *const gBattleAnims_Moves[]; +extern const struct CompressedSpriteSheet gUnknown_8399388[]; +extern const struct CompressedSpritePalette gUnknown_8399C90[]; // RAM EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL; @@ -53,6 +56,16 @@ static void AddSpriteIndex(u16 index); static void ClearSpriteIndex(u16 index); static void WaitAnimFrameCount(void); static void RunAnimScriptCommand(void); +static void sub_8073558(u8 taskId); +static void Task_FadeToBg(u8 taskId); +static void Task_PanFromInitialToTarget(u8 taskId); +static void task_pA_ma0A_obj_to_bg_pal(u8 taskId); +static void LoadMoveBg(u16 bgId); +static void LoadDefaultBg(void); +static void Task_LoopAndPlaySE(u8 taskId); +static void Task_WaitAndPlaySE(u8 taskId); +static void sub_807331C(u8 taskId); + static void ScriptCmd_loadspritegfx(void); static void ScriptCmd_unloadspritegfx(void); static void ScriptCmd_createsprite(void); @@ -103,7 +116,7 @@ static void ScriptCmd_doublebattle_2E(void); static void ScriptCmd_stopsound(void); // Data -const struct OamData gOamData_AffineOff_ObjNormal_8x8 = +const struct OamData gOamData_AffineOff_ObjNormal_8x8 = //gOamData_83AC9C8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -118,7 +131,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_8x8 = }; -const struct OamData gOamData_AffineOff_ObjNormal_16x16 = +const struct OamData gOamData_AffineOff_ObjNormal_16x16 = //gOamData_83AC9D0 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -132,7 +145,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_32x32 = +const struct OamData gOamData_AffineOff_ObjNormal_32x32 = //gOamData_83AC9D8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -146,7 +159,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_64x64 = +const struct OamData gOamData_AffineOff_ObjNormal_64x64 = //gOamData_83AC9E0 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -160,7 +173,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_16x8 = +const struct OamData gOamData_AffineOff_ObjNormal_16x8 = //gOamData_83AC9E8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -174,7 +187,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_32x8 = +const struct OamData gOamData_AffineOff_ObjNormal_32x8 = //gOamData_83AC9F0 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -188,7 +201,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_32x16 = +const struct OamData gOamData_AffineOff_ObjNormal_32x16 = //gOamData_83AC9F8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -202,7 +215,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_64x32 = +const struct OamData gOamData_AffineOff_ObjNormal_64x32 = //gOamData_83ACA00 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -216,7 +229,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_8x16 = +const struct OamData gOamData_AffineOff_ObjNormal_8x16 = //gOamData_83ACA08 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -230,7 +243,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_8x32 = +const struct OamData gOamData_AffineOff_ObjNormal_8x32 = //gOamData_83ACA10 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -244,7 +257,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_16x32 = +const struct OamData gOamData_AffineOff_ObjNormal_16x32 = //gOamData_83ACA18 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -258,7 +271,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjNormal_32x64 = +const struct OamData gOamData_AffineOff_ObjNormal_32x64 = //gOamData_83ACA20 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -272,7 +285,7 @@ const struct OamData gOamData_AffineOff_ObjNormal_32x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = +const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = //gOamData_83ACA28 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -286,7 +299,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = +const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = //gOamData_83ACA30 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -300,7 +313,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = //gOamData_83ACA38 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -314,7 +327,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = +const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = //gOamData_83ACA40 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -328,7 +341,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = +const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = //gOamData_83ACA48 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -342,7 +355,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = //gOamData_83ACA50 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -356,7 +369,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = //gOamData_83ACA58 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -370,7 +383,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = +const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = //gOamData_83ACA60 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -384,7 +397,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = +const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = //gOamData_83ACA68 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -398,7 +411,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = +const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = //gOamData_83ACA70 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -412,7 +425,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = +const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = //gOamData_83ACA78 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -426,7 +439,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = //gOamData_83ACA80 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -440,7 +453,7 @@ const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = +const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = //gOamData_83ACA88 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -454,7 +467,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = +const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = //gOamData_83ACA90 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -468,7 +481,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = //gOamData_83ACA98 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -482,7 +495,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = +const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = //gOamData_83ACAA0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -496,7 +509,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = +const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = //gOamData_83ACAA8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -510,7 +523,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = //gOamData_83ACAB0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -524,7 +537,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = //gOamData_83ACAB8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -538,7 +551,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = +const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = //gOamData_83ACAC0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -552,7 +565,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = +const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = //gOamData_83ACAC8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -566,7 +579,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = +const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = //gOamData_83ACAD0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -580,7 +593,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = +const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = //gOamData_83ACAD8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -594,7 +607,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = //gOamData_83ACAE0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -608,7 +621,7 @@ const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_8x8 = +const struct OamData gOamData_AffineOff_ObjBlend_8x8 = //gOamData_83ACAE8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -622,7 +635,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_8x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_16x16 = +const struct OamData gOamData_AffineOff_ObjBlend_16x16 = //gOamData_83ACAF0 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -636,7 +649,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_32x32 = +const struct OamData gOamData_AffineOff_ObjBlend_32x32 = //gOamData_83ACAF8 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -650,7 +663,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_64x64 = +const struct OamData gOamData_AffineOff_ObjBlend_64x64 = //gOamData_83ACB00 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -664,7 +677,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_16x8 = +const struct OamData gOamData_AffineOff_ObjBlend_16x8 = //gOamData_83ACB08 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -678,7 +691,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_32x8 = +const struct OamData gOamData_AffineOff_ObjBlend_32x8 = //gOamData_83ACB10 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -692,7 +705,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_32x16 = +const struct OamData gOamData_AffineOff_ObjBlend_32x16 = //gOamData_83ACB18 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -706,7 +719,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_64x32 = +const struct OamData gOamData_AffineOff_ObjBlend_64x32 = //gOamData_83ACB20 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -720,7 +733,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_8x16 = +const struct OamData gOamData_AffineOff_ObjBlend_8x16 = //gOamData_83ACB28 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -734,7 +747,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_8x32 = +const struct OamData gOamData_AffineOff_ObjBlend_8x32 = //gOamData_83ACB30 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -748,7 +761,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_16x32 = +const struct OamData gOamData_AffineOff_ObjBlend_16x32 = //gOamData_83ACB38 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -762,7 +775,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineOff_ObjBlend_32x64 = +const struct OamData gOamData_AffineOff_ObjBlend_32x64 = //gOamData_83ACB40 { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -776,7 +789,7 @@ const struct OamData gOamData_AffineOff_ObjBlend_32x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = +const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = //gOamData_83ACB48 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -790,7 +803,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = +const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = //gOamData_83ACB50 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -804,7 +817,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = //gOamData_83ACB58 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -818,7 +831,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = +const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = //gOamData_83ACB60 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -832,7 +845,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = +const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = //gOamData_83ACB68 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -846,7 +859,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = //gOamData_83ACB70 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -860,7 +873,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = //gOamData_83ACB78 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -874,7 +887,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = +const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = //gOamData_83ACB80 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -888,7 +901,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = +const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = //gOamData_83ACB88 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -902,7 +915,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = +const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = //gOamData_83ACB90 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -916,7 +929,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = +const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = //gOamData_83ACB98 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -930,7 +943,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = //gOamData_83ACBA0 { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -944,7 +957,7 @@ const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = +const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = //gOamData_83ACBA8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -958,7 +971,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = +const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = //gOamData_83ACBB0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -972,7 +985,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = //gOamData_83ACBB8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -986,7 +999,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = +const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = //gOamData_83ACBC0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1000,7 +1013,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = +const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = //gOamData_83ACBC8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1014,7 +1027,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = //gOamData_83ACBD0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1028,7 +1041,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = //gOamData_83ACBD8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1042,7 +1055,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = +const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = //gOamData_83ACBE0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1056,7 +1069,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = +const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = //gOamData_83ACBE8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1070,7 +1083,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = +const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = //gOamData_83ACBF0 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1084,7 +1097,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = +const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = //gOamData_83ACBF8 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1098,7 +1111,7 @@ const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = .paletteNum = 0, }; -const struct OamData gOamData_AffineDouble_ObjBlend_32x64 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x64 = //gOamData_83ACC00 { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1944,8 +1957,8 @@ static void ScriptCmd_loadspritegfx(void) sBattleAnimScriptPtr++; index = T1_READ_16(sBattleAnimScriptPtr); - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); + LoadCompressedSpriteSheetUsingHeap(&gUnknown_8399388[GET_TRUE_SPRITE_INDEX(index)]); + LoadCompressedSpritePaletteUsingHeap(&gUnknown_8399C90[GET_TRUE_SPRITE_INDEX(index)]); sBattleAnimScriptPtr += 2; AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); gAnimFramesToWait = 1; @@ -2072,6 +2085,13 @@ static void ScriptCmd_waitforvisualfinish(void) } } +static void ScriptCmd_hang1(void) +{ +} +static void ScriptCmd_hang2(void) +{ +} + static void ScriptCmd_end(void) { s32 i; @@ -2117,11 +2137,8 @@ static void ScriptCmd_end(void) if (!continuousAnim) // May have been used for debug? { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); - if (!IsContest()) - { - sub_80A8278(); - UpdateOamPriorityInAllHealthboxes(1); - } + sub_80767F0(); + UpdateOamPriorityInAllHealthboxes(1); gAnimScriptActive = FALSE; } } @@ -2160,12 +2177,11 @@ static void ScriptCmd_monbg(void) if (IsBattlerSpriteVisible(battlerId)) { u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) // || position == B_POSITION_PLAYER_RIGHT) toBG_2 = FALSE; - else - toBG_2 = TRUE; - MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + MoveBattlerSpriteToBG(battlerId, toBG_2); taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gAnimVisualTaskCount++; gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId; @@ -2179,12 +2195,11 @@ static void ScriptCmd_monbg(void) if (IsBattlerSpriteVisible(battlerId)) { u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) // || position == B_POSITION_PLAYER_RIGHT) toBG_2 = FALSE; - else - toBG_2 = TRUE; - MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + MoveBattlerSpriteToBG(battlerId, toBG_2); taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gAnimVisualTaskCount++; gTasks[taskId].data[0] = battlerId; @@ -2266,7 +2281,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) } } -void sub_80730C0(u16 a, u16 *b, u32 c, u8 d) +void sub_80730C0(u16 a, u16 *b, s32 c, u8 d) { s32 i, j; s32 var; @@ -2275,6 +2290,7 @@ void sub_80730C0(u16 a, u16 *b, u32 c, u8 d) var = 32; else var = 64; + a <<= 12; for (i = 0; i < var; i++) { @@ -2288,17 +2304,17 @@ void sub_8073128(bool8 to_BG2) struct BattleAnimBgData animBg; sub_80752A0(&animBg); - if (!to_BG2)) + if (!to_BG2) { sub_8075358(1); - gBattle_BG1_X = NULL; - gBattle_BG1_Y = NULL; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; } else { sub_8075358(2); - gBattle_BG2_X = NULL; - gBattle_BG2_Y = NULL; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; } } @@ -2378,10 +2394,9 @@ static void sub_807331C(u8 taskId) { u8 to_BG2; u8 position = GetBattlerPosition(gTasks[taskId].data[2]); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + to_BG2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) to_BG2 = FALSE; - else - to_BG2 = TRUE; if (sMonAnimTaskIdArray[0] != 0xFF) { @@ -2422,24 +2437,22 @@ static void ScriptCmd_monbg_22(void) if (IsBattlerSpriteVisible(battlerId)) { u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) toBG_2 = FALSE; - else - toBG_2 = TRUE; - MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + MoveBattlerSpriteToBG(battlerId, toBG_2); } battlerId ^= BIT_FLANK; if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId)) { u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) toBG_2 = FALSE; - else - toBG_2 = TRUE; - MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + MoveBattlerSpriteToBG(battlerId, toBG_2); } sBattleAnimScriptPtr++; @@ -2480,19 +2493,21 @@ static void ScriptCmd_clearmonbg_23(void) static void sub_8073558(u8 taskId) { - gTasks[taskId].data[1]++; + bool8 to_BG2; + + gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) { bool8 toBG_2; u8 battlerId = gTasks[taskId].data[2]; u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) - toBG_2 = FALSE; - else - toBG_2 = TRUE; + to_BG2 = TRUE; + if (position < B_POSITION_OPPONENT_LEFT) + to_BG2 = FALSE; if (IsBattlerSpriteVisible(battlerId)) sub_8073128(toBG_2); + if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) sub_8073128(toBG_2 ^ 1); @@ -2627,9 +2642,7 @@ static void ScriptCmd_fadetobgfromset(void) sBattleAnimScriptPtr += 3; taskId = CreateTask(Task_FadeToBg, 5); - if (IsContest()) - gTasks[taskId].tBackgroundId = bg3; - else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) gTasks[taskId].tBackgroundId = bg2; else gTasks[taskId].tBackgroundId = bg1; @@ -2676,34 +2689,14 @@ static void Task_FadeToBg(u8 taskId) static void LoadMoveBg(u16 bgId) { - if (IsContest()) - { - const u32 *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; - void *dmaSrc; - void *dmaDest; - - LZDecompressWram(tilemap, gDecompressionBuffer); - sub_80730C0(sub_80A6D94(), (void*)(gDecompressionBuffer), 0x100, 0); - dmaSrc = gDecompressionBuffer; - dmaDest = (void *)(BG_SCREEN_ADDR(26)); - DmaCopy32(3, dmaSrc, dmaDest, 0x800); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4))); - LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80A6D94() * 16, 32); - } - else - { - LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(BG_SCREEN_ADDR(26))); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_CHAR_ADDR(2))); - LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); - } + LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_CHAR_ADDR(2))); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); } static void LoadDefaultBg(void) { - if (IsContest()) - LoadContestBgAfterMoveAnim(); - else - DrawMainBattleBackground(); + DrawMainBattleBackground(); } static void ScriptCmd_restorebg(void) @@ -2754,18 +2747,13 @@ static void ScriptCmd_changebg(void) s8 BattleAnimAdjustPanning(s8 pan) { - if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) + if (gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) pan = SOUND_PAN_TARGET; else pan = SOUND_PAN_ATTACKER; } - else if (IsContest()) - { - if (gBattleAnimAttacker != gBattleAnimTarget || gBattleAnimAttacker != 2 || pan != SOUND_PAN_TARGET) - pan *= -1; - } else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) @@ -2796,7 +2784,7 @@ s8 BattleAnimAdjustPanning(s8 pan) s8 BattleAnimAdjustPanning2(s8 pan) { - if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) + if (gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) pan = SOUND_PAN_TARGET; @@ -2805,7 +2793,7 @@ s8 BattleAnimAdjustPanning2(s8 pan) } else { - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest()) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) pan = -pan; } return pan; @@ -2896,7 +2884,7 @@ static void ScriptCmd_panse_1B(void) sBattleAnimScriptPtr += 6; } -void Task_PanFromInitialToTarget(u8 taskId) +static void Task_PanFromInitialToTarget(u8 taskId) { bool32 destroyTask = FALSE; if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tFramesToWait) @@ -3169,10 +3157,7 @@ static void ScriptCmd_jumpargeq(void) static void ScriptCmd_jumpifcontest(void) { sBattleAnimScriptPtr++; - if (IsContest()) - sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); - else - sBattleAnimScriptPtr += 4; + sBattleAnimScriptPtr += 5; } static void ScriptCmd_monbgprio_28(void) @@ -3190,7 +3175,7 @@ static void ScriptCmd_monbgprio_28(void) battlerId = gBattleAnimAttacker; battlerPosition = GetBattlerPosition(battlerId); - if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) + if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT) { SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); @@ -3200,11 +3185,8 @@ static void ScriptCmd_monbgprio_28(void) static void ScriptCmd_monbgprio_29(void) { sBattleAnimScriptPtr++; - if (!IsContest()) - { - SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); - SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); - } + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); } static void ScriptCmd_monbgprio_2A(void) @@ -3223,7 +3205,7 @@ static void ScriptCmd_monbgprio_2A(void) battlerId = gBattleAnimAttacker; battlerPosition = GetBattlerPosition(battlerId); - if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) + if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT) { SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); @@ -3261,7 +3243,7 @@ static void ScriptCmd_doublebattle_2D(void) wantedBattler = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() + if (IsDoubleBattle() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) @@ -3296,7 +3278,7 @@ static void ScriptCmd_doublebattle_2E(void) wantedBattler = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() + if (IsDoubleBattle() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) { if (wantedBattler == ANIM_ATTACKER) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c new file mode 100644 index 000000000..a02125d6d --- /dev/null +++ b/src/battle_anim_effects_1.c @@ -0,0 +1,5617 @@ +#include "global.h" +#include "malloc.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "math_util.h" +#include "palette.h" +#include "random.h" +#include "scanline_effect.h" +#include "sound.h" +#include "trig.h" +#include "util.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +EWRAM_DATA s16 gUnknown_0203A0F8[4] = {0}; + +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 *); +static void AnimMovePowderParticleStep(struct Sprite *); +static void AnimSolarbeamSmallOrbStep(struct Sprite *); +static void AnimAbsorptionOrbStep(struct Sprite *); +static void AnimHyperBeamOrbStep(struct Sprite *); +static void AnimLeechSeedStep(struct Sprite *); +static void AnimLeechSeedSprouts(struct Sprite *); +static void AnimSporeParticleStep(struct Sprite *); +static void AnimPetalDanceBigFlowerStep(struct Sprite *); +static void AnimPetalDanceSmallFlowerStep(struct Sprite *); +static void AnimRazorLeafParticleStep1(struct Sprite *); +static void AnimRazorLeafParticleStep2(struct Sprite *); +static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *); +static void AnimMoveTwisterParticleStep(struct Sprite *); +static void AnimConstrictBindingStep1(struct Sprite *); +static void AnimConstrictBindingStep2(struct Sprite *); +static void AnimTask_DuplicateAndShrinkToPosStep1(u8); +static void AnimTask_DuplicateAndShrinkToPosStep2(u8); +static void AnimItemStealStep3(struct Sprite *); +static void AnimRootFlickerOut(struct Sprite *); +static void AnimTrickBagStep1(struct Sprite *); +static void AnimTrickBagStep2(struct Sprite *); +static void AnimTrickBagStep3(struct Sprite *); +static void AnimTask_LeafBladeStep(u8); +static s16 LeafBladeGetPosFactor(struct Sprite *); +static void AnimTask_LeafBladeStep2(struct Task *, u8); +static void AnimTask_LeafBladeStep2_Callback(struct Sprite *); +static void AnimFlyingParticleStep(struct Sprite *); +static void AnimNeedleArmSpikeStep(struct Sprite *); +static void AnimSliceStep(struct Sprite *); +static void sub_80A4880(struct Sprite *); +static void AnimProtectStep(struct Sprite *); +static void AnimMilkBottleStep1(struct Sprite *); +static void AnimMilkBottleStep2(struct Sprite *, int, int); +static void sub_80A4EA0(struct Sprite *); +static void AnimSleepLetterZStep(struct Sprite *); +static void AnimLockOnTargetStep1(struct Sprite *); +static void AnimLockOnTargetStep2(struct Sprite *); +static void AnimLockOnTargetStep3(struct Sprite *); +static void AnimLockOnTargetStep4(struct Sprite *); +static void AnimLockOnTargetStep5(struct Sprite *); +static void AnimLockOnTargetStep6(struct Sprite *); +static void AnimBowMonStep1(struct Sprite *); +static void AnimBowMonStep1_Callback(struct Sprite *); +static void AnimBowMonStep2(struct Sprite *); +static void AnimBowMonStep3(struct Sprite *); +static void AnimBowMonStep4(struct Sprite *); +static void AnimBowMonStep3_Callback(struct Sprite *); +static void sub_80A55A0(struct Sprite *); +static void AnimTask_SkullBashPositionSet(u8); +static void AnimTask_SkullBashPositionReset(u8); +static void AnimFalseSwipeSliceStep1(struct Sprite *); +static void AnimFalseSwipeSliceStep2(struct Sprite *); +static void AnimFalseSwipeSliceStep3(struct Sprite *); +static void AnimEndureEnergyStep(struct Sprite *); +static void AnimSharpenSphereStep(struct Sprite *); +static void AnimConversion2Step(struct Sprite *); +static void AnimMoonStep(struct Sprite *); +static void AnimMoonlightSparkleStep(struct Sprite *); +static void AnimHornHitStep(struct Sprite *); +static void AnimTask_DoubleTeamStep(u8); +static void AnimTask_DoubleTeamCallback(struct Sprite *); +static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8); +static void AnimWavyMusicNotesStep(struct Sprite *); +static void AnimFlyingMusicNotesStep(struct Sprite *); +static void AnimSlowFlyingMusicNotesStep(struct Sprite *); +static void AnimThoughtBubbleStep(struct Sprite *); +static void AnimMetronomeFingerStep(struct Sprite *); +static void AnimFollowMeFingerStep1(struct Sprite *); +static void AnimFollowMeFingerStep2(struct Sprite *); +static void AnimTauntFingerStep1(struct Sprite *); +static void AnimTauntFingerStep2(struct Sprite *); + +const union AnimCmd gPowderParticlesAnimCmds[] = //gUnknown_83E2968 +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(10, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(14, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gPowderParticlesAnimTable[] = //gUnknown_83E298C +{ + gPowderParticlesAnimCmds, +}; + +const struct SpriteTemplate gSleepPowderParticleSpriteTemplate = //gUnknown_83E2990 +{ + .tileTag = ANIM_TAG_SLEEP_POWDER, + .paletteTag = ANIM_TAG_SLEEP_POWDER, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + +const struct SpriteTemplate gStunSporeParticleSpriteTemplate = //gUnknown_83E29A8 +{ + .tileTag = ANIM_TAG_STUN_SPORE, + .paletteTag = ANIM_TAG_STUN_SPORE, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + +const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate = //gUnknown_83E29C0 +{ + .tileTag = ANIM_TAG_POISON_POWDER, + .paletteTag = ANIM_TAG_POISON_POWDER, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds1[] = //gUnknown_83E29D8 +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds2[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds3[] = +{ + ANIMCMD_FRAME(2, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds4[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds5[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds6[] = +{ + ANIMCMD_FRAME(5, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamBigOrbAnimCmds7[] = +{ + ANIMCMD_FRAME(6, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSolarbeamSmallOrbAnimCms[] = +{ + ANIMCMD_FRAME(7, 1), + ANIMCMD_END, +}; + +const union AnimCmd gPowerAbsorptionOrbAnimCmds[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSolarbeamBigOrbAnimTable[] = //gUnknown_83E2A20 +{ + gSolarbeamBigOrbAnimCmds1, + gSolarbeamBigOrbAnimCmds2, + gSolarbeamBigOrbAnimCmds3, + gSolarbeamBigOrbAnimCmds4, + gSolarbeamBigOrbAnimCmds5, + gSolarbeamBigOrbAnimCmds6, + gSolarbeamBigOrbAnimCmds7, +}; + +const union AnimCmd *const gSolarbeamSmallOrbAnimTable[] = //gUnknown_83E2A3C +{ + gSolarbeamSmallOrbAnimCms, +}; + +const union AnimCmd *const gPowerAbsorptionOrbAnimTable[] = //gUnknown_83E2A40 +{ + gPowerAbsorptionOrbAnimCmds, +}; + +const union AffineAnimCmd gPowerAbsorptionOrbAffineAnimCmds[] = //gUnknown_83E2A44 +{ + AFFINEANIMCMD_FRAME(-5, -5, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[] = //gUnknown_83E2A54 +{ + gPowerAbsorptionOrbAffineAnimCmds, +}; + +const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate = //gUnknown_83E2A58 +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb, +}; + +const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate = //gUnknown_83E2A70 +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarbeamBigOrb, +}; + +const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate = //gUnknown_83E2A88 +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamSmallOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarbeamSmallOrb, +}; + +const union AffineAnimCmd gStockpileAbsorptionOrbAffineCmds[] = //gUnknown_83E2AA0 +{ + AFFINEANIMCMD_FRAME(320, 320, 0, 0), + AFFINEANIMCMD_FRAME(-14, -14, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[] = //gUnknown_83E2AB8 +{ + gStockpileAbsorptionOrbAffineCmds, +}; + +const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate = //gUnknown_83E2ABC +{ + .tileTag = ANIM_TAG_GRAY_ORB, + .paletteTag = ANIM_TAG_GRAY_ORB, + .oam = &gOamData_AffineDouble_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb, +}; + +const union AffineAnimCmd gAbsorptionOrbAffineAnimCmds[] = //gUnknown_83E2AD4 +{ + AFFINEANIMCMD_FRAME(-5, -5, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gAbsorptionOrbAffineAnimTable[] = //gUnknown_83E2AE4 +{ + gAbsorptionOrbAffineAnimCmds, +}; + +const struct SpriteTemplate gAbsorptionOrbSpriteTemplate = //gUnknown_83E2AE8 +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gAbsorptionOrbAffineAnimTable, + .callback = AnimAbsorptionOrb, +}; + +const struct SpriteTemplate gHyperBeamOrbSpriteTemplate = //gUnknown_83E2B00 +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb, +}; + +const union AnimCmd gLeechSeedAnimCmds1[] = //gUnknown_83E2B18 +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gLeechSeedAnimCmds2[] = //gUnknown_83E2B20 +{ + ANIMCMD_FRAME(4, 7), + ANIMCMD_FRAME(8, 7), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gLeechSeedAnimTable[] = //gUnknown_83E2B2C +{ + gLeechSeedAnimCmds1, + gLeechSeedAnimCmds2, +}; + +const struct SpriteTemplate gLeechSeedSpriteTemplate = //gUnknown_83E2B34 +{ + .tileTag = ANIM_TAG_SEED, + .paletteTag = ANIM_TAG_SEED, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gLeechSeedAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimLeechSeed, +}; + +const union AnimCmd gSporeParticleAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSporeParticleAnimCmds2[] = +{ + ANIMCMD_FRAME(4, 7), + ANIMCMD_END, +}; + +const union AnimCmd *const gSporeParticleAnimTable[] = +{ + gSporeParticleAnimCmds1, + gSporeParticleAnimCmds2, +}; + +const struct SpriteTemplate gSporeParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPORE, + .paletteTag = ANIM_TAG_SPORE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle, +}; + +const union AnimCmd gPetalDanceBigFlowerAnimCmds[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gPetalDanceSmallFlowerAnimCmds[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gPetalDanceBigFlowerAnimTable[] = +{ + gPetalDanceBigFlowerAnimCmds, +}; + +const union AnimCmd *const gPetalDanceSmallFlowerAnimTable[] = +{ + gPetalDanceSmallFlowerAnimCmds, +}; + +const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceBigFlower, +}; + +const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPetalDanceSmallFlower, +}; + +const union AnimCmd gRazorLeafParticleAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(20, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gRazorLeafParticleAnimCmds2[] = +{ + ANIMCMD_FRAME(24, 5), + ANIMCMD_FRAME(28, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gRazorLeafParticleAnimTable[] = +{ + gRazorLeafParticleAnimCmds1, + gRazorLeafParticleAnimCmds2, +}; + +const struct SpriteTemplate gRazorLeafParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRazorLeafParticle, +}; + +const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle, +}; + +const union AnimCmd gRazorLeafCutterAnimCmds[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gRazorLeafCutterAnimTable[] = +{ + gRazorLeafCutterAnimCmds, +}; + +const struct SpriteTemplate gRazorLeafCutterSpriteTemplate = +{ + .tileTag = ANIM_TAG_RAZOR_LEAF, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gRazorLeafCutterAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTranslateLinearSingleSineWave, +}; + +const union AffineAnimCmd gSwiftStarAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSwiftStarAffineAnimTable[] = { + gSwiftStarAffineAnimCmds, +}; + +const struct SpriteTemplate gSwiftStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSwiftStarAffineAnimTable, + .callback = AnimTranslateLinearSingleSineWave, +}; + +const union AnimCmd gConstrictBindingAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 4), + ANIMCMD_END, +}; + +const union AnimCmd gConstrictBindingAnimCmds2[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(96, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gConstrictBindingAnimTable[] = +{ + gConstrictBindingAnimCmds1, + gConstrictBindingAnimCmds2, +}; + +const union AffineAnimCmd gConstrictBindingAffineAnimCmds1[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-11, 0, 0, 6), + AFFINEANIMCMD_FRAME(11, 0, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gConstrictBindingAffineAnimCmds2[] = { + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(11, 0, 0, 6), + AFFINEANIMCMD_FRAME(-11, 0, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gConstrictBindingAffineAnimTable[] = { + gConstrictBindingAffineAnimCmds1, + gConstrictBindingAffineAnimCmds2, +}; + +const struct SpriteTemplate gConstrictBindingSpriteTemplate = +{ + .tileTag = ANIM_TAG_TENDRILS, + .paletteTag = ANIM_TAG_TENDRILS, + .oam = &gOamData_AffineNormal_ObjNormal_64x32, + .anims = gConstrictBindingAnimTable, + .images = NULL, + .affineAnims = gConstrictBindingAffineAnimTable, + .callback = AnimConstrictBinding, +}; + +const union AffineAnimCmd gMimicOrbAffineAnimCmds1[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 0), + AFFINEANIMCMD_FRAME(48, 48, 0, 14), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gMimicOrbAffineAnimCmds2[] = { + AFFINEANIMCMD_FRAME(-16, -16, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gMimicOrbAffineAnimTable[] = { + gMimicOrbAffineAnimCmds1, + gMimicOrbAffineAnimCmds2, +}; + +const struct SpriteTemplate gMimicOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gPowerAbsorptionOrbAnimTable, + .images = NULL, + .affineAnims = gMimicOrbAffineAnimTable, + .callback = AnimMimicOrb, +}; + +const union AnimCmd gIngrainRootAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_FRAME(48, 7), + ANIMCMD_END, +}; + +const union AnimCmd gIngrainRootAnimCmds2[] = +{ + ANIMCMD_FRAME(0, 7, .hFlip = TRUE), + ANIMCMD_FRAME(16, 7, .hFlip = TRUE), + ANIMCMD_FRAME(32, 7, .hFlip = TRUE), + ANIMCMD_FRAME(48, 7, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gIngrainRootAnimCmds3[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_END, +}; + +const union AnimCmd gIngrainRootAnimCmds4[] = +{ + ANIMCMD_FRAME(0, 7, .hFlip = TRUE), + ANIMCMD_FRAME(16, 7, .hFlip = TRUE), + ANIMCMD_FRAME(32, 7, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gIngrainRootAnimTable[] = +{ + gIngrainRootAnimCmds1, + gIngrainRootAnimCmds2, + gIngrainRootAnimCmds3, + gIngrainRootAnimCmds4, +}; + +const struct SpriteTemplate gIngrainRootSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROOTS, + .paletteTag = ANIM_TAG_ROOTS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIngrainRootAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIngrainRoot, +}; + +const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROOTS, + .paletteTag = ANIM_TAG_ROOTS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIngrainRootAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFrenzyPlantRoot, +}; + +const union AnimCmd gIngrainOrbAnimCmds[] = +{ + ANIMCMD_FRAME(3, 3), + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gIngrainOrbAnimTable[] = +{ + gIngrainOrbAnimCmds, +}; + +const struct SpriteTemplate gIngrainOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gIngrainOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIngrainOrb, +}; + +const union AnimCmd gFallingBagAnimCmds[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +const union AnimCmd *const gFallingBagAnimTable[] = +{ + gFallingBagAnimCmds, +}; + +const union AffineAnimCmd gFallingBagAffineAnimCmds1[] = { + AFFINEANIMCMD_FRAME(0, 0, -4, 10), + AFFINEANIMCMD_FRAME(0, 0, 4, 20), + AFFINEANIMCMD_FRAME(0, 0, -4, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gFallingBagAffineAnimCmds2[] = { + AFFINEANIMCMD_FRAME(0, 0, -1, 2), + AFFINEANIMCMD_FRAME(0, 0, 1, 4), + AFFINEANIMCMD_FRAME(0, 0, -1, 4), + AFFINEANIMCMD_FRAME(0, 0, 1, 4), + AFFINEANIMCMD_FRAME(0, 0, -1, 4), + AFFINEANIMCMD_FRAME(0, 0, 1, 2), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gFallingBagAffineAnimTable[] = { + gFallingBagAffineAnimCmds1, + gFallingBagAffineAnimCmds2, +}; + +const struct SpriteTemplate gPresentSpriteTemplate = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, + .images = NULL, + .affineAnims = gFallingBagAffineAnimTable, + .callback = AnimPresent, +}; + +const struct SpriteTemplate gKnockOffItemSpriteTemplate = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, + .images = NULL, + .affineAnims = gFallingBagAffineAnimTable, + .callback = AnimKnockOffItem, +}; + +const union AnimCmd gPresentHealParticleAnimCmds[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gPresentHealParticleAnimTable[] = +{ + gPresentHealParticleAnimCmds, +}; + +const struct SpriteTemplate gPresentHealParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPARKLE, + .paletteTag = ANIM_TAG_GREEN_SPARKLE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPresentHealParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPresentHealParticle, +}; + +const struct SpriteTemplate gItemStealSpriteTemplate = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, + .images = NULL, + .affineAnims = gFallingBagAffineAnimTable, + .callback = AnimItemSteal, +}; + +const union AffineAnimCmd gTrickBagAffineAnimCmds1[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 3), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gTrickBagAffineAnimCmds2[] = { + AFFINEANIMCMD_FRAME(0, -10, 0, 3), + AFFINEANIMCMD_FRAME(0, -6, 0, 3), + AFFINEANIMCMD_FRAME(0, -2, 0, 3), + AFFINEANIMCMD_FRAME(0, 0, 0, 3), + AFFINEANIMCMD_FRAME(0, 2, 0, 3), + AFFINEANIMCMD_FRAME(0, 6, 0, 3), + AFFINEANIMCMD_FRAME(0, 10, 0, 3), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gTrickBagAffineAnimTable[] = { + gTrickBagAffineAnimCmds1, + gTrickBagAffineAnimCmds2, + gFallingBagAffineAnimCmds1, + gFallingBagAffineAnimCmds2, +}; + +const struct SpriteTemplate gTrickBagSpriteTemplate = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, + .images = NULL, + .affineAnims = gTrickBagAffineAnimTable, + .callback = AnimTrickBag, +}; + +const s8 gTrickBagCoordinates[][3] = +{ + {5, 24, 1}, + {0, 4, 0}, + {8, 16, -1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 16, 0}, + {0, 0, 127}, +}; + +const union AnimCmd gLeafBladeAnimCmds1[] = +{ + ANIMCMD_FRAME(28, 1), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds2[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds3[] = +{ + ANIMCMD_FRAME(20, 1), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds4[] = +{ + ANIMCMD_FRAME(28, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds5[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds6[] = +{ + ANIMCMD_FRAME(16, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gLeafBladeAnimCmds7[] = +{ + ANIMCMD_FRAME(28, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gLeafBladeAnimTable[] = +{ + gLeafBladeAnimCmds1, + gLeafBladeAnimCmds2, + gLeafBladeAnimCmds3, + gLeafBladeAnimCmds4, + gLeafBladeAnimCmds5, + gLeafBladeAnimCmds6, + gLeafBladeAnimCmds7, +}; + +const struct SpriteTemplate gLeafBladeSpriteTemplate = +{ + .tileTag = ANIM_TAG_LEAF, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gLeafBladeAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const union AffineAnimCmd gAromatherapyBigFlowerAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gAromatherapyBigFlowerAffineAnimTable[] = { + gAromatherapyBigFlowerAffineAnimCmds, +}; + +const struct SpriteTemplate gAromatherapySmallFlowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFlyingParticle, +}; + +const struct SpriteTemplate gAromatherapyBigFlowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gAromatherapyBigFlowerAffineAnimTable, + .callback = AnimFlyingParticle, +}; + +const union AffineAnimCmd gSilverWindBigSparkAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSilverWindMediumSparkAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(192, 192, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -12, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSilverWindSmallSparkAffineAnimCmds[] = { + AFFINEANIMCMD_FRAME(143, 143, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -15, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSilverWindBigSparkAffineAnimTable[] = { + gSilverWindBigSparkAffineAnimCmds, +}; + +const union AffineAnimCmd *const gSilverWindMediumSparkAffineAnimTable[] = { + gSilverWindMediumSparkAffineAnimCmds, +}; + +const union AffineAnimCmd *const gSilverWindSmallSparkAffineAnimTable[] = { + gSilverWindSmallSparkAffineAnimCmds, +}; + +const struct SpriteTemplate gSilverWindBigSparkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_6, + .paletteTag = ANIM_TAG_SPARKLE_6, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSilverWindBigSparkAffineAnimTable, + .callback = AnimFlyingParticle, +}; + +const struct SpriteTemplate gSilverWindMediumSparkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_6, + .paletteTag = ANIM_TAG_SPARKLE_6, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSilverWindMediumSparkAffineAnimTable, + .callback = AnimFlyingParticle, +}; + +const struct SpriteTemplate gSilverWindSmallSparkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_6, + .paletteTag = ANIM_TAG_SPARKLE_6, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSilverWindSmallSparkAffineAnimTable, + .callback = AnimFlyingParticle, +}; + +const u16 gMagicalLeafBlendColors[] = +{ + RGB(31, 0, 0), + RGB(31, 19, 0), + RGB(31, 31, 0), + RGB(0, 31, 0), + RGB(5, 14, 31), + RGB(22, 10, 31), + RGB(22, 21, 31), +}; + +const struct SpriteTemplate gNeedleArmSpikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPIKE, + .paletteTag = ANIM_TAG_GREEN_SPIKE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike, +}; + +const union AnimCmd gWhipAnimCmds1[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_FRAME(112, 6), + ANIMCMD_END, +}; + +const union AnimCmd gWhipAnimCmds2[] = +{ + ANIMCMD_FRAME(64, 3, .hFlip = TRUE), + ANIMCMD_FRAME(80, 3, .hFlip = TRUE), + ANIMCMD_FRAME(96, 3, .hFlip = TRUE), + ANIMCMD_FRAME(112, 6, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gWhipAnimTable[] = +{ + gWhipAnimCmds1, + gWhipAnimCmds2, +}; + +const struct SpriteTemplate gSlamHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLAM_HIT, + .paletteTag = ANIM_TAG_SLAM_HIT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gWhipAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWhipHit, +}; + +const struct SpriteTemplate gVineWhipSpriteTemplate = +{ + .tileTag = ANIM_TAG_WHIP_HIT, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gWhipAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWhipHit, +}; + +const union AnimCmd gUnknown_08592900[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08592918[] = +{ + gUnknown_08592900, +}; + +// Unused +const struct SpriteTemplate gUnknown_0859291C = +{ + .tileTag = ANIM_TAG_HIT, + .paletteTag = ANIM_TAG_HIT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gUnknown_08592918, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A43F8, +}; + +// Unused +const struct SpriteTemplate gUnknown_08592934 = +{ + .tileTag = ANIM_TAG_HIT_2, + .paletteTag = ANIM_TAG_HIT_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gUnknown_08592918, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A43F8, +}; + +const union AffineAnimCmd gUnknown_0859294C[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0859295C[] = { + AFFINEANIMCMD_FRAME(256, 256, 32, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0859296C[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0859297C[] = { + AFFINEANIMCMD_FRAME(256, 256, 96, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0859298C[] = { + AFFINEANIMCMD_FRAME(256, 256, -128, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0859299C[] = { + AFFINEANIMCMD_FRAME(256, 256, -96, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085929AC[] = { + AFFINEANIMCMD_FRAME(256, 256, -64, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085929BC[] = { + AFFINEANIMCMD_FRAME(256, 256, -32, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085929CC[] = { + gUnknown_0859294C, + gUnknown_0859295C, + gUnknown_0859296C, + gUnknown_0859297C, + gUnknown_0859298C, + gUnknown_0859299C, + gUnknown_085929AC, + gUnknown_085929BC, +}; + +// Unused +const struct SpriteTemplate gUnknown_085929EC = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085929CC, + .callback = sub_80A4494, +}; + +const union AnimCmd gCuttingSliceAnimCmds[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gCuttingSliceAnimTable[] = +{ + gCuttingSliceAnimCmds, +}; + +const struct SpriteTemplate gCuttingSliceSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_CUT, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice, +}; + +const struct SpriteTemplate gAirCutterSliceSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_CUT, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAirCutterSlice, +}; + +const union AnimCmd gUnknown_08592A4C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A54[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A5C[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A64[] = +{ + ANIMCMD_FRAME(12, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A6C[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A74[] = +{ + ANIMCMD_FRAME(20, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A7C[] = +{ + ANIMCMD_FRAME(0, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A84[] = +{ + ANIMCMD_FRAME(4, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A8C[] = +{ + ANIMCMD_FRAME(8, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592A94[] = +{ + ANIMCMD_FRAME(12, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08592A9C[] = +{ + gUnknown_08592A4C, + gUnknown_08592A54, + gUnknown_08592A5C, + gUnknown_08592A64, + gUnknown_08592A6C, + gUnknown_08592A74, + gUnknown_08592A7C, + gUnknown_08592A84, + gUnknown_08592A8C, + gUnknown_08592A94, +}; + +// Unused +const struct SpriteTemplate gUnknown_08592AC4 = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gUnknown_08592A9C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A481C, +}; + +const struct SpriteTemplate gUnknown_08592ADC = +{ + .tileTag = ANIM_TAG_PROTECT, + .paletteTag = ANIM_TAG_PROTECT, + .oam = &gOamData_AffineOff_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimProtect, +}; + +const union AffineAnimCmd gMilkBottleAffineAnimCmds1[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gMilkBottleAffineAnimCmds2[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gMilkBottleAffineAnimTable[] = +{ + gMilkBottleAffineAnimCmds1, + gMilkBottleAffineAnimCmds2, +}; + +const struct SpriteTemplate gMilkBottleSpriteTemplate = +{ + .tileTag = ANIM_TAG_MILK_BOTTLE, + .paletteTag = ANIM_TAG_MILK_BOTTLE, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gMilkBottleAffineAnimTable, + .callback = AnimMilkBottle, +}; + +const union AnimCmd gGrantingStarsAnimCmds[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_FRAME(48, 7), + ANIMCMD_FRAME(64, 7), + ANIMCMD_FRAME(80, 7), + ANIMCMD_FRAME(96, 7), + ANIMCMD_FRAME(112, 7), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gGrantingStarsAnimTable[] = +{ + gGrantingStarsAnimCmds, +}; + +const struct SpriteTemplate gGrantingStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_SPARKLE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars, +}; + +const struct SpriteTemplate gSparklingStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_SPARKLE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSparkingStars, +}; + +const union AnimCmd gUnknown_08592BAC[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(12, 10), + ANIMCMD_FRAME(16, 26), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(20, 5), + ANIMCMD_FRAME(24, 15), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08592BD0[] = +{ + ANIMCMD_FRAME(0, 10, .hFlip = TRUE), + ANIMCMD_FRAME(4, 10, .hFlip = TRUE), + ANIMCMD_FRAME(8, 10, .hFlip = TRUE), + ANIMCMD_FRAME(12, 10, .hFlip = TRUE), + ANIMCMD_FRAME(16, 26, .hFlip = TRUE), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(20, 5, .hFlip = TRUE), + ANIMCMD_FRAME(24, 15, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08592BF4[] = +{ + gUnknown_08592BAC, + gUnknown_08592BD0, +}; + +// Unused +const struct SpriteTemplate gUnknown_08592BFC = +{ + .tileTag = ANIM_TAG_BUBBLE_BURST, + .paletteTag = ANIM_TAG_BUBBLE_BURST, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gUnknown_08592BF4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A4E40, +}; + +const union AnimCmd gSleepLetterZAnimCmds[] = +{ + ANIMCMD_FRAME(0, 40), + ANIMCMD_END, +}; + +const union AnimCmd *const gSleepLetterZAnimTable[] = +{ + gSleepLetterZAnimCmds, +}; + +const union AffineAnimCmd gSleepLetterZAffineAnimCmds1[] = +{ + AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSleepLetterZAffineAnimCmds1_2[] = +{ + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_LOOP(10), +}; + +const union AffineAnimCmd gSleepLetterZAffineAnimCmds2[] = +{ + AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSleepLetterZAffineAnimCmds2_2[] = +{ + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24), + AFFINEANIMCMD_LOOP(10), +}; + +const union AffineAnimCmd *const gSleepLetterZAffineAnimTable[] = +{ + gSleepLetterZAffineAnimCmds1, + gSleepLetterZAffineAnimCmds2, +}; + +const struct SpriteTemplate gSleepLetterZSpriteTemplate = +{ + .tileTag = ANIM_TAG_LETTER_Z, + .paletteTag = ANIM_TAG_LETTER_Z, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gSleepLetterZAnimTable, + .images = NULL, + .affineAnims = gSleepLetterZAffineAnimTable, + .callback = AnimSleepLetterZ, +}; + +const struct SpriteTemplate gLockOnTargetSpriteTemplate = +{ + .tileTag = ANIM_TAG_LOCK_ON, + .paletteTag = ANIM_TAG_LOCK_ON, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimLockOnTarget, +}; + +const struct SpriteTemplate gLockOnMoveTargetSpriteTemplate = +{ + .tileTag = ANIM_TAG_LOCK_ON, + .paletteTag = ANIM_TAG_LOCK_ON, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimLockOnMoveTarget, +}; + +const s8 gInclineMonCoordTable[][2] = +{ + { 64, 64}, + { 0, -64}, + {-64, 64}, + { 32, -32}, +}; + +const struct SpriteTemplate gBowMonSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBowMon, +}; + +// Unused +const struct SpriteTemplate gUnknown_08592CF0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A5590, +}; + +const union AnimCmd gSlashSliceAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSlashSliceAnimCmds2[] = +{ + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSlashSliceAnimTable[] = +{ + gSlashSliceAnimCmds1, + gSlashSliceAnimCmds2, +}; + +const struct SpriteTemplate gSlashSliceSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSlashSlice, +}; + +const struct SpriteTemplate gFalseSwipeSliceSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH_2, + .paletteTag = ANIM_TAG_SLASH_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFalseSwipeSlice, +}; + +const struct SpriteTemplate gFalseSwipePositionedSliceSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH_2, + .paletteTag = ANIM_TAG_SLASH_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFalseSwipePositionedSlice, +}; + +const union AnimCmd gEndureEnergyAnimCmds[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gEndureEnergyAnimTable[] = +{ + gEndureEnergyAnimCmds, +}; + +const struct SpriteTemplate gEndureEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_FOCUS_ENERGY, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; + +const union AnimCmd gSharpenSphereAnimCmds[] = +{ + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 18), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 18), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 18), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 18), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 54), + ANIMCMD_END, +}; + +const union AnimCmd *const gSharpenSphereAnimTable[] = +{ + gSharpenSphereAnimCmds, +}; + +const struct SpriteTemplate gSharpenSphereSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPHERE_TO_CUBE, + .paletteTag = ANIM_TAG_SPHERE_TO_CUBE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSharpenSphereAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSharpenSphere, +}; + +const struct SpriteTemplate gOctazookaBallSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLACK_BALL, + .paletteTag = ANIM_TAG_BLACK_BALL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const union AnimCmd gOctazookaAnimCmds[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gOctazookaAnimTable[] = +{ + gOctazookaAnimCmds, +}; + +const struct SpriteTemplate gOctazookaSmokeSpriteTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_GRAY_SMOKE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const union AnimCmd gConversionAnimCmds[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gConversionAnimTable[] = +{ + gConversionAnimCmds, +}; + +const union AffineAnimCmd gConversionAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gConversionAffineAnimTable[] = +{ + gConversionAffineAnimCmds, +}; + +const struct SpriteTemplate gConversionSpriteTemplate = +{ + .tileTag = ANIM_TAG_CONVERSION, + .paletteTag = ANIM_TAG_CONVERSION, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversionAnimTable, + .images = NULL, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion, +}; + +const union AnimCmd gConversion2AnimCmds[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gConversion2AnimTable[] = +{ + gConversion2AnimCmds, +}; + +const struct SpriteTemplate gConversion2SpriteTemplate = +{ + .tileTag = ANIM_TAG_CONVERSION, + .paletteTag = ANIM_TAG_CONVERSION, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversion2AnimTable, + .images = NULL, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion2, +}; + +const struct SpriteTemplate gMoonSpriteTemplate = +{ + .tileTag = ANIM_TAG_MOON, + .paletteTag = ANIM_TAG_MOON, + .oam = &gOamData_AffineOff_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoon, +}; + +const union AnimCmd gMoonlightSparkleAnimCmds[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gMoonlightSparkleAnimTable[] = +{ + gMoonlightSparkleAnimCmds, +}; + +const struct SpriteTemplate gMoonlightSparkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_GREEN_SPARKLE, + .paletteTag = ANIM_TAG_GREEN_SPARKLE, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gMoonlightSparkleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoonlightSparkle, +}; + +const union AnimCmd gHealingBlueStarAnimCmds[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gHealingBlueStarAnimTable[] = +{ + gHealingBlueStarAnimCmds, +}; + +const struct SpriteTemplate gHealingBlueStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLUE_STAR, + .paletteTag = ANIM_TAG_BLUE_STAR, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gHealingBlueStarAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gHornHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_HORN_HIT, + .paletteTag = ANIM_TAG_HORN_HIT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHornHit, +}; + +const union AnimCmd gSuperFangAnimCmds[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSuperFangAnimTable[] = +{ + gSuperFangAnimCmds, +}; + +const struct SpriteTemplate gSuperFangSpriteTemplate = +{ + .tileTag = ANIM_TAG_FANG_ATTACK, + .paletteTag = ANIM_TAG_FANG_ATTACK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSuperFangAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperFang, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds2[] = +{ + ANIMCMD_FRAME(4, 10), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds3[] = +{ + ANIMCMD_FRAME(8, 41), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds4[] = +{ + ANIMCMD_FRAME(12, 10), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds5[] = +{ + ANIMCMD_FRAME(16, 10), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds6[] = +{ + ANIMCMD_FRAME(20, 10), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds7[] = +{ + ANIMCMD_FRAME(0, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gWavyMusicNotesAnimCmds8[] = +{ + ANIMCMD_FRAME(4, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gMusicNotesAnimTable[] = +{ + gWavyMusicNotesAnimCmds1, + gWavyMusicNotesAnimCmds2, + gWavyMusicNotesAnimCmds3, + gWavyMusicNotesAnimCmds4, + gWavyMusicNotesAnimCmds5, + gWavyMusicNotesAnimCmds6, + gWavyMusicNotesAnimCmds7, + gWavyMusicNotesAnimCmds8, +}; + +const union AffineAnimCmd gWavyMusicNotesAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16), + AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gMusicNotesAffineAnimTable[] = +{ + gWavyMusicNotesAffineAnimCmds, +}; + +const struct SpriteTemplate gWavyMusicNotesSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, + .images = NULL, + .affineAnims = gMusicNotesAffineAnimTable, + .callback = AnimWavyMusicNotes, +}; + +const u16 gParticlesColorBlendTable[][6] = +{ + {ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, + {ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, + {ANIM_TAG_SPHERE_TO_CUBE, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, + {ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, +}; + +const struct SpriteTemplate gFastFlyingMusicNotesSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, + .images = NULL, + .affineAnims = gMusicNotesAffineAnimTable, + .callback = AnimFlyingMusicNotes, +}; + +const struct SpriteTemplate gBellyDrumHandSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBellyDrumHand, +}; + +const union AffineAnimCmd gSlowFlyingMusicNotesAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSlowFlyingMusicNotesAffineAnimTable[] = +{ + gSlowFlyingMusicNotesAffineAnimCmds, +}; + +const struct SpriteTemplate gSlowFlyingMusicNotesSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, + .images = NULL, + .affineAnims = gSlowFlyingMusicNotesAffineAnimTable, + .callback = AnimSlowFlyingMusicNotes, +}; + +const union AnimCmd gMetronomeThroughtBubbleAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gMetronomeThroughtBubbleAnimCmds3[] = +{ + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gMetronomeThroughtBubbleAnimCmds2[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd gMetronomeThroughtBubbleAnimCmds4[] = +{ + ANIMCMD_FRAME(48, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[] = +{ + gMetronomeThroughtBubbleAnimCmds1, + gMetronomeThroughtBubbleAnimCmds2, + gMetronomeThroughtBubbleAnimCmds3, + gMetronomeThroughtBubbleAnimCmds4, +}; + +const struct SpriteTemplate gThoughtBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_THOUGHT_BUBBLE, + .paletteTag = ANIM_TAG_THOUGHT_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gMetronomeThroughtBubbleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThoughtBubble, +}; + +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds1[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2_2[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(30, 30, 0, 8), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0, 0, 4, 11), + AFFINEANIMCMD_FRAME(0, 0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(-30, -30, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gMetronomeFingerAffineAnimTable[] = +{ + gMetronomeFingerAffineAnimCmds1, + gMetronomeFingerAffineAnimCmds2, +}; + +const struct SpriteTemplate gMetronomeFingerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FINGER, + .paletteTag = ANIM_TAG_FINGER, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimMetronomeFinger, +}; + +const struct SpriteTemplate gFollowMeFingerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FINGER, + .paletteTag = ANIM_TAG_FINGER, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimFollowMeFinger, +}; + +const union AnimCmd gTauntFingerAnimCmds1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gTauntFingerAnimCmds2[] = +{ + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gTauntFingerAnimCmds3[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +const union AnimCmd gTauntFingerAnimCmds4[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gTauntFingerAnimTable[] = +{ + gTauntFingerAnimCmds1, + gTauntFingerAnimCmds2, + gTauntFingerAnimCmds3, + gTauntFingerAnimCmds4, +}; + +const struct SpriteTemplate gTauntFingerSpriteTemplate = +{ + .tileTag = ANIM_TAG_FINGER_2, + .paletteTag = ANIM_TAG_FINGER_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gTauntFingerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTauntFinger, +}; + +// Animates the falling particles that horizontally wave back and forth. +// Used by Sleep Powder, Stun Spore, and Poison Powder. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: total duration in frames +// arg 3: vertical movement speed (sub-pixel value) +// arg 4: wave amplitude +// arg 5: wave speed +void AnimMovePowderParticle(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + + if (GetBattlerSide(gBattleAnimAttacker)) + { + sprite->data[3] = -gBattleAnimArgs[4]; + } + else + { + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[4] = gBattleAnimArgs[5]; + sprite->callback = AnimMovePowderParticleStep; +} + +static void AnimMovePowderParticleStep(struct Sprite* sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Moves an energy orb towards the center of the mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +void AnimPowerAbsorptionOrb(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +// Moves an orb in a straight line towards the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: sprite anim number +void AnimSolarbeamBigOrb(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Moves a small orb in a wavy pattern towards the target mon. +// The small orb "circles" the big orbs in AnimSolarbeamBigOrb. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: initial wave offset +void AnimSolarbeamSmallOrb(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = AnimSolarbeamSmallOrbStep; + sprite->callback(sprite); +} + +static void AnimSolarbeamSmallOrbStep(struct Sprite* sprite) +{ + if (AnimTranslateLinear(sprite)) + { + DestroySprite(sprite); + } + else + { + if (sprite->data[5] > 0x7F) + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1; + else + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 6; + + sprite->pos2.x += Sin(sprite->data[5], 5); + sprite->pos2.y += Cos(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 15) & 0xFF; + } +} + +// Creates 15 small secondary orbs used in the solarbeam anim effect. +// There is a 7-frame delay between each of them. +// No args. +void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 6; + gBattleAnimArgs[0] = 15; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 80; + gBattleAnimArgs[3] = 0; + CreateSpriteAndAnimate(&gSolarbeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1); + } + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); +} + +// Moves an orb from the target mon to the attacking mon in an arc-like fashion. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: wave amplitude +// arg 3: wave period (lower means faster wave) +void AnimAbsorptionOrb(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[5] = gBattleAnimArgs[2]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimAbsorptionOrbStep; +} + +static void AnimAbsorptionOrbStep(struct Sprite* sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +// Moves an orb in a wave-like fashion towards the target mon. The wave's +// properties and the sprite anim are randomly determined. +void AnimHyperBeamOrb(struct Sprite* sprite) +{ + u16 speed; + u16 animNum = Random2(); + + StartSpriteAnim(sprite, animNum % 8); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= 20; + else + sprite->pos1.x += 20; + + speed = Random2(); + sprite->data[0] = (speed & 31) + 64; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + InitAnimFastLinearTranslationWithSpeed(sprite); + sprite->data[5] = Random2() & 0xFF; + sprite->data[6] = sprite->subpriority; + sprite->callback = AnimHyperBeamOrbStep; + sprite->callback(sprite); +} + +static void AnimHyperBeamOrbStep(struct Sprite* sprite) +{ + if (AnimFastTranslateLinear(sprite)) + { + DestroyAnimSprite(sprite); + } + else + { + sprite->pos2.y += Cos(sprite->data[5], 12); + if (sprite->data[5] < 0x7F) + sprite->subpriority = sprite->data[6]; + else + sprite->subpriority = sprite->data[6] + 1; + + sprite->data[5] += 24; + sprite->data[5] &= 0xFF; + } +} + +// seed (sprouts a sapling from a seed.) +// Used by Leech Seed. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: wave amplitude +void AnimLeechSeed(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimLeechSeedStep; +} + +static void AnimLeechSeedStep(struct Sprite* sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->invisible = 1; + sprite->data[0] = 10; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimLeechSeedSprouts); + } +} + +static void AnimLeechSeedSprouts(struct Sprite* sprite) +{ + sprite->invisible = 0; + StartSpriteAnim(sprite, 1); + sprite->data[0] = 60; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Moves a spore particle in a halo around the target mon. +// The sprite's priority is updated to give the effect of going +// behind the mon's sprite. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wave offset +// arg 3: duration +// arg 4: blend (0 = off, 1 = on) +void AnimSporeParticle(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[4] == 1) + sprite->oam.objMode = ST_OAM_OBJ_BLEND; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->callback = AnimSporeParticleStep; + sprite->callback(sprite); +} + +static void AnimSporeParticleStep(struct Sprite* sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], 32); + sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); + if ((u16)(sprite->data[1] - 0x40) < 0x80) + { + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + } + else + { + u8 priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1; + if (priority > 3) + priority = 3; + + sprite->oam.priority = priority; + } + + sprite->data[1] += 2; + sprite->data[1] &= 0xFF; + if (--sprite->data[0] == -1) + DestroyAnimSprite(sprite); +} + +// In a double battle, Updates the mon sprite background priorities to allow +// the circling effect controlled by AnimSporeParticle. +// No args. +void AnimTask_SporeDoubleBattle(u8 taskId) +{ + if (IsContest() || !IsDoubleBattle()) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1) + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 3); + else + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + + DestroyAnimVisualTask(taskId); + } +} + +// Rotates a big flower around the attacking mon, and slowly floats +// downward. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target y pixel offset +// arg 3: duration +void AnimPetalDanceBigFlower(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + InitAnimLinearTranslation(sprite); + sprite->data[5] = 0x40; + sprite->callback = AnimPetalDanceBigFlowerStep; + sprite->callback(sprite); +} + +static void AnimPetalDanceBigFlowerStep(struct Sprite* sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 32); + sprite->pos2.y += Cos(sprite->data[5], -5); + if ((u16)(sprite->data[5] - 0x40) < 0x80) + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; + else + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1; + + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Slowly floats a small flower downard, while swaying from right to left. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target y pixel offset +// arg 3: duration +void AnimPetalDanceSmallFlower(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + InitAnimLinearTranslation(sprite); + sprite->data[5] = 0x40; + sprite->callback = AnimPetalDanceSmallFlowerStep; + sprite->callback(sprite); +} + +static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 8); + if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5) + sprite->oam.matrixNum ^= ST_OAM_HFLIP; + + sprite->data[5] += 5; + sprite->data[5] &= 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Shoots a leaf upward, then floats it downward while swaying back and forth. +// arg 0: upward x delta per frame +// arg 1: upward y delta per frame +// arg 2: upward duration +void AnimRazorLeafParticle(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->callback = AnimRazorLeafParticleStep1; +} + +static void AnimRazorLeafParticleStep1(struct Sprite* sprite) +{ + if (!sprite->data[2]) + { + if (sprite->data[1] & 1) + { + sprite->data[0] = 0x80; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else + { + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + sprite->callback = AnimRazorLeafParticleStep2; + } + else + { + sprite->data[2]--; + sprite->pos1.x += sprite->data[0]; + sprite->pos1.y += sprite->data[1]; + } +} + +static void AnimRazorLeafParticleStep2(struct Sprite* sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker)) + sprite->pos2.x = -Sin(sprite->data[0], 25); + else + sprite->pos2.x = Sin(sprite->data[0], 25); + + sprite->data[0] += 2; + sprite->data[0] &= 0xFF; + sprite->data[1]++; + if (!(sprite->data[1] & 1)) + sprite->pos2.y++; + + if (sprite->data[1] > 80) + DestroyAnimSprite(sprite); +} + +// Animates a sprite that moves linearly from one location to another, with a +// single-cycle sine wave added to the y position along the way. +// Used by Razor Leaf and Magical Leaf. +// arg 0: initial x offset +// arg 1: initial y offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: translation duration +// arg 5: wave amplitude +// arg 6: target between double battle opponents (boolean) +void AnimTranslateLinearSingleSineWave(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + if (!gBattleAnimArgs[6]) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + sprite->data[0] = 1; + else + sprite->data[0] = 0; + + sprite->callback = AnimTranslateLinearSingleSineWaveStep; +} + +static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) +{ + bool8 destroy = FALSE; + s16 a = sprite->data[0]; + s16 b = sprite->data[7]; + s16 r0; + + sprite->data[0] = 1; + TranslateAnimHorizontalArc(sprite); + r0 = sprite->data[7]; + sprite->data[0] = a; + if (b > 200 && r0 < 56 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; + + if (sprite->oam.affineParam && sprite->data[0]) + { + sprite->invisible ^= 1; + sprite->oam.affineParam++; + if (sprite->oam.affineParam == 30) + destroy = TRUE; + } + + if (sprite->pos1.x + sprite->pos2.x > 256 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + destroy = TRUE; + + if (destroy) + DestroyAnimSprite(sprite); +} + +// Animates particles in the Twister move animation. +// arg 0: duration +// arg 1: total y delta (the particles rise upward) +// arg 2: wave period (higher means faster wave) +// arg 3: wave amplitude +// arg 4: speedup frame (particles move faster at the end of the animation) +void AnimMoveTwisterParticle(struct Sprite* sprite) +{ + if (IsDoubleBattle() == TRUE) + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + + sprite->pos1.y += 32; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->callback = AnimMoveTwisterParticleStep; +} + +static void AnimMoveTwisterParticleStep(struct Sprite* sprite) +{ + if (sprite->data[1] == 0xFF) + { + sprite->pos1.y -= 2; + } + else if (sprite->data[1] > 0) + { + sprite->pos1.y -= 2; + sprite->data[1] -= 2; + } + + sprite->data[5] += sprite->data[2]; + if (sprite->data[0] < sprite->data[4]) + sprite->data[5] += sprite->data[2]; + + sprite->data[5] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); + sprite->pos2.y = Sin(sprite->data[5], 5); + if (sprite->data[5] < 0x80) + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) - 1; + else + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1; + + if (--sprite->data[0] == 0) + DestroyAnimSprite(sprite); +} + +// Squeezes a constricting "rope" several times via affine animations. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: affine anim num +// arg 3: num squeezes +void AnimConstrictBinding(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->affineAnimPaused = 1; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = AnimConstrictBindingStep1; +} + +static void AnimConstrictBindingStep1(struct Sprite* sprite) +{ + u8 spriteId; + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->affineAnimPaused = 0; + spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + sprite->data[0] = 0x100; + sprite->callback = AnimConstrictBindingStep2; + } +} + +static void AnimConstrictBindingStep2(struct Sprite* sprite) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + if (!sprite->data[2]) + sprite->data[0] += 11; + else + sprite->data[0] -= 11; + + if (++sprite->data[1] == 6) + { + sprite->data[1] = 0; + sprite->data[2] ^= 1; + } + + if (sprite->affineAnimEnded) + { + if (--sprite->data[7] > 0) + StartSpriteAffineAnim(sprite, sprite->data[6]); + else + DestroyAnimSprite(sprite); + } +} + +void sub_80FF458(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + if (gSprites[spriteId].invisible) + { + DestroyAnimVisualTask(taskId); + } + else + { + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + gTasks[taskId].data[14] = gSprites[spriteId].oam.priority; + gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); + gTasks[taskId].data[15] = gSprites[spriteId].oam.priority; + gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget)); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[11] = 0x100; + gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep1; + } +} + +static void AnimTask_DuplicateAndShrinkToPosStep1(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + + gTasks[taskId].data[11] += 16; + SetSpriteRotScale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); + SetBattlerSpriteYOffsetFromYScale(spriteId); + if (--gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep2; + } +} + +static void AnimTask_DuplicateAndShrinkToPosStep2(u8 taskId) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + if (gTasks[taskId].data[0] == 0) + { + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + ResetSpriteRotScale(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + gSprites[spriteId].oam.priority = gTasks[taskId].data[14]; + spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); + gSprites[spriteId].oam.priority = gTasks[taskId].data[15]; + gTasks[taskId].data[0]++; + return; + } + } + else + { + if (gTasks[taskId].data[0] == 0) + return; + } + + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 3) + DestroyAnimVisualTask(taskId); +} + +// Moves an orb from the target mon to the attacking mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +void AnimMimicOrb(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + gBattleAnimArgs[0] *= -1; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data[0]++; + break; + case 1: + sprite->invisible = 0; + if (sprite->affineAnimEnded) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[0] = 25; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = InitAndRunAnimFastLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + break; + } + } +} + +// Animates a root that flickers away after some time. +// arg 0: x pixel offset +// arg 1: y pixel offset +// arg 2: sprite subpriority offset +// arg 3: sprite anim num +// arg 4: duration +void AnimIngrainRoot(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->pos2.y = gBattleAnimArgs[1]; + sprite->subpriority = gBattleAnimArgs[2] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[0]++; + if (sprite->pos1.y + sprite->pos2.y > 120) + sprite->pos1.y += sprite->pos2.y + sprite->pos1.y - 120; + } + sprite->callback = AnimRootFlickerOut; +} + +// Places a root on the path to the target mon that flickers away after some time. +// arg 0: percent along the path to the target mon +// arg 1: x pixel offset +// arg 2: y pixel offset +// arg 3: sprite subpriority offset +// arg 4: sprite anum num +// arg 5: duration +void AnimFrenzyPlantRoot(struct Sprite *sprite) +{ + s16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + s16 attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + s16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + + targetX -= attackerX; + targetY -= attackerY; + sprite->pos1.x = attackerX + targetX * gBattleAnimArgs[0] / 100; + sprite->pos1.y = attackerY + targetY * gBattleAnimArgs[0] / 100; + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + sprite->subpriority = gBattleAnimArgs[3] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = AnimRootFlickerOut; + gUnknown_0203A0F8[0] = sprite->pos1.x; + gUnknown_0203A0F8[1] = sprite->pos1.y; + gUnknown_0203A0F8[2] = targetX; + gUnknown_0203A0F8[3] = targetY; +} + +static void AnimRootFlickerOut(struct Sprite* sprite) +{ + if (++sprite->data[0] > (sprite->data[2] - 10)) + sprite->invisible = sprite->data[0] % 2; + + if (sprite->data[0] > sprite->data[2]) + DestroyAnimSprite(sprite); +} + +// Moves an orb in a fast wavy path. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: horizontal velocity +// arg 3: wave amplitude +// arg 4: duration +void AnimIngrainOrb(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[0]++; + sprite->pos2.x = sprite->data[1] * sprite->data[0]; + sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); + if (sprite->data[0] > sprite->data[3]) + DestroyAnimSprite(sprite); +} + +static void sub_80FF9B8(struct Sprite* sprite, s16 c) +{ + int a = (sprite->pos1.x << 8) | sprite->pos1.y; + int b = (sprite->data[6] << 8) | sprite->data[7]; + c <<= 8; + sprite->data[5] = a; + sprite->data[6] = b; + sprite->data[7] = c; +} + +bool8 moveAlongLinearPath(struct Sprite* sprite) +{ + u16 xStartPos = (u8)(sprite->data[5] >> 8); + u16 yStartPos = (u8)sprite->data[5]; + s32 xEndPos = (u8)(sprite->data[6] >> 8); + s32 yEndPos = (u8)sprite->data[6]; + s16 totalTime = sprite->data[7] >> 8; + s16 currentTime = sprite->data[7] & 0xFF; + s16 yEndPos_2; + s16 r0; + s32 var1; + s32 vaxEndPos; + + if (xEndPos == 0) + xEndPos = -32; + else if (xEndPos == 255) + xEndPos = 272; + + yEndPos_2 = yEndPos - yStartPos; + r0 = xEndPos - xStartPos; + var1 = r0 * currentTime / totalTime; + vaxEndPos = yEndPos_2 * currentTime / totalTime; + sprite->pos1.x = var1 + xStartPos; + sprite->pos1.y = vaxEndPos + yStartPos; + if (++currentTime == totalTime) + return TRUE; + + sprite->data[7] = (totalTime << 8) | currentTime; + return FALSE; +} + +void AnimItemStealStep2(struct Sprite* sprite) +{ + if (sprite->data[0] == 10) + StartSpriteAffineAnim(sprite, 1); + + sprite->data[0]++; + if (sprite->data[0] > 50) + DestroyAnimSprite(sprite); +} + +static void AnimItemStealStep1(struct Sprite* sprite) +{ + sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; + if (sprite->data[0] >= 128) + { + sprite->data[1]++; + sprite->data[0] = 0; + } + + sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); + if (moveAlongLinearPath(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = AnimItemStealStep2; + } +} + +void AnimPresent(struct Sprite* sprite) +{ + s16 targetX; + s16 targetY; + InitSpritePosToAnimAttacker(sprite, FALSE); + targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) + { + sprite->data[6] = targetX; + sprite->data[7] = targetY + 10; + sub_80FF9B8(sprite, 60); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = targetX; + sprite->data[7] = targetY + 10; + sub_80FF9B8(sprite, 60); + sprite->data[3] = 3; + } + + sprite->data[4] = 60; + sprite->callback = AnimItemStealStep1; +} + +static void sub_80FFB90(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 0x7F) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (moveAlongLinearPath(sprite)) + { + sprite->pos2.y = zero; + sprite->data[0] = zero; + DestroyAnimSprite(sprite); + } +} + +void AnimKnockOffItem(struct Sprite* sprite) +{ + s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->data[6] = 0; + sprite->data[7] = targetY + 10; + sub_80FF9B8(sprite, 40); + sprite->data[3] = 3; + sprite->data[4] = 60; + sprite->callback = AnimItemStealStep1; + } + else + { + sprite->data[6] = 255; + sprite->data[7] = targetY + 10; + if (IsContest()) + sprite->data[6] = 0; + + sub_80FF9B8(sprite, 40); + sprite->data[3] = 3; + sprite->data[4] = 60; + sprite->callback = sub_80FFB90; + } +} + +// Animates a heal particle upward. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: vertical velocity +// arg 3: unused +void AnimPresentHealParticle(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->data[1] = gBattleAnimArgs[2]; + } + + sprite->data[0]++; + sprite->pos2.y = sprite->data[1] * sprite->data[0]; + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void AnimItemSteal(struct Sprite* sprite) +{ + s16 attackerX; + s16 attackerY; + InitSpritePosToAnimTarget(sprite, FALSE); + attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); + if (BATTLE_PARTNER(gBattleAnimTarget) == gBattleAnimAttacker) + { + sprite->data[6] = attackerX; + sprite->data[7] = attackerY + 10; + sub_80FF9B8(sprite, 60); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = attackerX; + sprite->data[7] = attackerY + 10; + sub_80FF9B8(sprite, 60); + sprite->data[3] = 3; + } + + sprite->data[4] = 60; + sprite->callback = AnimItemStealStep3; +} + +static void AnimItemStealStep3(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 127) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (sprite->pos2.y == 0) + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63)); + + if (moveAlongLinearPath(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = AnimItemStealStep2; + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); + } +} + +// Moves a bag in a circular motion. +// arg 0: y position +// arg 1: initial wave offset +void AnimTrickBag(struct Sprite* sprite) +{ + int a; + int b; + + if (!sprite->data[0]) + { + if (!IsContest()) + { + sprite->data[1] = gBattleAnimArgs[1]; + sprite->pos1.x = 120; + } + else + { + a = gBattleAnimArgs[1] - 32; + if (a < 0) + b = gBattleAnimArgs[1] + 0xDF; + else + b = a; + + sprite->data[1] = a - ((b >> 8) << 8); + sprite->pos1.x = 70; + } + + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[4] = 20; + sprite->pos2.x = Cos(sprite->data[1], 60); + sprite->pos2.y = Sin(sprite->data[1], 20); + sprite->callback = AnimTrickBagStep1; + if (sprite->data[1] > 0 && sprite->data[1] < 192) + sprite->subpriority = 31; + else + sprite->subpriority = 29; + } +} + +static void AnimTrickBagStep1(struct Sprite* sprite) +{ + switch (sprite->data[3]) + { + case 0: + if (sprite->data[2] > 78) + { + sprite->data[3] = 1; + StartSpriteAffineAnim(sprite, 1); + break; + } + else + { + sprite->data[2] += sprite->data[4] / 10; + sprite->data[4] += 3; + sprite->pos1.y = sprite->data[2]; + break; + } + break; + case 1: + if (sprite->data[3] && sprite->affineAnimEnded) + { + sprite->data[0] = 0; + sprite->data[2] = 0; + sprite->callback = AnimTrickBagStep2; + } + break; + } +} + +static void AnimTrickBagStep2(struct Sprite* sprite) +{ + if (sprite->data[2] == gTrickBagCoordinates[sprite->data[0]][1]) + { + if (gTrickBagCoordinates[sprite->data[0]][2] == 127) + { + sprite->data[0] = 0; + sprite->callback = AnimTrickBagStep3; + } + + sprite->data[2] = 0; + sprite->data[0]++; + } + else + { + sprite->data[2]++; + sprite->data[1] = (gTrickBagCoordinates[sprite->data[0]][0] * gTrickBagCoordinates[sprite->data[0]][2] + sprite->data[1]) & 0xFF; + if (!IsContest()) + { + if ((u16)(sprite->data[1] - 1) < 191) + sprite->subpriority = 31; + else + sprite->subpriority = 29; + } + + sprite->pos2.x = Cos(sprite->data[1], 60); + sprite->pos2.y = Sin(sprite->data[1], 20); + } +} + +static void AnimTrickBagStep3(struct Sprite* sprite) +{ + if (sprite->data[0] > 20) + DestroyAnimSprite(sprite); + + sprite->invisible = sprite->data[0] % 2; + sprite->data[0]++; +} + +void AnimTask_LeafBlade(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1; + task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH); + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT); + task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1; + task->data[9] = 56 - (task->data[5] * 64); + task->data[8] = task->data[7] - task->data[9] + task->data[6]; + task->data[2] = CreateSprite(&gLeafBladeSpriteTemplate, task->data[8], task->data[9], task->data[4]); + if (task->data[2] == MAX_SPRITES) + DestroyAnimVisualTask(taskId); + + gSprites[task->data[2]].data[0] = 10; + gSprites[task->data[2]].data[1] = task->data[8]; + gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[3] = task->data[9]; + gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[5] = LeafBladeGetPosFactor(&gSprites[task->data[2]]); + InitAnimArcTranslation(&gSprites[task->data[2]]); + task->func = AnimTask_LeafBladeStep; +} + +static void AnimTask_LeafBladeStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct Sprite* sprite = &gSprites[task->data[2]]; + int a = task->data[0]; + switch (a) + { + case 4: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 5; + task->data[0] = 0xFF; + } + break; + case 8: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 9; + task->data[0] = 0xFF; + } + break; + case 0: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 1; + task->data[0] = 0xFF; + } + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + case 2: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 3; + task->data[0] = 0xFF; + } + break; + case 3: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + case 5: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + case 6: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 7; + task->data[0] = 0xFF; + } + break; + case 7: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + case 9: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + case 10: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + task->data[15] = 11; + task->data[0] = 0xFF; + } + break; + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[8]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[9]; + sprite->data[5] = LeafBladeGetPosFactor(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + InitAnimArcTranslation(sprite); + task->data[0]++; + break; + } + case 12: + AnimTask_LeafBladeStep2(task, taskId); + if (TranslateAnimHorizontalArc(sprite)) + { + DestroySprite(sprite); + task->data[0]++; + } + break; + case 13: + if (task->data[12] == 0) + DestroyAnimVisualTask(taskId); + break; + case 0xFF: + if (++task->data[1] > 5) + { + task->data[1] = 0; + task->data[0] = task->data[15]; + } + break; + } +} + +static s16 LeafBladeGetPosFactor(struct Sprite* sprite) +{ + s16 var = 8; + if (sprite->data[4] < sprite->pos1.y) + var = -var; + + return var; +} + +static void AnimTask_LeafBladeStep2(struct Task* task, u8 taskId) +{ + task->data[14]++; + if (task->data[14] > 0) + { + u8 spriteId; + s16 spriteX; + s16 spriteY; + task->data[14] = 0; + spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; + spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; + spriteId = CreateSprite(&gLeafBladeSpriteTemplate, spriteX, spriteY, task->data[4]); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 12; + gTasks[taskId].data[12]++; + gSprites[spriteId].data[0] = task->data[13] & 1; + gTasks[taskId].data[13]++; + StartSpriteAnim(&gSprites[spriteId], task->data[3]); + gSprites[spriteId].subpriority = task->data[4]; + gSprites[spriteId].callback = AnimTask_LeafBladeStep2_Callback; + } + } +} + +static void AnimTask_LeafBladeStep2_Callback(struct Sprite* sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + sprite->data[1]++; + if (sprite->data[1] > 8) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + DestroySprite(sprite); + } + } +} + +void AnimFlyingParticle(struct Sprite* sprite) +{ + u8 battler; + if (!gBattleAnimArgs[6]) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + { + sprite->data[4] = 0; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->pos1.x = 0xFFF0; + } + else + { + sprite->data[4] = 1; + sprite->data[2] = -gBattleAnimArgs[3]; + sprite->pos1.x = 0x100; + } + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[4]; + switch (gBattleAnimArgs[5]) + { + case 0: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = GetBattlerSpriteBGPriority(battler); + break; + case 1: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; + break; + case 2: + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = GetBattlerSpriteBGPriority(battler); + break; + case 3: + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0]; + GetAnimBattlerSpriteId(ANIM_TARGET); + sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; + break; + } + + sprite->callback = AnimFlyingParticleStep; +} + +static void AnimFlyingParticleStep(struct Sprite* sprite) +{ + int a = sprite->data[7]; + sprite->data[7]++; + sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; + sprite->pos2.x = sprite->data[2] * a; + sprite->data[0] = (sprite->data[3] * a) & 0xFF; + if (!sprite->data[4]) + { + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) + return; + } + else + { + if (sprite->pos2.x + sprite->pos1.x > -16) + return; + } + + DestroySpriteAndMatrix(sprite); +} + +void sub_80A41C4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[8] = IndexOfSpritePaletteTag(ANIM_TAG_LEAF) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(ANIM_TAG_RAZOR_LEAF) * 16 + 256; + task->data[0]++; + break; + case 1: + if (++task->data[9] >= 0) + { + task->data[9] = 0; + BlendPalette(task->data[8], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]); + BlendPalette(task->data[12], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]); + if (++task->data[10] == 17) + { + task->data[10] = 0; + if (++task->data[11] == 7) + task->data[11] = 0; + } + } + break; + } + + if (gBattleAnimArgs[7] == -1) + DestroyAnimVisualTask(taskId); +} + +void AnimNeedleArmSpike(struct Sprite* sprite) +{ + u8 a; + u8 b; + u16 c; + u16 x; + u16 y; + + if (gBattleAnimArgs[4] == 0) + { + DestroyAnimSprite(sprite); + } + else + { + if (gBattleAnimArgs[0] == 0) + { + a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = gBattleAnimArgs[2] + a; + sprite->pos1.y = gBattleAnimArgs[3] + b; + sprite->data[5] = a; + sprite->data[6] = b; + } + else + { + sprite->pos1.x = a; + sprite->pos1.y = b; + sprite->data[5] = gBattleAnimArgs[2] + a; + sprite->data[6] = gBattleAnimArgs[3] + b; + } + + x = sprite->pos1.x; + sprite->data[1] = x * 16; + y = sprite->pos1.y; + sprite->data[2] = y * 16; + sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; + c = ArcTan2Neg(sprite->data[5] - x, sprite->data[6] - y); + if (IsContest()) + c -= 0x8000; + + TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c); + sprite->callback = AnimNeedleArmSpikeStep; + } +} + +static void AnimNeedleArmSpikeStep(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[1] >> 4 ; + sprite->pos1.y = sprite->data[2] >> 4 ; + sprite->data[0]--; + } + else + { + DestroySpriteAndMatrix(sprite); + } +} + +static void sub_80A43DC(struct Sprite* sprite) +{ + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void sub_80A43F8(struct Sprite* sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimWhipHit(struct Sprite* sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + StartSpriteAnim(sprite, 1); + + sprite->callback = sub_80A43DC; + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void sub_80A4494(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +// Moves the sprite in a diagonally slashing motion across the target mon. +// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right +void AnimCuttingSlice(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + sprite->pos1.y += 8; + + sprite->callback = AnimSliceStep; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +void AnimAirCutterSlice(struct Sprite* sprite) +{ + u8 a; + u8 b; + switch (gBattleAnimArgs[3]) + { + case 1: + a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0); + b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1); + break; + case 2: + a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + { + a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2; + b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2; + } + break; + case 0: + default: + a = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + b = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + break; + } + + sprite->pos1.x = a; + sprite->pos1.y = b; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + sprite->pos1.y += 8; + + sprite->callback = AnimSliceStep; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +static void AnimSliceStep(struct Sprite* sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[5] == 0) + sprite->data[1] += 0x18; + else + sprite->data[1] -= 0x18; + + sprite->data[2] -= 0x18; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]++; + if (sprite->data[0] == 20) + { + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->data[0] = 3; + sprite->callback = WaitAnimForDuration; + } +} + +void sub_80A4738(struct Sprite* sprite) +{ + if (sprite->data[2] > 1) + { + if (sprite->data[3] & 1) + { + sprite->invisible = 0; + gSprites[sprite->data[0]].invisible = 0; + gSprites[sprite->data[1]].invisible = 0; + } + else + { + sprite->invisible = 1; + gSprites[sprite->data[0]].invisible = 1; + gSprites[sprite->data[1]].invisible = 1; + } + + sprite->data[2] = 0; + sprite->data[3]++; + } + else + { + sprite->data[2]++; + } + + if (sprite->data[3] == 10) + { + DestroySprite(&gSprites[sprite->data[0]]); + DestroySprite(&gSprites[sprite->data[1]]); + DestroyAnimSprite(sprite); + } +} + +void sub_80A481C(struct Sprite* sprite) +{ + sprite->data[0] = gBattleAnimArgs[2]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + sprite->data[1] = -gBattleAnimArgs[3]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->callback = sub_80A4880; + sprite->callback(sprite); +} + +static void sub_80A4880(struct Sprite* sprite) +{ + sprite->pos2.x = Cos(sprite->data[0], 100); + sprite->pos2.y = Sin(sprite->data[0], 20); + if (sprite->data[0] < 128) + sprite->subpriority = 0; + else + sprite->subpriority = 14; + + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; + sprite->data[5] += 0x82; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == sprite->data[3]) + DestroyAnimSprite(sprite); +} + +void AnimProtect(struct Sprite* sprite) +{ + if (IsContest()) + gBattleAnimArgs[1] += 8; + + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest()) + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1; + else + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100; + sprite->data[7] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); + sprite->callback = AnimProtectStep; +} + +static void AnimProtectStep(struct Sprite *sprite) +{ + int a; + int i; + sprite->data[5] += 96; + sprite->pos2.x = -(sprite->data[5] >> 8); + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + a = gPlttBufferFaded[sprite->data[2] + 1]; + i = 0; + do + { + gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; + } while (i < 6); + + gPlttBufferFaded[sprite->data[2] + 7] = a; + } + + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7] -= 1; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); + } + + if (sprite->data[0] > 0) + { + sprite->data[0] -= 1; + } + else if (++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); + if (sprite->data[7] == 16) + { + sprite->invisible = 1; + sprite->callback = DestroyAnimSpriteAndDisableBlend; + } + } +} + +void AnimMilkBottle(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[6] = 0; + sprite->data[7] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7])); + sprite->callback = AnimMilkBottleStep1; +} + +static void AnimMilkBottleStep1(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 0) + { + sprite->data[2] = 0; + if (((++sprite->data[1]) & 1) != 0) + { + if (sprite->data[6] <= 15) + sprite->data[6]++; + } + else if (sprite->data[7] > 0) + sprite->data[7]--; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7])); + if (sprite->data[6] == 16 && sprite->data[7] == 0) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + } + break; + case 1: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + AnimMilkBottleStep2(sprite, 16, 4); + if (++sprite->data[1] > 2) + { + sprite->data[1] = 0; + sprite->pos1.y++; + } + + if (++sprite->data[2] <= 29) + break; + + if (sprite->data[2] & 1) + { + if (sprite->data[6] > 0) + sprite->data[6]--; + } + else if (sprite->data[7] <= 15) + { + sprite->data[7]++; + } + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7])); + if (sprite->data[6] == 0 && sprite->data[7] == 16) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->invisible = 1; + sprite->data[0]++; + break; + case 4: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + DestroyAnimSprite(sprite); + break; + } +} + +static void AnimMilkBottleStep2(struct Sprite* sprite, int unk1, int unk2) +{ + if (sprite->data[3] <= 11) + sprite->data[4] += 2; + + if ((u16)(sprite->data[3] - 0x12) <= 0x17) + sprite->data[4] -= 2; + + if ((sprite->data[3]) > 0x2F) + sprite->data[4] += 2; + + sprite->pos2.x = sprite->data[4] / 9; + sprite->pos2.y = sprite->data[4] / 14; + if (sprite->pos2.y < 0) + sprite->pos2.y *= -1; + + sprite->data[3]++; + if (sprite->data[3] > 0x3B) + sprite->data[3] = 0; +} + +void AnimGrantingStars(struct Sprite* sprite) +{ + if (!gBattleAnimArgs[2]) + SetSpriteCoordsToAnimAttackerCoords(sprite); + + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteLinearFixedPoint; +} + +void AnimSparkingStars(struct Sprite* sprite) +{ + u8 battler; + if (!gBattleAnimArgs[2]) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler))) + { + SetAverageBattlerPositions(battler, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + if (!gBattleAnimArgs[6]) + { + sprite->pos1.x = GetBattlerSpriteCoord(battler, 0); + sprite->pos1.y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2); + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1]; + } + + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + } + + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteLinearFixedPoint; +} + +void sub_80A4E40(struct Sprite* sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 1); + } + + sprite->callback = sub_80A4EA0; +} + +static void sub_80A4EA0(struct Sprite* sprite) +{ + if (++sprite->data[0] > 30) + { + sprite->pos2.y = (30 - sprite->data[0]) / 3; + sprite->pos2.x = Sin(sprite->data[1] * 4, 3); + sprite->data[1]++; + } + + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void AnimSleepLetterZ(struct Sprite* sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 1; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 0xFFFF; + StartSpriteAffineAnim(sprite, 1); + } + + sprite->callback = AnimSleepLetterZStep; +} + +static void AnimSleepLetterZStep(struct Sprite* sprite) +{ + sprite->pos2.y = -(sprite->data[0] / 0x28); + sprite->pos2.x = sprite->data[4] / 10; + sprite->data[4] += sprite->data[3] * 2; + sprite->data[0] += sprite->data[1]; + if (++sprite->data[1] > 60) + DestroySpriteAndMatrix(sprite); +} + +void AnimLockOnTarget(struct Sprite* sprite) +{ + sprite->pos1.x -= 32; + sprite->pos1.y -= 32; + sprite->data[0] = 20; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1); +} + +static void AnimLockOnTargetStep1(struct Sprite* sprite) +{ + switch (sprite->data[5] & 1) + { + case 0: + sprite->data[0] = 1; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 8; + sprite->data[2] = sprite->pos1.x + gInclineMonCoordTable[sprite->data[5] >> 8][0]; + sprite->data[4] = sprite->pos1.y + gInclineMonCoordTable[sprite->data[5] >> 8][1]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep2); + sprite->data[5] += 0x100; + PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63)); + break; + } + + sprite->data[5] ^= 1; +} + +static void AnimLockOnTargetStep2(struct Sprite* sprite) +{ + if ((sprite->data[5] >> 8) == 4) + { + sprite->data[0] = 10; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep3); + } + else + { + sprite->callback = AnimLockOnTargetStep1; + } +} + +static void AnimLockOnTargetStep3(struct Sprite* sprite) +{ + s16 a; + s16 b; + if (sprite->oam.affineParam == 0) + { + sprite->data[0] = 3; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep4); + } + else + { + switch (sprite->oam.affineParam) + { + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 6; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep5); + } +} + +static void AnimLockOnTargetStep4(struct Sprite* sprite) +{ + if (sprite->data[2] == 0) + { + if ((sprite->data[1] += 3) > 16) + sprite->data[1] = 16; + } + else if ((sprite->data[1] -= 3) < 0) + { + sprite->data[1] = 0; + } + + BlendPalettes(sub_80A75AC(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31)); + if (sprite->data[1] == 16) + { + int pal; + sprite->data[2]++; + pal = sprite->oam.paletteNum; + LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); + PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63)); + } + else if (sprite->data[1] == 0) + { + sprite->callback = AnimLockOnTargetStep5; + } +} + +static void AnimLockOnTargetStep5(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->data[1] = 0; + sprite->data[0] = 0; + sprite->callback = AnimLockOnTargetStep6; + } +} + +static void AnimLockOnTargetStep6(struct Sprite* sprite) +{ + if (sprite->data[0] % 3 == 0) + { + sprite->data[1]++; + sprite->invisible ^= 1; + } + + sprite->data[0]++; + if (sprite->data[1] == 8) + DestroyAnimSprite(sprite); +} + +void AnimLockOnMoveTarget(struct Sprite* sprite) +{ + sprite->oam.affineParam = gBattleAnimArgs[0]; + if ((s16)sprite->oam.affineParam == 1) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y -= 0x18; + } + else if ((s16)sprite->oam.affineParam == 2) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = ST_OAM_VFLIP; + } + else if ((s16)sprite->oam.affineParam == 3) + { + sprite->pos1.x += 0x18; + sprite->pos1.y -= 0x18; + sprite->oam.matrixNum = ST_OAM_HFLIP; + } + else + { + sprite->pos1.x += 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = ST_OAM_HFLIP | ST_OAM_VFLIP; + } + + sprite->oam.tileNum = (sprite->oam.tileNum + 16); + sprite->callback = AnimLockOnTarget; + sprite->callback(sprite); +} + +void AnimBowMon(struct Sprite* sprite) +{ + sprite->invisible = 1; + sprite->data[0] = 0; + switch (gBattleAnimArgs[0]) + { + case 0: + sprite->callback = AnimBowMonStep1; + break; + case 1: + sprite->callback = AnimBowMonStep2; + break; + case 2: + sprite->callback = AnimBowMonStep3; + break; + default: + sprite->callback = AnimBowMonStep4; + break; + } +} + +static void AnimBowMonStep1(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2; + sprite->data[2] = 0; + sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; + StoreSpriteCallbackInData6(sprite, AnimBowMonStep1_Callback); + sprite->callback = TranslateMonSpriteLinear; +} + +static void AnimBowMonStep1_Callback(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + 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[5] = 0; + } + + sprite->data[5] += sprite->data[4]; + SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[3]); + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->callback = AnimBowMonStep4; + } +} + +static void AnimBowMonStep2(struct Sprite* sprite) +{ + sprite->data[0] = 4; + sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3; + sprite->data[2] = 0; + sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; + StoreSpriteCallbackInData6(sprite, AnimBowMonStep4); + sprite->callback = TranslateMonSpriteLinear; +} + +static void AnimBowMonStep3(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->callback = AnimBowMonStep3_Callback; + } +} + +static void AnimBowMonStep3_Callback(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; + sprite->data[6] = GetBattlerSide(gBattleAnimAttacker); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->data[4] = 0xFC00; + sprite->data[5] = 0xC00; + } + else + { + sprite->data[4] = 0x400; + sprite->data[5] = 0xF400; + } + } + + sprite->data[5] += sprite->data[4]; + SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[3]); + if (++sprite->data[0] > 2) + { + ResetSpriteRotScale(sprite->data[3]); + sprite->callback = AnimBowMonStep4; + } +} + +static void AnimBowMonStep4(struct Sprite* sprite) +{ + DestroyAnimSprite(sprite); +} + +void sub_80A5590(struct Sprite *sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80A55A0; +} + +static void sub_80A55A0(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1] = 0; + sprite->data[2] = gBattlerSpriteIds[gBattleAnimAttacker]; + sprite->data[3] = GetBattlerSide(gBattleAnimAttacker); + sprite->data[4] = (sprite->data[3] != B_SIDE_PLAYER) ? 0x200 : -0x200; + sprite->data[5] = 0; + PrepareBattlerSpriteForRotScale(sprite->data[2], ST_OAM_OBJ_NORMAL); + sprite->data[0]++; + // fall through + case 1: + sprite->data[5] += sprite->data[4]; + SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->data[4] *= -1; + sprite->data[0]++; + } + break; + case 2: + sprite->data[5] += sprite->data[4]; + SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[2]); + if (++sprite->data[1] > 3) + { + ResetSpriteRotScale(sprite->data[2]); + DestroyAnimSprite(sprite); + } + break; + } +} + +void AnimTask_SkullBashPosition(u8 taskId) +{ + u8 a; + + gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker]; + a = GetBattlerSide(gBattleAnimAttacker); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + switch (gBattleAnimArgs[0]) + { + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = AnimTask_SkullBashPositionSet; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = AnimTask_SkullBashPositionReset; + break; + } +} + +static void AnimTask_SkullBashPositionSet(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + PrepareBattlerSpriteForRotScale(task->data[0], ST_OAM_OBJ_NORMAL); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]); + SetBattlerSpriteYOffsetFromRotation(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + } + else + { + if (task->data[3] & 1) + gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; + else + gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + + task->data[6] = 1; + task->data[3]--; + } + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; + } +} + +static void AnimTask_SkullBashPositionReset(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]); + SetBattlerSpriteYOffsetFromRotation(task->data[0]); + task->data[3]--; + } + else + { + ResetSpriteRotScale(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} + +void AnimSlashSlice(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep3); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +void AnimFalseSwipeSlice(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep1); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +void AnimFalseSwipePositionedSlice(struct Sprite* sprite) +{ + sprite->pos1.x = sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + StartSpriteAnim(sprite, 1); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = AnimFalseSwipeSliceStep3; +} + +static void AnimFalseSwipeSliceStep1(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 12; + sprite->data[1] = 8; + sprite->data[2] = 0; + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep2); + sprite->callback = TranslateSpriteLinear; + } +} + +static void AnimFalseSwipeSliceStep2(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = AnimFalseSwipeSliceStep3; +} + +static void AnimFalseSwipeSliceStep3(struct Sprite* sprite) +{ + if (++sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible = !sprite->invisible; + if (++sprite->data[1] > 8) + DestroyAnimSprite(sprite); + } +} + +void AnimEndureEnergy(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = AnimEndureEnergyStep; +} + +static void AnimEndureEnergyStep(struct Sprite* sprite) +{ + if (++sprite->data[0] > sprite->data[1]) + { + sprite->data[0] = 0; + sprite->pos1.y--; + } + + sprite->pos1.y -= sprite->data[0]; + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void AnimSharpenSphere(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12; + sprite->data[0] = 0; + sprite->data[1] = 2; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = BattleAnimAdjustPanning(-64); + sprite->callback = AnimSharpenSphereStep; +} + +static void AnimSharpenSphereStep(struct Sprite* sprite) +{ + if (++sprite->data[0] >= sprite->data[1]) + { + sprite->invisible = !sprite->invisible; + if (!sprite->invisible) + { + sprite->data[4]++; + if (!(sprite->data[4] & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data[5]); + } + + sprite->data[0] = 0; + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->data[1]++; + } + } + + if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) + DestroyAnimSprite(sprite); +} + +void AnimConversion(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + if (IsContest()) + sprite->pos1.y += 10; + + sprite->data[0]++; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyAnimSprite(sprite); +} + +void AnimTask_ConversionAlphaBlend(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[1], gTasks[taskId].data[1])); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} + +void AnimConversion2(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->animPaused = 1; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = AnimConversion2Step; +} + +static void AnimConversion2Step(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[0]--; + } + else + { + sprite->animPaused = 0; + sprite->data[0] = 30; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +void AnimTask_Conversion2AlphaBlend(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void sub_80A5E34(u8 taskId) +{ + u8 i; + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == B_SIDE_PLAYER) + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]); + + if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == B_SIDE_OPPONENT) + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80A5EA8(u8 taskId) +{ + u8 i; + for (i = 0; i < gBattlersCount; i++) + SetHealthboxSpriteVisible(gHealthboxSpriteIds[i]); + + DestroyAnimVisualTask(taskId); +} + +void AnimMoon(struct Sprite* sprite) +{ + if (IsContest()) + { + sprite->pos1.x = 48; + sprite->pos1.y = 40; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + } + + sprite->oam.shape = 0; + sprite->oam.size = 3; + sprite->data[0] = 0; + sprite->callback = AnimMoonStep; +} + +static void AnimMoonStep(struct Sprite* sprite) +{ + if (sprite->data[0]) + DestroyAnimSprite(sprite); +} + +void AnimMoonlightSparkle(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 1; + sprite->callback = AnimMoonlightSparkleStep; +} + +static void AnimMoonlightSparkleStep(struct Sprite* sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if (sprite->data[2] < 120) + { + sprite->pos1.y++; + sprite->data[2]++; + } + } + + if (sprite->data[0]) + DestroyAnimSprite(sprite); +} + +void AnimTask_FadeScreenBlueStep(u8); + + +void AnimTask_FadeScreenBlue(u8 taskId) +{ + int a = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int b; + int c; + int d; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = a; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = 13; + gTasks[taskId].data[8] = 14; + gTasks[taskId].data[9] = 15; + b = sub_80A76C4(1, 1, 1, 1); + c = a | b; + StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON)); + d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE); + BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31)); + gTasks[taskId].func = AnimTask_FadeScreenBlueStep; + gTasks[taskId].func(taskId); +} + +void AnimTask_FadeScreenBlueStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) + { + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); + } + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) + { + for (j = 1; j <= 15; j++) + { + gPlttBufferFaded[r3 + j] = color; + } + } + + bitmask <<= 1; + r3 += 16; + } + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + { + if (gSprites[spriteId].template == &gMoonSpriteTemplate || gSprites[spriteId].template == &gMoonlightSparkleSpriteTemplate) + gSprites[spriteId].data[0] = 1; + } + + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)LoadPointerFromVars(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; + } +} + +void AnimHornHit(struct Sprite* sprite) +{ + if (gBattleAnimArgs[2] < 2) + gBattleAnimArgs[2] = 2; + + if (gBattleAnimArgs[2] > 0x7F) + gBattleAnimArgs[2] = 0x7F; + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; + if (IsContest()) + { + sprite->oam.matrixNum = ST_OAM_HFLIP; + sprite->pos1.x += 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x -= 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = 0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = 0xA00 / sprite->data[1]; + sprite->oam.matrixNum = (ST_OAM_HFLIP | ST_OAM_VFLIP); + } + + sprite->callback = AnimHornHitStep; +} + +static void AnimHornHitStep(struct Sprite* sprite) +{ + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 7; + sprite->pos1.y = sprite->data[4] >> 7; + if (--sprite->data[1] == 1) + { + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; + } + + if (sprite->data[1] == 0) + DestroyAnimSprite(sprite); +} + +void AnimTask_DoubleTeam(u8 taskId) +{ + u16 i; + int obj; + u16 r3; + u16 r4; + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[1] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); + r3 = (task->data[1] * 16) + 0x100; + r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + for (i = 1; i < 16; i++) + gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; + + BlendPalette(r3, 16, 11, RGB(0, 0, 0)); + task->data[3] = 0; + i = 0; + while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0) + { + gSprites[obj].oam.paletteNum = task->data[1]; + gSprites[obj].data[0] = 0; + gSprites[obj].data[1] = i << 7; + gSprites[obj].data[2] = taskId; + gSprites[obj].callback = AnimTask_DoubleTeamCallback; + task->data[3]++; + i++; + } + + task->func = AnimTask_DoubleTeamStep; + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); +} + +static void AnimTask_DoubleTeamStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!task->data[3]) + { + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); + DestroyAnimVisualTask(taskId); + } +} + +static void AnimTask_DoubleTeamCallback(struct Sprite* sprite) +{ + if (++sprite->data[3] > 1) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + + if (sprite->data[0] > 64) + { + gTasks[sprite->data[2]].data[3]--; + obj_delete_but_dont_free_vram(sprite); + } + else + { + sprite->data[4] = gSineTable[sprite->data[0]] / 6; + sprite->data[5] = gSineTable[sprite->data[0]] / 13; + sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); + } +} + +void AnimSuperFang(struct Sprite* sprite) +{ + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +void AnimTask_MusicNotesRainbowBlend(u8 taskId) +{ + u16 i; + u16 j; + u16 index; + + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) + gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i]; + } + + for (j = 1; j < ARRAY_COUNT(gParticlesColorBlendTable); j++) + { + index = AllocSpritePalette(gParticlesColorBlendTable[j][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) + gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i]; + } + } + DestroyAnimVisualTask(taskId); +} + +// clears the rainbow effect for musical notes. +void AnimTask_MusicNotesClearRainbowBlend(u8 taskId) +{ + u16 i; + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable); i++) + FreeSpritePaletteByTag(gParticlesColorBlendTable[i][0]); + + DestroyAnimVisualTask(taskId); +} + +void AnimWavyMusicNotes(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + SetSpriteCoordsToAnimAttackerCoords(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + if (IsContest()) + { + a = 48; + b = 40; + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + } + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + AnimWavyMusicNotesGetNextPos(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40); + sprite->callback = AnimWavyMusicNotesStep; +} + +static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + + *c = f / g; + *d = (b << 8) / g; +} + +static void AnimWavyMusicNotesStep(struct Sprite* sprite) +{ + s16 y, yDelta; + u8 index; + + sprite->data[0]++; + yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->pos2.y = Sin(yDelta, 15); + + y = sprite->pos1.y; + if (sprite->pos1.x < -16 || sprite->pos1.x > 256 || y < -16 || y > 128) + { + DestroySpriteAndMatrix(sprite); + } + else + { + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + { + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; + + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} + +void AnimFlyingMusicNotes(struct Sprite* sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[1] *= -1; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = AnimFlyingMusicNotesStep; +} + +static void AnimFlyingMusicNotesStep(struct Sprite* sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) + { + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; + } + + if (++sprite->data[0] == 48) + DestroySpriteAndMatrix(sprite); +} + +void AnimBellyDrumHand(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = ST_OAM_HFLIP; + a = 16; + } + else + { + a = -16; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8; + sprite->data[0] = 8; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimSlowFlyingMusicNotes(struct Sprite* sprite) +{ + s16 xDiff; + u8 index; + SetSpriteCoordsToAnimAttackerCoords(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + + xDiff = (gBattleAnimArgs[0] == 0) ? -32 : 32; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = xDiff + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = AnimSlowFlyingMusicNotesStep; +} + +static void AnimSlowFlyingMusicNotesStep(struct Sprite* sprite) +{ + if (AnimTranslateLinear(sprite) == 0) + { + s16 xDiff; + xDiff = Sin(sprite->data[5], 8); + if (sprite->pos2.x < 0) + xDiff = -xDiff; + + sprite->pos2.x += xDiff; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite) +{ + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8; + else + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8; + + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; +} + +void AnimThoughtBubble(struct Sprite* sprite) +{ + u8 a; + u8 battler; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + SetSpriteNextToMonHead(battler, sprite); + a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[1] = a + 2; + StartSpriteAnim(sprite, a); + StoreSpriteCallbackInData6(sprite, AnimThoughtBubbleStep); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +static void AnimThoughtBubbleStep(struct Sprite* sprite) +{ + if (--sprite->data[0] == 0) + { + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + StartSpriteAnim(sprite, sprite->data[1]); + sprite->callback = RunStoredCallbackWhenAnimEnds; + } +} + +void AnimMetronomeFinger(struct Sprite* sprite) +{ + u8 battler; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + SetSpriteNextToMonHead(battler, sprite); + sprite->data[0] = 0; + StoreSpriteCallbackInData6(sprite, AnimMetronomeFingerStep); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void AnimMetronomeFingerStep(struct Sprite* sprite) +{ + if (++sprite->data[0] > 16) + { + StartSpriteAffineAnim(sprite, 1); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + } +} + +void AnimFollowMeFinger(struct Sprite* sprite) +{ + u8 battler; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + sprite->pos1.x = GetBattlerSpriteCoord(battler, 0); + sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData6(sprite, AnimFollowMeFingerStep1); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void AnimFollowMeFingerStep1(struct Sprite* sprite) +{ + if (++sprite->data[4] > 12) + sprite->callback = AnimFollowMeFingerStep2; +} + +static void AnimFollowMeFingerStep2(struct Sprite* sprite) +{ + s16 x1, x2; + + sprite->data[1] += 4; + if (sprite->data[1] > 254) + { + if (--sprite->data[0] == 0) + { + sprite->pos2.x = 0; + sprite->callback = AnimMetronomeFingerStep; + return; + } + else + { + sprite->data[1] &= 0xFF; + } + } + + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; + + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; + + x1 = gSineTable[sprite->data[1]]; + x2 = x1 >> 3; + sprite->pos2.x = (x1 >> 3) + (x2 >> 1); +} + +void AnimTauntFinger(struct Sprite* sprite) +{ + u8 battler; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + SetSpriteNextToMonHead(battler, sprite); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 3; + } + + sprite->callback = AnimTauntFingerStep1; +} + +static void AnimTauntFingerStep1(struct Sprite* sprite) +{ + if (++sprite->data[1] > 10) + { + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData6(sprite, AnimTauntFingerStep2); + sprite->callback = RunStoredCallbackWhenAnimEnds; + } +} + +static void AnimTauntFingerStep2(struct Sprite* sprite) +{ + if (++sprite->data[1] > 5) + DestroyAnimSprite(sprite); +} + diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index a3bd26898..bdba7ae3b 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -88,7 +88,7 @@ static const struct SpriteTemplate gUnknown_83AE054[] = { .tileTag = 0xD755, .paletteTag = 0xD755, - .oam = &gOamData_83ACA40, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -97,7 +97,7 @@ static const struct SpriteTemplate gUnknown_83AE054[] = { .tileTag = 0xD756, .paletteTag = 0xD756, - .oam = &gOamData_83ACA40, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -46,7 +46,7 @@ const struct SpriteTemplate gUnknown_83E7224 = { .tileTag = ANIM_TAG_HORN_HIT_2, .paletteTag = ANIM_TAG_HORN_HIT_2, - .oam = &gOamData_83ACAB8, + .oam = &gOamData_AffineDouble_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7218, @@ -82,7 +82,7 @@ const struct SpriteTemplate gUnknown_83E7278 = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E726C, @@ -93,7 +93,7 @@ const struct SpriteTemplate gWebThreadSpriteTemplate = { .tileTag = ANIM_TAG_WEB_THREAD, .paletteTag = ANIM_TAG_WEB_THREAD, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -104,7 +104,7 @@ const struct SpriteTemplate gUnknown_83E72A8 = { .tileTag = ANIM_TAG_STRING, .paletteTag = ANIM_TAG_STRING, - .oam = &gOamData_83ACA00, + .oam = &gOamData_AffineOff_ObjNormal_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -127,7 +127,7 @@ const struct SpriteTemplate gSpiderWebSpriteTemplate = { .tileTag = ANIM_TAG_SPIDER_WEB, .paletteTag = ANIM_TAG_SPIDER_WEB, - .oam = &gOamData_83ACBC0, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E72D8, @@ -138,7 +138,7 @@ const struct SpriteTemplate gLinearStingerSpriteTemplate = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -149,7 +149,7 @@ const struct SpriteTemplate gPinMissileSpriteTemplate = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -160,7 +160,7 @@ const struct SpriteTemplate gIcicleSpearSpriteTemplate = { .tileTag = ANIM_TAG_ICICLE_SPEAR, .paletteTag = ANIM_TAG_ICICLE_SPEAR, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -187,7 +187,7 @@ const struct SpriteTemplate gUnknown_83E7378 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7374, diff --git a/src/dark.c b/src/dark.c index 368f5cbd5..e13227316 100644 --- a/src/dark.c +++ b/src/dark.c @@ -27,7 +27,7 @@ const struct SpriteTemplate gUnknown_83E7878 = { .tileTag = ANIM_TAG_TIED_BAG, .paletteTag = ANIM_TAG_TIED_BAG, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -98,7 +98,7 @@ const struct SpriteTemplate gUnknown_83E7930 = { .tileTag = ANIM_TAG_SHARP_TEETH, .paletteTag = ANIM_TAG_SHARP_TEETH, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7910, @@ -109,7 +109,7 @@ const struct SpriteTemplate gUnknown_83E7948 = { .tileTag = ANIM_TAG_CLAMP, .paletteTag = ANIM_TAG_CLAMP, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7910, @@ -140,7 +140,7 @@ const struct SpriteTemplate gUnknown_83E7998 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7990, @@ -177,7 +177,7 @@ const struct SpriteTemplate gUnknown_83E79E8 = { .tileTag = ANIM_TAG_CLAW_SLASH, .paletteTag = ANIM_TAG_CLAW_SLASH, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E79E0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/dragon.c b/src/dragon.c index 34f97ba74..d18cf25df 100644 --- a/src/dragon.c +++ b/src/dragon.c @@ -35,7 +35,7 @@ const struct SpriteTemplate gUnknown_83E772C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E7728, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -88,7 +88,7 @@ const struct SpriteTemplate gUnknown_83E77A4 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E7764, .images = NULL, .affineAnims = gUnknown_83E779C, @@ -114,7 +114,7 @@ const struct SpriteTemplate gUnknown_83E77D8 = { .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E77D4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -157,7 +157,7 @@ const struct SpriteTemplate gUnknown_83E7830 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E7800, .images = NULL, .affineAnims = gUnknown_83E7828, @@ -168,7 +168,7 @@ const struct SpriteTemplate gUnknown_83E7848 = { .tileTag = ANIM_TAG_HOLLOW_ORB, .paletteTag = ANIM_TAG_HOLLOW_ORB, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -179,7 +179,7 @@ const struct SpriteTemplate gUnknown_83E7860 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E7728, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/electric.c b/src/electric.c index 025eac48b..908ce60a4 100644 --- a/src/electric.c +++ b/src/electric.c @@ -53,7 +53,7 @@ const struct SpriteTemplate gUnknown_83E5F38 = { .tileTag = ANIM_TAG_LIGHTNING, .paletteTag = ANIM_TAG_LIGHTNING, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5F34, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -77,7 +77,7 @@ const struct SpriteTemplate gUnknown_83E5F74 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E5F70, @@ -104,7 +104,7 @@ const struct SpriteTemplate gUnknown_83E5FAC = { .tileTag = ANIM_TAG_SHOCK, .paletteTag = ANIM_TAG_SHOCK, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5FA8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -115,7 +115,7 @@ const struct SpriteTemplate gUnknown_83E5FC4 = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -126,7 +126,7 @@ const struct SpriteTemplate gUnknown_83E5FDC = { .tileTag = ANIM_TAG_BLACK_BALL_2, .paletteTag = ANIM_TAG_BLACK_BALL_2, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -148,7 +148,7 @@ const struct SpriteTemplate gUnknown_83E6008 = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6004, @@ -185,7 +185,7 @@ const struct SpriteTemplate gUnknown_83E6058 = { .tileTag = ANIM_TAG_SHOCK_3, .paletteTag = ANIM_TAG_SHOCK_3, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E6030, .images = NULL, .affineAnims = gUnknown_83E6054, @@ -196,7 +196,7 @@ const struct SpriteTemplate gUnknown_83E6070 = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6004, @@ -207,7 +207,7 @@ const struct SpriteTemplate gElectricitySpriteTemplate = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -218,7 +218,7 @@ static const struct SpriteTemplate gUnknown_83E60A0 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -229,7 +229,7 @@ const struct SpriteTemplate gUnknown_83E60B8 = { .tileTag = ANIM_TAG_SPARK_H, .paletteTag = ANIM_TAG_SPARK_H, - .oam = &gOamData_83AC9F8, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -284,7 +284,7 @@ static const struct SpriteTemplate gUnknown_83E6120 = { .tileTag = ANIM_TAG_ELECTRIC_ORBS, .paletteTag = ANIM_TAG_ELECTRIC_ORBS, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_83E6118, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -332,7 +332,7 @@ const struct SpriteTemplate gUnknown_83E61D4 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E61C8, @@ -357,7 +357,7 @@ const struct SpriteTemplate gUnknown_83E6204 = { .tileTag = ANIM_TAG_ELECTRICITY, .paletteTag = ANIM_TAG_ELECTRICITY, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E6200, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -368,7 +368,7 @@ const struct SpriteTemplate gUnknown_83E621C = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E61C8, @@ -422,7 +422,7 @@ static const struct SpriteTemplate gUnknown_83E6278 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gOamData_83ACAC8, + .oam = &gOamData_AffineDouble_ObjNormal_8x16, .anims = gUnknown_83E6254, .images = NULL, .affineAnims = gUnknown_83E6274, @@ -433,7 +433,7 @@ const struct SpriteTemplate gUnknown_83E6290 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E61C8, @@ -444,7 +444,7 @@ static const struct SpriteTemplate gUnknown_83E62A8 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/fighting.c b/src/fighting.c index 496f752ef..7b826594d 100644 --- a/src/fighting.c +++ b/src/fighting.c @@ -39,7 +39,7 @@ const struct SpriteTemplate gUnknown_83E668C = { .tileTag = ANIM_TAG_HUMANOID_FOOT, .paletteTag = ANIM_TAG_HUMANOID_FOOT, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -97,7 +97,7 @@ const struct SpriteTemplate gUnknown_83E66E0 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -108,7 +108,7 @@ const struct SpriteTemplate gUnknown_83E66F8 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -119,7 +119,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -130,7 +130,7 @@ const struct SpriteTemplate gUnknown_83E6728 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -141,7 +141,7 @@ const struct SpriteTemplate gUnknown_83E6740 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66D8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -152,7 +152,7 @@ const struct SpriteTemplate gUnknown_83E6758 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -175,7 +175,7 @@ const struct SpriteTemplate gUnknown_83E678C = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gUnknown_83E6788, @@ -198,7 +198,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gUnknown_83E67BC, @@ -209,7 +209,7 @@ const struct SpriteTemplate gUnknown_83E67D8 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -220,7 +220,7 @@ const struct SpriteTemplate gUnknown_83E67F0 = { .tileTag = ANIM_TAG_DUCK, .paletteTag = ANIM_TAG_DUCK, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -231,7 +231,7 @@ const struct SpriteTemplate gUnknown_83E6808 = { .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -242,7 +242,7 @@ const struct SpriteTemplate gUnknown_83E6820 = { .tileTag = ANIM_TAG_TORN_METAL, .paletteTag = ANIM_TAG_TORN_METAL, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -267,7 +267,7 @@ const struct SpriteTemplate gUnknown_83E6864 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACBC0, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6860, @@ -278,7 +278,7 @@ const struct SpriteTemplate gUnknown_83E687C = { .tileTag = ANIM_TAG_FLAT_ROCK, .paletteTag = ANIM_TAG_FLAT_ROCK, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -289,7 +289,7 @@ const struct SpriteTemplate gUnknown_83E6894 = { .tileTag = ANIM_TAG_METEOR, .paletteTag = ANIM_TAG_METEOR, - .oam = &gOamData_83AC9E0, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -300,7 +300,7 @@ const struct SpriteTemplate gUnknown_83E68AC = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -342,7 +342,7 @@ const struct SpriteTemplate gUnknown_83E6900 = { .tileTag = ANIM_TAG_PURPLE_SCRATCH, .paletteTag = ANIM_TAG_PURPLE_SCRATCH, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E68F4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -381,7 +381,7 @@ const struct SpriteTemplate gUnknown_83E6948 = { .tileTag = ANIM_TAG_PURPLE_SWIPE, .paletteTag = ANIM_TAG_PURPLE_SWIPE, - .oam = &gOamData_83AC9E0, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gUnknown_83E693C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -404,7 +404,7 @@ const struct SpriteTemplate gUnknown_83E697C = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E66CC, .images = NULL, .affineAnims = gUnknown_83E6978, diff --git a/src/fire.c b/src/fire.c index 014413f5b..a5a2ee5f6 100644 --- a/src/fire.c +++ b/src/fire.c @@ -64,7 +64,7 @@ const struct SpriteTemplate gUnknown_83E5BE0 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5BD8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -75,7 +75,7 @@ const struct SpriteTemplate gUnknown_83E5BF8 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5BD8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -131,7 +131,7 @@ const struct SpriteTemplate gUnknown_83E5C70 = { .tileTag = ANIM_TAG_FIRE, .paletteTag = ANIM_TAG_FIRE, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E5C34, .images = NULL, .affineAnims = gUnknown_83E5C6C, @@ -142,7 +142,7 @@ const struct SpriteTemplate gUnknown_83E5C88 = { .tileTag = ANIM_TAG_FIRE, .paletteTag = ANIM_TAG_FIRE, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5C34, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -153,7 +153,7 @@ const struct SpriteTemplate gUnknown_83E5CA0 = { .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5C50, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -164,7 +164,7 @@ const struct SpriteTemplate gUnknown_83E5CB8 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5C50, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_83E5CE4 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5CE0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -211,7 +211,7 @@ const struct SpriteTemplate gUnknown_83E5D18 = { .tileTag = ANIM_TAG_SUNLIGHT, .paletteTag = ANIM_TAG_SUNLIGHT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E5D14, @@ -237,7 +237,7 @@ const struct SpriteTemplate gEmberSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -248,7 +248,7 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -259,7 +259,7 @@ const struct SpriteTemplate gUnknown_83E5D7C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -270,7 +270,7 @@ const struct SpriteTemplate gUnknown_83E5D94 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -311,7 +311,7 @@ const struct SpriteTemplate gUnknown_83E5DE4 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5DB8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -322,7 +322,7 @@ const struct SpriteTemplate gUnknown_83E5DFC = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -333,7 +333,7 @@ const struct SpriteTemplate gUnknown_83E5E14 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -344,7 +344,7 @@ static const struct SpriteTemplate gUnknown_83E5E2C = { .tileTag = ANIM_TAG_WARM_ROCK, .paletteTag = ANIM_TAG_WARM_ROCK, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -366,7 +366,7 @@ const struct SpriteTemplate gUnknown_83E5E60 = { .tileTag = ANIM_TAG_WARM_ROCK, .paletteTag = ANIM_TAG_WARM_ROCK, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -412,7 +412,7 @@ const struct SpriteTemplate gUnknown_83E5EB4 = { .tileTag = ANIM_TAG_WISP_ORB, .paletteTag = ANIM_TAG_WISP_ORB, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_83E5EA4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -437,7 +437,7 @@ const struct SpriteTemplate gUnknown_83E5EE4 = { .tileTag = ANIM_TAG_WISP_FIRE, .paletteTag = ANIM_TAG_WISP_FIRE, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5EE0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/flying.c b/src/flying.c index 59378c2f1..6d4a1eb56 100644 --- a/src/flying.c +++ b/src/flying.c @@ -39,7 +39,7 @@ const struct SpriteTemplate gUnknown_83E6AE8 = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, - .oam = &gOamData_83ACA20, + .oam = &gOamData_AffineOff_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -62,7 +62,7 @@ const struct SpriteTemplate gUnknown_83E6B1C = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, - .oam = &gOamData_83ACA80, + .oam = &gOamData_AffineNormal_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6B18, @@ -87,7 +87,7 @@ const struct SpriteTemplate gUnknown_83E6B4C = { .tileTag = ANIM_TAG_AIR_WAVE_2, .paletteTag = ANIM_TAG_AIR_WAVE_2, - .oam = &gOamData_83AC9F8, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gUnknown_83E6B48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -130,7 +130,7 @@ const struct SpriteTemplate gUnknown_83E6BB8 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6B8C, @@ -141,7 +141,7 @@ const struct SpriteTemplate gUnknown_83E6BD0 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gOamData_83ACA40, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6BB0, @@ -170,7 +170,7 @@ const struct SpriteTemplate gUnknown_83E6C00 = { .tileTag = ANIM_TAG_WHITE_FEATHER, .paletteTag = ANIM_TAG_WHITE_FEATHER, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E6BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -184,7 +184,7 @@ const struct SpriteTemplate gUnknown_83E6C38 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -195,7 +195,7 @@ const struct SpriteTemplate gUnknown_83E6C50 = { .tileTag = ANIM_TAG_WHITE_FEATHER, .paletteTag = ANIM_TAG_WHITE_FEATHER, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E6BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -221,7 +221,7 @@ const struct SpriteTemplate gUnknown_83E6C84 = { .tileTag = ANIM_TAG_WHIRLWIND_LINES, .paletteTag = ANIM_TAG_WHIRLWIND_LINES, - .oam = &gOamData_83AC9F8, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gUnknown_83E6C80, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -247,7 +247,7 @@ const struct SpriteTemplate gUnknown_83E6CD0 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6CCC, @@ -269,7 +269,7 @@ const struct SpriteTemplate gUnknown_83E6CFC = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6CF8, @@ -294,7 +294,7 @@ const struct SpriteTemplate gUnknown_83E6D40 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6D3C, @@ -320,7 +320,7 @@ const struct SpriteTemplate gUnknown_83E6D7C = { .tileTag = ANIM_TAG_SPLASH, .paletteTag = ANIM_TAG_SPLASH, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -331,7 +331,7 @@ const struct SpriteTemplate gUnknown_83E6D94 = { .tileTag = ANIM_TAG_SWEAT_BEAD, .paletteTag = ANIM_TAG_SWEAT_BEAD, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -342,7 +342,7 @@ const struct SpriteTemplate gUnknown_83E6DAC = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -353,7 +353,7 @@ const struct SpriteTemplate gUnknown_83E6DB4 = { .tileTag = ANIM_TAG_BIRD, .paletteTag = ANIM_TAG_BIRD, - .oam = &gOamData_83ACAA0, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/ghost.c b/src/ghost.c index 30430309e..643cc3b0d 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -63,7 +63,7 @@ const struct SpriteTemplate gUnknown_83E75C4 = { .tileTag = ANIM_TAG_YELLOW_BALL, .paletteTag = ANIM_TAG_YELLOW_BALL, - .oam = &gOamData_83ACA90, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E75C0, @@ -74,7 +74,7 @@ const struct SpriteTemplate gUnknown_83E75DC = { .tileTag = ANIM_TAG_YELLOW_BALL, .paletteTag = ANIM_TAG_YELLOW_BALL, - .oam = &gOamData_83ACAF0, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -96,7 +96,7 @@ const struct SpriteTemplate gShadowBallSpriteTemplate = { .tileTag = ANIM_TAG_SHADOW_BALL, .paletteTag = ANIM_TAG_SHADOW_BALL, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7604, @@ -122,7 +122,7 @@ const struct SpriteTemplate gUnknown_83E763C = { .tileTag = ANIM_TAG_LICK, .paletteTag = ANIM_TAG_LICK, - .oam = &gOamData_83ACA18, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_83E7638, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -146,7 +146,7 @@ const struct SpriteTemplate gUnknown_83E7668 = { .tileTag = ANIM_TAG_WHITE_SHADOW, .paletteTag = ANIM_TAG_WHITE_SHADOW, - .oam = &gOamData_83ACB20, + .oam = &gOamData_AffineOff_ObjBlend_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -157,7 +157,7 @@ const struct SpriteTemplate gUnknown_83E7680 = { .tileTag = ANIM_TAG_NAIL, .paletteTag = ANIM_TAG_NAIL, - .oam = &gOamData_83ACB18, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -168,7 +168,7 @@ const struct SpriteTemplate gUnknown_83E7698 = { .tileTag = ANIM_TAG_GHOSTLY_SPIRIT, .paletteTag = ANIM_TAG_GHOSTLY_SPIRIT, - .oam = &gOamData_83ACAF8, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -179,7 +179,7 @@ const struct SpriteTemplate gUnknown_83E76B0 = { .tileTag = ANIM_TAG_DEVIL, .paletteTag = ANIM_TAG_DEVIL, - .oam = &gOamData_83ACAF8, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -204,7 +204,7 @@ const struct SpriteTemplate gUnknown_83E76E0 = { .tileTag = ANIM_TAG_PURPLE_FLAME, .paletteTag = ANIM_TAG_PURPLE_FLAME, - .oam = &gOamData_83ACB38, + .oam = &gOamData_AffineOff_ObjBlend_16x32, .anims = gUnknown_83E76DC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/ground.c b/src/ground.c index 7ab6b6e95..423671112 100644 --- a/src/ground.c +++ b/src/ground.c @@ -52,7 +52,7 @@ const struct SpriteTemplate gUnknown_83E7A28 = { .tileTag = ANIM_TAG_BONE, .paletteTag = ANIM_TAG_BONE, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7A20, @@ -63,7 +63,7 @@ const struct SpriteTemplate gUnknown_83E7A40 = { .tileTag = ANIM_TAG_BONE, .paletteTag = ANIM_TAG_BONE, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7A24, @@ -74,7 +74,7 @@ const struct SpriteTemplate gUnknown_83E7A58 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -96,7 +96,7 @@ const struct SpriteTemplate gUnknown_83E7A7C = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_83E7A78, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -107,7 +107,7 @@ const struct SpriteTemplate gUnknown_83E7A94 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -118,7 +118,7 @@ const struct SpriteTemplate gUnknown_83E7AAC = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -129,7 +129,7 @@ const struct SpriteTemplate gUnknown_83E7AC4 = { .tileTag = ANIM_TAG_DIRT_MOUND, .paletteTag = ANIM_TAG_DIRT_MOUND, - .oam = &gOamData_83AC9F8, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -66,7 +66,7 @@ static const struct SpriteTemplate gUnknown_83E62D0 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -155,7 +155,7 @@ const struct SpriteTemplate gUnknown_83E6348 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACBE8, + .oam = &gOamData_AffineDouble_ObjBlend_8x16, .anims = gUnknown_83E6320, .images = NULL, .affineAnims = gUnknown_83E6344, @@ -166,7 +166,7 @@ const struct SpriteTemplate gUnknown_83E6360 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACAE8, + .oam = &gOamData_AffineOff_ObjBlend_8x8, .anims = gUnknown_83E6324, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_83E638C = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACB88, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, .anims = gUnknown_83E6320, .images = NULL, .affineAnims = gUnknown_83E6388, @@ -199,7 +199,7 @@ const struct SpriteTemplate gUnknown_83E63A4 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACAE8, + .oam = &gOamData_AffineOff_ObjBlend_8x8, .anims = gUnknown_83E6324, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_83E63E0 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACB88, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, .anims = gUnknown_83E6320, .images = NULL, .affineAnims = gUnknown_83E63DC, @@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_83E63F8 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83ACB48, + .oam = &gOamData_AffineNormal_ObjBlend_8x8, .anims = gUnknown_83E6324, .images = NULL, .affineAnims = gUnknown_83E63DC, @@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_83E6410 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_83E6328, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -256,7 +256,7 @@ const struct SpriteTemplate gUnknown_83E6428 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_83E632C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -267,7 +267,7 @@ const struct SpriteTemplate gUnknown_83E6440 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_83E6328, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -295,7 +295,7 @@ const struct SpriteTemplate gUnknown_83E647C = { .tileTag = ANIM_TAG_ICE_SPIKES, .paletteTag = ANIM_TAG_ICE_SPIKES, - .oam = &gOamData_83ACB28, + .oam = &gOamData_AffineOff_ObjBlend_8x16, .anims = gUnknown_83E6478, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -318,7 +318,7 @@ const struct SpriteTemplate gUnknown_83E64A4 = { .tileTag = ANIM_TAG_MIST_CLOUD, .paletteTag = ANIM_TAG_MIST_CLOUD, - .oam = &gOamData_83ACB18, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_83E64A0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -329,7 +329,7 @@ const struct SpriteTemplate gUnknown_83E64BC = { .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, - .oam = &gOamData_83ACB18, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_83E64A0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_83E64E8 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -361,7 +361,7 @@ const struct SpriteTemplate gUnknown_83E6514 = { .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, - .oam = &gOamData_83ACB18, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_83E64A0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -422,7 +422,7 @@ static const struct SpriteTemplate gUnknown_83E65A4 = { .tileTag = ANIM_TAG_HAIL, .paletteTag = ANIM_TAG_HAIL, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6594, @@ -433,7 +433,7 @@ const struct SpriteTemplate gUnknown_83E65BC = { .tileTag = ANIM_TAG_HAIL, .paletteTag = ANIM_TAG_HAIL, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E65A0, @@ -504,7 +504,7 @@ const struct SpriteTemplate gUnknown_83E665C = { .tileTag = ANIM_TAG_ICE_CHUNK, .paletteTag = ANIM_TAG_ICE_CHUNK, - .oam = &gOamData_83ACA98, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_83E65F0, .images = NULL, .affineAnims = gUnknown_83E6648, @@ -515,7 +515,7 @@ const struct SpriteTemplate gUnknown_83E6674 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_83E6324, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 44a40c6ec..a35e9e9f8 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -59,7 +59,7 @@ void sub_8145D18(u8 whichWindow); void sub_8146060(void); void sub_81461D8(void); -extern const struct OamData gOamData_83AC9F8; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; const u8 gUnknown_8467068[][3] = { {0, 2, 3}, @@ -114,7 +114,7 @@ const struct SpritePalette gUnknown_8467F60[] = { {gUnknown_8467ED4, 0x8000} }; const struct SpriteTemplate gUnknown_8467FA0 = { - 0x8000, 0x8000, &gOamData_83AC9F8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = { {1, 0, 0, 0, gUnknown_846718C, gUnknown_8467288, gUnknown_846708C}, diff --git a/src/normal.c b/src/normal.c index 4d86b55a6..4e045340f 100644 --- a/src/normal.c +++ b/src/normal.c @@ -63,7 +63,7 @@ const struct SpriteTemplate gConfusionDuckSpriteTemplate = { .tileTag = ANIM_TAG_DUCK, .paletteTag = ANIM_TAG_DUCK, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_83E7B04, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -111,7 +111,7 @@ const struct SpriteTemplate gUnknown_83E7B70 = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E7B6C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -168,7 +168,7 @@ const struct SpriteTemplate gBasicHitSplatSpriteTemplate = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -179,7 +179,7 @@ const struct SpriteTemplate gUnknown_83E7C20 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -190,7 +190,7 @@ const struct SpriteTemplate gUnknown_83E7C38 = { .tileTag = ANIM_TAG_WATER_IMPACT, .paletteTag = ANIM_TAG_WATER_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -201,7 +201,7 @@ const struct SpriteTemplate gUnknown_83E7C50 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -212,7 +212,7 @@ const struct SpriteTemplate gUnknown_83E7C68 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_83E7C80 = { .tileTag = ANIM_TAG_CROSS_IMPACT, .paletteTag = ANIM_TAG_CROSS_IMPACT, - .oam = &gOamData_83ACAF8, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_83E7C98 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, @@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_83E7CB0 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gOamData_83ACB58, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7BF8, diff --git a/src/oak_speech.c b/src/oak_speech.c index 3f946e13f..79f8b18c7 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -328,12 +328,12 @@ static const union AnimCmd *const sGrassPlatformAnims3[] = { sGrassPlatformAnim3 }; -extern const struct OamData gOamData_83ACAF8; +extern const struct OamData gOamData_AffineOff_ObjBlend_32x32; static const struct SpriteTemplate sOakSpeech_GrassPlatformSpriteTemplates[3] = { - { 0x1000, 0x1000, &gOamData_83ACAF8, sGrassPlatformAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1000, 0x1000, &gOamData_83ACAF8, sGrassPlatformAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1000, 0x1000, &gOamData_83ACAF8, sGrassPlatformAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, + { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, + { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, + { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, }; static const union AnimCmd sPikaAnim1[] = { @@ -389,14 +389,14 @@ static const union AnimCmd *const sPikaAnims3[] = { sPikaAnim3 }; -extern const struct OamData gOamData_83AC9D8; -extern const struct OamData gOamData_83AC9F8; -extern const struct OamData gOamData_83AC9E8; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; +extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; static const struct SpriteTemplate sOakSpeech_PikaSpriteTemplates[3] = { - { 0x1001, 0x1001, &gOamData_83AC9D8, sPikaAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1002, 0x1001, &gOamData_83AC9F8, sPikaAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1003, 0x1001, &gOamData_83AC9E8, sPikaAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy } + { 0x1001, 0x1001, &gOamData_AffineOff_ObjNormal_32x32, sPikaAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, + { 0x1002, 0x1001, &gOamData_AffineOff_ObjNormal_32x16, sPikaAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, + { 0x1003, 0x1001, &gOamData_AffineOff_ObjNormal_16x8, sPikaAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy } }; static const u8 *const sHelpDocsPtrs[] = { diff --git a/src/poison.c b/src/poison.c index 7a0788c29..af7f8ee86 100644 --- a/src/poison.c +++ b/src/poison.c @@ -30,7 +30,7 @@ const struct SpriteTemplate gUnknown_83E69AC = { .tileTag = ANIM_TAG_TOXIC_BUBBLE, .paletteTag = ANIM_TAG_TOXIC_BUBBLE, - .oam = &gOamData_83ACA18, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_83E69A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -98,7 +98,7 @@ const struct SpriteTemplate gUnknown_83E6A20 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gOamData_83ACA90, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_83E69DC, .images = NULL, .affineAnims = gUnknown_83E6A18, @@ -109,7 +109,7 @@ const struct SpriteTemplate gUnknown_83E6A38 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gOamData_83ACA90, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_83E69DC, .images = NULL, .affineAnims = gUnknown_83E6A18, @@ -120,7 +120,7 @@ const struct SpriteTemplate gUnknown_83E6A50 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gUnknown_83E69E4, .images = NULL, .affineAnims = gUnknown_83E6A1C, @@ -143,7 +143,7 @@ const struct SpriteTemplate gUnknown_83E6A84 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gOamData_83ACA90, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_83E69E0, .images = NULL, .affineAnims = gUnknown_83E6A80, @@ -166,7 +166,7 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gUnknown_83E69DC, .images = NULL, .affineAnims = gUnknown_83E6AB4, @@ -177,7 +177,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gOamData_83ACB50, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gUnknown_83E5A78, .images = NULL, .affineAnims = gUnknown_83E6AB4, diff --git a/src/psychic.c b/src/psychic.c index bbb6c3ed5..722ea014f 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -43,7 +43,7 @@ const struct SpriteTemplate gUnknown_83E6DF8 = { .tileTag = ANIM_TAG_SPIRAL, .paletteTag = ANIM_TAG_SPIRAL, - .oam = &gOamData_83ACB60, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6DF4, @@ -54,7 +54,7 @@ const struct SpriteTemplate gUnknown_83E6E10 = { .tileTag = ANIM_TAG_GREEN_LIGHT_WALL, .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -65,7 +65,7 @@ const struct SpriteTemplate gUnknown_83E6E28 = { .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -76,7 +76,7 @@ const struct SpriteTemplate gUnknown_83E6E40 = { .tileTag = ANIM_TAG_RED_LIGHT_WALL, .paletteTag = ANIM_TAG_RED_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -87,7 +87,7 @@ const struct SpriteTemplate gUnknown_83E6E58 = { .tileTag = ANIM_TAG_GRAY_LIGHT_WALL, .paletteTag = ANIM_TAG_GRAY_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -98,7 +98,7 @@ const struct SpriteTemplate gUnknown_83E6E70 = { .tileTag = ANIM_TAG_ORANGE_LIGHT_WALL, .paletteTag = ANIM_TAG_ORANGE_LIGHT_WALL, - .oam = &gOamData_83ACB00, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -124,7 +124,7 @@ const struct SpriteTemplate gUnknown_83E6EA4 = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E6EA0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -149,7 +149,7 @@ const struct SpriteTemplate gUnknown_83E6ED4 = { .tileTag = ANIM_TAG_SPARKLE_3, .paletteTag = ANIM_TAG_SPARKLE_3, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_83E6ED0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -160,7 +160,7 @@ const struct SpriteTemplate gUnknown_83E6EEC = { .tileTag = ANIM_TAG_GOLD_RING, .paletteTag = ANIM_TAG_GOLD_RING, - .oam = &gOamData_83ACA18, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -217,7 +217,7 @@ const struct SpriteTemplate gUnknown_83E6F8C = { .tileTag = ANIM_TAG_BENT_SPOON, .paletteTag = ANIM_TAG_BENT_SPOON, - .oam = &gOamData_83ACA18, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_83E6F84, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -259,7 +259,7 @@ const struct SpriteTemplate gUnknown_83E6FF4 = { .tileTag = ANIM_TAG_AMNESIA, .paletteTag = ANIM_TAG_AMNESIA, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E6FC4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -285,7 +285,7 @@ static const struct SpriteTemplate gUnknown_83E7044 = { .tileTag = ANIM_TAG_HOLLOW_ORB, .paletteTag = ANIM_TAG_HOLLOW_ORB, - .oam = &gOamData_83ACAF0, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -296,7 +296,7 @@ const struct SpriteTemplate gUnknown_83E705C = { .tileTag = 0x280A, .paletteTag = 0x280A, - .oam = &gOamData_83AC9E0, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -349,7 +349,7 @@ static const struct SpriteTemplate gUnknown_83E7114 = { .tileTag = ANIM_TAG_BLUEGREEN_ORB, .paletteTag = ANIM_TAG_BLUEGREEN_ORB, - .oam = &gOamData_83ACA30, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7104, @@ -372,7 +372,7 @@ const struct SpriteTemplate gUnknown_83E7148 = { .tileTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACBC0, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7144, @@ -410,7 +410,7 @@ const struct SpriteTemplate gUnknown_83E71D0 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_83ACBC0, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E71C8, diff --git a/src/rock.c b/src/rock.c index c4b668941..b0809fade 100644 --- a/src/rock.c +++ b/src/rock.c @@ -55,7 +55,7 @@ const struct SpriteTemplate gUnknown_83E73B4 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E73A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -66,7 +66,7 @@ const struct SpriteTemplate gUnknown_83E73CC = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E73A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -77,7 +77,7 @@ const struct SpriteTemplate gUnknown_83E73E4 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -101,7 +101,7 @@ const struct SpriteTemplate gUnknown_83E7420 = { .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, - .oam = &gOamData_83ACB50, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gUnknown_83E5958, .images = NULL, .affineAnims = gUnknown_83E741C, @@ -112,7 +112,7 @@ const struct SpriteTemplate gUnknown_83E7438 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -123,7 +123,7 @@ const struct SpriteTemplate gUnknown_83E7450 = { .tileTag = ANIM_TAG_FLYING_DIRT, .paletteTag = ANIM_TAG_FLYING_DIRT, - .oam = &gOamData_83AC9F8, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -213,7 +213,7 @@ const struct SpriteTemplate gUnknown_83E74C0 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E74A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -224,7 +224,7 @@ const struct SpriteTemplate gUnknown_83E74D8 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gOamData_83AC9C8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -235,7 +235,7 @@ const struct SpriteTemplate gUnknown_83E74F0 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -246,7 +246,7 @@ const struct SpriteTemplate gUnknown_83E7508 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E74A8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -275,7 +275,7 @@ const struct SpriteTemplate gUnknown_83E7548 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E74A8, .images = NULL, .affineAnims = gUnknown_83E7540, @@ -286,7 +286,7 @@ const struct SpriteTemplate gUnknown_83E7560 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E74A8, .images = NULL, .affineAnims = gUnknown_83E7540, @@ -297,7 +297,7 @@ const struct SpriteTemplate gUnknown_83E7578 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83AC9D8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_83E74B8, .images = NULL, .affineAnims = gUnknown_83E7540, @@ -308,7 +308,7 @@ const struct SpriteTemplate gUnknown_83E7590 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gOamData_83ACA38, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_83E74B0, .images = NULL, .affineAnims = gUnknown_83E7540, diff --git a/src/text.c b/src/text.c index b61713ee2..93a35a07d 100644 --- a/src/text.c +++ b/src/text.c @@ -15,7 +15,7 @@ #include "constants/songs.h" extern u8 gGlyphInfo[0x90]; -extern const struct OamData gOamData_83AC9D0; +extern const struct OamData gOamData_AffineOff_ObjNormal_16x16; static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese); static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese); @@ -59,7 +59,7 @@ const struct SpriteTemplate gUnknown_81EA6B4 = { .tileTag = 0x8000, .paletteTag = 0x8000, - .oam = &gOamData_83AC9D0, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, |