summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgolem galvanize <golemgalvanize@github.com>2018-12-17 02:40:30 -0500
committergolem galvanize <golemgalvanize@github.com>2018-12-17 02:40:30 -0500
commit076d07f6fe24691d6d9d8872c049b18e2e16fa57 (patch)
treefe67ff21237b8e988484e2a53eecaa50f01844ab /src
parent71a7a8a0759373a8dafcccee82fa2d37cb285b85 (diff)
parentd1e6e705ccf05f93933ae4494b1d388550d81d26 (diff)
Merge branch 'master' of https://github.com/pret/pokeemerald into decompile_party_menu
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c2
-rw-r--r--src/battle_anim_80A5C6C.c9
-rw-r--r--src/battle_anim_80D51AC.c8
-rwxr-xr-xsrc/battle_anim_8170478.c2267
-rw-r--r--src/battle_anim_effects_1.c5520
-rw-r--r--src/battle_intro.c7
-rw-r--r--src/battle_tower.c2
-rw-r--r--src/birch_pc.c14
-rw-r--r--src/contest_painting.c711
-rw-r--r--src/credits.c12
-rw-r--r--src/effects_1.c2093
-rw-r--r--src/event_data.c3
-rw-r--r--src/fire.c2
-rw-r--r--src/item.c2
-rwxr-xr-xsrc/item_menu.c172
-rw-r--r--src/item_menu_icons.c32
-rwxr-xr-xsrc/item_use.c13
-rw-r--r--src/mauville_old_man.c16
-rw-r--r--src/pokeball.c12
-rw-r--r--src/pokedex.c164
-rw-r--r--src/pokemon.c36
-rw-r--r--src/record_mixing.c4
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c6
-rw-r--r--src/tv.c4
24 files changed, 8740 insertions, 2371 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 95c6f7b3c..5e62c0957 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -26,8 +26,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern const u16 gMovesWithQuietBGM[];
extern const u8 *const gBattleAnims_Moves[];
-extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
-extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
// this file's functions
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index 8ba1a8222..9adbdd779 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -35,7 +35,6 @@ extern const union AffineAnimCmd *gUnknown_082FF6C0[];
// This file's functions.
void sub_80A64EC(struct Sprite *sprite);
-void sub_80A653C(struct Sprite *sprite);
void sub_80A6FB4(struct Sprite *sprite);
void sub_80A7144(struct Sprite *sprite);
void sub_80A791C(struct Sprite *sprite);
@@ -539,7 +538,7 @@ void WaitAnimForDuration(struct Sprite *sprite)
void sub_80A64D0(struct Sprite *sprite)
{
sub_80A64EC(sprite);
- sprite->callback = sub_80A653C;
+ sprite->callback = TranslateSpriteOverDuration;
sprite->callback(sprite);
}
@@ -557,7 +556,7 @@ void sub_80A64EC(struct Sprite *sprite)
sprite->data[1] = old;
}
-void sub_80A653C(struct Sprite *sprite)
+void TranslateSpriteOverDuration(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -613,7 +612,7 @@ void sub_80A65EC(struct Sprite *sprite)
sprite->callback = sub_80A64D0;
}
-void sub_80A6630(struct Sprite *sprite)
+void TranslateMonBGUntil(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -627,7 +626,7 @@ void sub_80A6630(struct Sprite *sprite)
}
}
-// Same as sub_80A6630, but it operates on sub-pixel values
+// Same as TranslateMonBGUntil, but it operates on sub-pixel values
// to handle slower translations.
void sub_80A6680(struct Sprite *sprite)
{
diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c
index bfd0635f6..51be7bbe9 100644
--- a/src/battle_anim_80D51AC.c
+++ b/src/battle_anim_80D51AC.c
@@ -441,14 +441,14 @@ static void DoHorizontalLunge(struct Sprite *sprite)
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
}
static void ReverseHorizontalLungeDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -468,14 +468,14 @@ static void DoVerticalDip(struct Sprite *sprite)
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
}
static void ReverseVerticalDipDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c
new file mode 100755
index 000000000..94f2c95b5
--- /dev/null
+++ b/src/battle_anim_8170478.c
@@ -0,0 +1,2267 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "decompress.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "m4a.h"
+#include "main.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+
+// iwram
+int gUnknown_030062DC;
+u16 gUnknown_030062E0;
+u16 gUnknown_030062E4;
+
+static void sub_8170660(u8);
+static void sub_8170A38(u8);
+static void sub_8170EF0(u8);
+static void sub_8171104(struct Sprite *);
+static void sub_8171030(u8);
+static void sub_81710A8(u8);
+static void sub_8171134(struct Sprite *);
+static void sub_8171CAC(struct Sprite *);
+static void sub_81711E8(struct Sprite *);
+static void sub_8171240(struct Sprite *);
+static void sub_817138C(struct Sprite *);
+static void sub_81713D0(struct Sprite *);
+static void sub_81717B4(struct Sprite *);
+static void sub_81714D4(struct Sprite *);
+static void sub_8171520(struct Sprite *);
+static void sub_81717D8(struct Sprite *);
+static void sub_8171AE4(struct Sprite *);
+static void sub_81717F8(struct Sprite *);
+static void sub_81719EC(struct Sprite *);
+static void sub_81718D8(struct Sprite *);
+static void sub_81719C0(struct Sprite *);
+static void sub_8171D60(u8);
+static void sub_8171AAC(struct Sprite *);
+static void sub_8171BAC(struct Sprite *);
+static void sub_8171CE8(struct Sprite *);
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *);
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *);
+static void DestroyBallOpenAnimationParticle(struct Sprite *);
+static void FanOutBallOpenParticles_Step1(struct Sprite *);
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *);
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *);
+static void sub_8172AB0(u8);
+static void sub_8172B40(u8);
+static void sub_8172B90(u8);
+static void sub_8172FEC(u8);
+static void sub_81731FC(struct Sprite *);
+static void sub_8173250(struct Sprite *);
+static void sub_81731B0(u8);
+static void sub_817339C(struct Sprite *);
+static void sub_81733D4(struct Sprite *);
+static void sub_8173400(struct Sprite *);
+static void PokeBallOpenParticleAnimation(u8);
+static void GreatBallOpenParticleAnimation(u8);
+static void SafariBallOpenParticleAnimation(u8);
+static void UltraBallOpenParticleAnimation(u8);
+static void MasterBallOpenParticleAnimation(u8);
+static void DiveBallOpenParticleAnimation(u8);
+static void RepeatBallOpenParticleAnimation(u8);
+static void TimerBallOpenParticleAnimation(u8);
+static void PremierBallOpenParticleAnimation(u8);
+static void sub_817330C(struct Sprite *);
+
+struct BallCaptureSuccessStarData
+{
+ s8 xOffset;
+ s8 yOffset;
+ s8 unk2;
+};
+
+static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
+{
+ {
+ .xOffset = 10,
+ .yOffset = 2,
+ .unk2 = -3,
+ },
+ {
+ .xOffset = 15,
+ .yOffset = 0,
+ .unk2 = -4,
+ },
+ {
+ .xOffset = -10,
+ .yOffset = 2,
+ .unk2 = -4,
+ },
+};
+
+const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] =
+{
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7},
+};
+
+const struct CompressedSpritePalette gBallOpenParticlePalettes[] =
+{
+ {gBattleAnimSpritePalette_136, 0xD6EC},
+ {gBattleAnimSpritePalette_136, 0xD6ED},
+ {gBattleAnimSpritePalette_136, 0xD6EE},
+ {gBattleAnimSpritePalette_136, 0xD6EF},
+ {gBattleAnimSpritePalette_136, 0xD6F0},
+ {gBattleAnimSpritePalette_136, 0xD6F1},
+ {gBattleAnimSpritePalette_136, 0xD6F2},
+ {gBattleAnimSpritePalette_136, 0xD6F3},
+ {gBattleAnimSpritePalette_136, 0xD6F4},
+ {gBattleAnimSpritePalette_136, 0xD6F5},
+ {gBattleAnimSpritePalette_136, 0xD6F6},
+ {gBattleAnimSpritePalette_136, 0xD6F7},
+};
+
+const union AnimCmd gUnknown_085E5154[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085E5170[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5178[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5180[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5188[] =
+{
+ ANIMCMD_FRAME(6, 4),
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085E5194[] =
+{
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085E519C[] =
+{
+ gUnknown_085E5154,
+ gUnknown_085E5170,
+ gUnknown_085E5178,
+ gUnknown_085E5180,
+ gUnknown_085E5188,
+ gUnknown_085E5194,
+};
+
+const u8 gBallOpenParticleAnimNums[] =
+{
+ 0,
+ 0,
+ 0,
+ 5,
+ 1,
+ 2,
+ 2,
+ 3,
+ 5,
+ 5,
+ 4,
+ 4,
+};
+
+const TaskFunc gBallOpenParticleAnimationFuncs[] =
+{
+ PokeBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ MasterBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ DiveBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ RepeatBallOpenParticleAnimation,
+ TimerBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ PremierBallOpenParticleAnimation,
+};
+
+const struct SpriteTemplate gUnknown_085E51F0[] =
+{
+ {
+ .tileTag = 55020,
+ .paletteTag = 55020,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55021,
+ .paletteTag = 55021,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55022,
+ .paletteTag = 55022,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55023,
+ .paletteTag = 55023,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55024,
+ .paletteTag = 55024,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55025,
+ .paletteTag = 55025,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55026,
+ .paletteTag = 55026,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55027,
+ .paletteTag = 55027,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55028,
+ .paletteTag = 55028,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55029,
+ .paletteTag = 55029,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55030,
+ .paletteTag = 55030,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55031,
+ .paletteTag = 55031,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+};
+
+const u16 gUnknown_085E5310[] =
+{
+ RGB(31, 22, 30),
+ RGB(16, 23, 30),
+ RGB(23, 30, 20),
+ RGB(31, 31, 15),
+ RGB(23, 20, 28),
+ RGB(21, 31, 25),
+ RGB(12, 25, 30),
+ RGB(30, 27, 10),
+ RGB(31, 24, 16),
+ RGB(29, 30, 30),
+ RGB(31, 17, 10),
+ RGB(31, 9, 10),
+ RGB(0, 0, 0),
+ RGB(1, 16, 0),
+ RGB(3, 0, 1),
+ RGB(1, 8, 0),
+ RGB(0, 8, 0),
+ RGB(3, 8, 1),
+ RGB(6, 8, 1),
+ RGB(4, 0, 0),
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85E5338 =
+{
+ .tileTag = ANIM_TAG_UNUSED_RED_BRICK,
+ .paletteTag = ANIM_TAG_UNUSED_RED_BRICK,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_817330C,
+};
+
+const union AnimCmd gUnknown_085E5350[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085E5358[] = {
+ gUnknown_085E5350,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085E5358,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_817330C,
+};
+
+extern const struct SpriteTemplate gUnknown_085CE388;
+extern const struct SpriteTemplate gUnknown_085CE3A0;
+
+void unref_sub_8170478(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+ u8 healthBoxSpriteId;
+ u8 battler;
+ u8 spriteId1, spriteId2, spriteId3, spriteId4;
+
+ battler = gBattleAnimAttacker;
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 1);
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+ spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ spriteId4 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ gSprites[healthBoxSpriteId].oam.priority = 1;
+ gSprites[spriteId1].oam.priority = 1;
+ gSprites[spriteId2].oam.priority = 1;
+ gSprites[spriteId3] = gSprites[healthBoxSpriteId];
+ gSprites[spriteId4] = gSprites[spriteId1];
+ gSprites[spriteId3].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[spriteId3].callback = SpriteCallbackDummy;
+ gSprites[spriteId4].callback = SpriteCallbackDummy;
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D48(unknownStruct.bgId, gUnknown_08C2EA9C);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08C2EA50, unknownStruct.tilesOffset);
+ LoadCompressedPalette(gUnknown_08C2DDA4, unknownStruct.unk8 << 4, 32);
+
+ gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32;
+ gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32;
+ gTasks[taskId].data[1] = 640;
+ gTasks[taskId].data[0] = spriteId3;
+ gTasks[taskId].data[2] = spriteId4;
+ gTasks[taskId].func = sub_8170660;
+}
+
+static void sub_8170660(u8 taskId)
+{
+ u8 spriteId1, spriteId2;
+ u8 battler;
+
+ battler = gBattleAnimAttacker;
+ gTasks[taskId].data[13] += gTasks[taskId].data[1];
+ gBattle_BG1_Y += (u16)gTasks[taskId].data[13] >> 8;
+ gTasks[taskId].data[13] &= 0xFF;
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ if (gTasks[taskId].data[11]++ > 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[12]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
+ if (gTasks[taskId].data[12] == 8)
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[10] == 30)
+ gTasks[taskId].data[15]++;
+ break;
+ case 2:
+ if (gTasks[taskId].data[11]++ > 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[12]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
+ if (gTasks[taskId].data[12] == 0)
+ {
+ sub_80A477C(0);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ DestroySprite(&gSprites[gTasks[taskId].data[0]]);
+ DestroySprite(&gSprites[gTasks[taskId].data[2]]);
+ SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0);
+ spriteId1 = gSprites[gHealthboxSpriteIds[battler]].oam.affineParam;
+ spriteId2 = gSprites[gHealthboxSpriteIds[battler]].data[5];
+ gSprites[gHealthboxSpriteIds[battler]].oam.priority = 1;
+ gSprites[spriteId1].oam.priority = 1;
+ gSprites[spriteId2].oam.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+static void sub_8170834(u8 *paletteId1, u8 *paletteId2, u8 battler)
+{
+ u8 healthBoxSpriteId;
+ u8 spriteId1, spriteId2;
+ u16 offset1, offset2;
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+ *paletteId1 = AllocSpritePalette(0xD709);
+ *paletteId2 = AllocSpritePalette(0xD70A);
+
+ offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100;
+ offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100;
+ LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20);
+ LoadPalette(&gPlttBufferUnfaded[offset2], *paletteId2 * 16 + 0x100, 0x20);
+
+ gSprites[healthBoxSpriteId].oam.paletteNum = *paletteId1;
+ gSprites[spriteId1].oam.paletteNum = *paletteId1;
+ gSprites[spriteId2].oam.paletteNum = *paletteId2;
+}
+
+void sub_8170920(u8 taskId)
+{
+ u8 paletteId1, paletteId2;
+ sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_817094C(u8 battler)
+{
+ u8 healthBoxSpriteId;
+ u8 spriteId1, spriteId2;
+ u8 paletteId1, paletteId2;
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+
+ FreeSpritePaletteByTag(0xD709);
+ FreeSpritePaletteByTag(0xD70A);
+ paletteId1 = IndexOfSpritePaletteTag(0xD6FF);
+ paletteId2 = IndexOfSpritePaletteTag(0xD704);
+ gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1;
+ gSprites[spriteId1].oam.paletteNum = paletteId1;
+ gSprites[spriteId2].oam.paletteNum = paletteId2;
+}
+
+void sub_81709EC(u8 taskId)
+{
+ sub_817094C(gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170A0C(u8 taskId)
+{
+ gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ gTasks[taskId].data[11] = gBattleAnimArgs[1];
+ gTasks[taskId].func = sub_8170A38;
+}
+
+static void sub_8170A38(u8 taskId)
+{
+ u8 paletteNum;
+ int paletteOffset, colorOffset;
+
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11])
+ {
+ gTasks[taskId].data[0] = 0;
+ paletteNum = IndexOfSpritePaletteTag(0xD709);
+ colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2;
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ gTasks[taskId].data[2] += 2;
+ if (gTasks[taskId].data[2] > 16)
+ gTasks[taskId].data[2] = 16;
+
+ paletteOffset = paletteNum * 16 + 0x100;
+ BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31));
+ if (gTasks[taskId].data[2] == 16)
+ gTasks[taskId].data[1]++;
+ break;
+ case 1:
+ gTasks[taskId].data[2] -= 2;
+ if (gTasks[taskId].data[2] < 0)
+ gTasks[taskId].data[2] = 0;
+
+ paletteOffset = paletteNum * 16 + 0x100;
+ BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31));
+ if (gTasks[taskId].data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+ }
+}
+
+void sub_8170B04(u8 taskId)
+{
+ u8 spriteId;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ sub_80A7270(spriteId, 0);
+ gTasks[taskId].data[10] = 0x100;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 0x30;
+ obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ sub_80A7E6C(spriteId);
+ if (gTasks[taskId].data[10] >= 0x2D0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ sub_80A7344(spriteId);
+ gSprites[spriteId].invisible = 1;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8170BB0(u8 taskId)
+{
+ u8 spriteId;
+ u16 ball;
+ u8 ballId;
+ u8 x, y;
+ u8 priority, subpriority;
+ u32 selectedPalettes;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL);
+ else
+ ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL);
+
+ ballId = ItemIdToBallId(ball);
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ priority = gSprites[spriteId].oam.priority;
+ subpriority = gSprites[spriteId].subpriority;
+ gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
+ selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0);
+ gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (!gTasks[gTasks[taskId].data[10]].isActive && !gTasks[gTasks[taskId].data[11]].isActive)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8170CFC(u8 taskId)
+{
+ u8 ballId = ItemIdToBallId(gLastUsedItem);
+ LoadBallGfx(ballId);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170D24(u8 taskId)
+{
+ u8 ballId = ItemIdToBallId(gLastUsedItem);
+ FreeBallGfx(ballId);
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_IsBallBlockedByTrainer(u8 taskId)
+{
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
+ gBattleAnimArgs[7] = -1;
+ else
+ gBattleAnimArgs[7] = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+u8 ItemIdToBallId(u16 ballItem)
+{
+ switch (ballItem)
+ {
+ case ITEM_MASTER_BALL:
+ return 4;
+ case ITEM_ULTRA_BALL:
+ return 3;
+ case ITEM_GREAT_BALL:
+ return 1;
+ case ITEM_SAFARI_BALL:
+ return 2;
+ case ITEM_NET_BALL:
+ return 5;
+ case ITEM_DIVE_BALL:
+ return 6;
+ case ITEM_NEST_BALL:
+ return 7;
+ case ITEM_REPEAT_BALL:
+ return 8;
+ case ITEM_TIMER_BALL:
+ return 9;
+ case ITEM_LUXURY_BALL:
+ return 10;
+ case ITEM_PREMIER_BALL:
+ return 11;
+ case ITEM_POKE_BALL:
+ default:
+ return 0;
+ }
+}
+
+void sub_8170E04(u8 taskId)
+{
+ u8 ballId;
+ u8 spriteId;
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ spriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
+ gSprites[spriteId].data[0] = 34;
+ gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
+ gSprites[spriteId].callback = sub_8171104;
+ gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_8170EF0;
+}
+
+static void sub_8170EF0(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[0];
+ if ((u16)gSprites[spriteId].data[0] == 0xFFFF)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170F2C(u8 taskId)
+{
+ int x, y;
+ u8 ballId;
+ u8 subpriority;
+ u8 spriteId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
+ {
+ x = 32;
+ y = 11;
+ }
+ else
+ {
+ x = 23;
+ y = 5;
+ }
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ subpriority = sub_80A82E4(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1;
+ spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority);
+ gSprites[spriteId].data[0] = 34;
+ gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8039E84;
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_8171030;
+}
+
+static void sub_8171030(u8 taskId)
+{
+ if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
+ {
+ PlaySE12WithPanning(SE_NAGERU, 0);
+ gSprites[gTasks[taskId].data[0]].callback = sub_8171104;
+ CreateTask(sub_81710A8, 10);
+ gTasks[taskId].func = sub_8170EF0;
+ }
+}
+
+static void sub_81710A8(u8 taskId)
+{
+ if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
+ {
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8171104(struct Sprite *sprite)
+{
+ u16 temp = sprite->data[1];
+ u16 temp2 = sprite->data[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = temp;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = temp2;
+ sprite->data[5] = -40;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_8171134;
+}
+
+static void sub_8171134(struct Sprite *sprite)
+{
+ int i;
+ u8 ballId;
+ int ballId2; // extra var needed to match
+
+ if (TranslateAnimArc(sprite))
+ {
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
+ {
+ sprite->callback = sub_8171CAC;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = 0;
+
+ sprite->data[5] = 0;
+ sprite->callback = sub_81711E8;
+ ballId = ItemIdToBallId(gLastUsedItem);
+ ballId2 = ballId;
+ if (ballId2 > 11)
+ return;
+ if (ballId2 < 0)
+ return;
+
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
+ LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId);
+ }
+ }
+}
+
+static void sub_81711E8(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 10)
+ {
+ sprite->data[5] = CreateTask(TaskDummy, 50);
+ sprite->callback = sub_8171240;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0;
+ }
+}
+
+static void sub_8171240(struct Sprite *sprite)
+{
+ u8 spriteId;
+ u8 taskId;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimTarget];
+ taskId = sprite->data[5];
+
+ if (++gTasks[taskId].data[1] == 11)
+ PlaySE(SE_SUIKOMU);
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ sub_80A7270(spriteId, 0);
+ gTasks[taskId].data[10] = 256;
+ gUnknown_030062DC = 28;
+ gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
+ gUnknown_030062E0 = (u32)(gUnknown_030062E4 * 256) / 28;
+ gTasks[taskId].data[2] = gUnknown_030062E0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 0x20;
+ obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ gTasks[taskId].data[3] += gTasks[taskId].data[2];
+ gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8;
+ if (gTasks[taskId].data[10] >= 0x480)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ sub_80A7344(spriteId);
+ gSprites[spriteId].invisible = 1;
+ gTasks[taskId].data[0]++;
+ break;
+ default:
+ if (gTasks[taskId].data[1] > 10)
+ {
+ DestroyTask(taskId);
+ StartSpriteAnim(sprite, 2);
+ sprite->data[5] = 0;
+ sprite->callback = sub_817138C;
+ }
+ break;
+ }
+}
+
+static void sub_817138C(struct Sprite *sprite)
+{
+ int angle;
+
+ if (sprite->animEnded)
+ {
+ sprite->data[3] = 0;
+ sprite->data[4] = 40;
+ sprite->data[5] = 0;
+ angle = 0;
+ sprite->pos1.y += Cos(angle, 40);
+ sprite->pos2.y = -Cos(angle, sprite->data[4]);
+ sprite->callback = sub_81713D0;
+ }
+}
+
+static void sub_81713D0(struct Sprite *sprite)
+{
+ bool8 lastBounce;
+ int bounceCount;
+
+ lastBounce = 0;
+
+ switch (sprite->data[3] & 0xFF)
+ {
+ case 0:
+ sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
+ sprite->data[5] += (sprite->data[3] >> 8) + 4;
+ if (sprite->data[5] >= 64)
+ {
+ sprite->data[4] -= 10;
+ sprite->data[3] += 257;
+
+ bounceCount = sprite->data[3] >> 8;
+ if (bounceCount == 4)
+ lastBounce = 1;
+
+ // Play a different sound effect for each pokeball bounce.
+ switch (bounceCount)
+ {
+ case 1:
+ PlaySE(SE_KON);
+ break;
+ case 2:
+ PlaySE(SE_KON2);
+ break;
+ case 3:
+ PlaySE(SE_KON3);
+ break;
+ default:
+ PlaySE(SE_KON4);
+ break;
+ }
+ }
+ break;
+ case 1:
+ sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
+ sprite->data[5] -= (sprite->data[3] >> 8) + 4;
+ if (sprite->data[5] <= 0)
+ {
+ sprite->data[5] = 0;
+ sprite->data[3] &= -0x100;
+ }
+ break;
+ }
+
+ if (lastBounce)
+ {
+ sprite->data[3] = 0;
+ sprite->pos1.y += Cos(64, 40);
+ sprite->pos2.y = 0;
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES)
+ {
+ sprite->data[5] = 0;
+ sprite->callback = sub_81717B4;
+ }
+ else
+ {
+ sprite->callback = sub_81714D4;
+ sprite->data[4] = 1;
+ sprite->data[5] = 0;
+ }
+ }
+}
+
+static void sub_81714D4(struct Sprite *sprite)
+{
+ if (++sprite->data[3] == 31)
+ {
+ sprite->data[3] = 0;
+ sprite->affineAnimPaused = 1;
+ StartSpriteAffineAnim(sprite, 1);
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->callback = sub_8171520;
+ PlaySE(SE_BOWA);
+ }
+}
+
+static void sub_8171520(struct Sprite *sprite)
+{
+ s8 state;
+ u16 var0;
+
+ switch (sprite->data[3] & 0xFF)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 7;
+ if (var0 > 14)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ }
+ break;
+ case 1:
+ if (++sprite->data[5] == 1)
+ {
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 0;
+ if (sprite->data[4] < 0)
+ ChangeSpriteAffineAnim(sprite, 2);
+ else
+ ChangeSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->affineAnimPaused = 1;
+ }
+ break;
+ case 2:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 12;
+ if (var0 > 24)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ }
+ break;
+ case 3:
+ if (sprite->data[5]++ < 0)
+ {
+ sprite->affineAnimPaused = 1;
+ break;
+ }
+
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 0;
+ if (sprite->data[4] < 0)
+ ChangeSpriteAffineAnim(sprite, 2);
+ else
+ ChangeSpriteAffineAnim(sprite, 1);
+ // fall through
+ case 4:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 4;
+ if (var0 > 8)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ }
+ break;
+ case 5:
+ sprite->data[3] += 0x100;
+ state = sprite->data[3] >> 8;
+ if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ {
+ sprite->affineAnimPaused = 1;
+ sprite->callback = sub_81717B4;
+ }
+ else
+ {
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3)
+ {
+ sprite->callback = sub_81717D8;
+ sprite->affineAnimPaused = 1;
+ }
+ else
+ {
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 1;
+ }
+ }
+ break;
+ case 6:
+ default:
+ if (++sprite->data[5] == 31)
+ {
+ sprite->data[5] = 0;
+ sprite->data[3] &= -0x100;
+ StartSpriteAffineAnim(sprite, 3);
+ if (sprite->data[4] < 0)
+ StartSpriteAffineAnim(sprite, 2);
+ else
+ StartSpriteAffineAnim(sprite, 1);
+
+ PlaySE(SE_BOWA);
+ }
+ break;
+ }
+}
+
+static void sub_81717B4(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 31)
+ {
+ sprite->data[5] = 0;
+ sprite->callback = sub_8171AE4;
+ }
+}
+
+static void sub_81717D8(struct Sprite *sprite)
+{
+ sprite->animPaused = 1;
+ sprite->callback = sub_81717F8;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[5] = 0;
+}
+
+static void sub_81717F8(struct Sprite *sprite)
+{
+ u8 *battler = &gBattleAnimTarget;
+
+ sprite->data[4]++;
+ if (sprite->data[4] == 40)
+ {
+ PlaySE(SE_RG_GETTING);
+ BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
+ sub_81719EC(sprite);
+ }
+ else if (sprite->data[4] == 60)
+ {
+ BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
+ }
+ else if (sprite->data[4] == 95)
+ {
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ m4aMPlayAllStop();
+ PlaySE(MUS_RG_FAN6);
+ }
+ else if (sprite->data[4] == 315)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]);
+ sprite->data[0] = 0;
+ sprite->callback = sub_81718D8;
+ }
+}
+
+static void sub_81718D8(struct Sprite *sprite)
+{
+ u8 paletteIndex;
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+ paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag);
+ BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31));
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->data[1]++ > 0)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2]));
+ if (sprite->data[2] == 16)
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->invisible = 1;
+ sprite->data[0]++;
+ break;
+ default:
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ }
+ break;
+ }
+}
+
+static void sub_81719C0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[0] = -1;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_81719EC(struct Sprite *sprite)
+{
+ u32 i;
+ u8 subpriority;
+
+ if (sprite->subpriority)
+ {
+ subpriority = sprite->subpriority - 1;
+ }
+ else
+ {
+ subpriority = 0;
+ sprite->subpriority = 1;
+ }
+
+ sub_8171D60(4);
+ for (i = 0; i < 3; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 24;
+ gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset;
+ gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset;
+ gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2;
+ InitAnimArcTranslation(&gSprites[spriteId]);
+ gSprites[spriteId].callback = sub_8171AAC;
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]);
+ }
+ }
+}
+
+static void sub_8171AAC(struct Sprite *sprite)
+{
+ sprite->invisible = !sprite->invisible;
+ if (TranslateAnimArc(sprite))
+ DestroySprite(sprite);
+}
+
+// fakematching. I think the return type of ItemIdToBallId()
+// is wrong because of the weird required casting.
+static void sub_8171AE4(struct Sprite *sprite)
+{
+ u8 ballId;
+ int ballId2; // extra var needed to match
+
+ StartSpriteAnim(sprite, 1);
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->callback = sub_8171BAC;
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ ballId2 = ballId;
+ if (ballId2 > 11)
+ goto LABEL;
+ if (ballId2 < 0)
+ goto LABEL;
+
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
+ LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId);
+
+ LABEL:
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = 0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
+ AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
+}
+
+static void sub_8171BAC(struct Sprite *sprite)
+{
+ int next = FALSE;
+
+ if (sprite->animEnded)
+ sprite->invisible = 1;
+
+ if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
+ {
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
+ next = TRUE;
+ }
+ else
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8;
+ }
+
+ if (sprite->animEnded && next)
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2;
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ }
+}
+
+static void sub_8171CAC(struct Sprite *sprite)
+{
+ int i;
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ for (i = 0; i < 6; i++)
+ sprite->data[i] = 0;
+
+ sprite->callback = sub_8171CE8;
+}
+
+static void sub_8171CE8(struct Sprite *sprite)
+{
+ s16 var0 = sprite->data[0] + 0x800;
+ s16 var1 = sprite->data[1] + 0x680;
+ sprite->pos2.x -= var1 >> 8;
+ sprite->pos2.y += var0 >> 8;
+ sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF;
+ sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF;
+
+ if (sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.x + sprite->pos2.x < -8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ }
+}
+
+static void sub_8171D60(u8 ballId)
+{
+ u8 taskId;
+
+ if (GetSpriteTileStartByTag(gBallOpenParticleSpritesheets[ballId].tag) == 0xFFFF)
+ {
+ LoadCompressedObjectPicUsingHeap(&gBallOpenParticleSpritesheets[ballId]);
+ LoadCompressedObjectPaletteUsingHeap(&gBallOpenParticlePalettes[ballId]);
+ }
+}
+
+u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
+{
+ u8 taskId;
+
+ sub_8171D60(ballId);
+ taskId = CreateTask(gBallOpenParticleAnimationFuncs[ballId], 5);
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ gTasks[taskId].data[3] = priority;
+ gTasks[taskId].data[4] = subpriority;
+ gTasks[taskId].data[15] = ballId;
+ PlaySE(SE_BOWA2);
+
+ return taskId;
+}
+
+void sub_8171E20(void)
+{
+ if (gMain.inBattle)
+ gBattleSpritesDataPtr->animationData->field_A++;
+}
+
+static void PokeBallOpenParticleAnimation(u8 taskId)
+{
+ u8 spriteId;
+ u8 x, y;
+ u8 priority, subpriority;
+ u8 ballId;
+ u8 var0;
+
+ ballId = gTasks[taskId].data[15];
+ if (gTasks[taskId].data[0] < 16)
+ {
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+
+ var0 = (u8)gTasks[taskId].data[0];
+ if (var0 >= 8)
+ var0 -= 8;
+
+ gSprites[spriteId].data[0] = var0 * 32;
+ }
+
+ if (gTasks[taskId].data[0] == 15)
+ {
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+ return;
+ }
+ }
+
+ gTasks[taskId].data[0]++;
+}
+
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ if (sprite->data[1] == 0)
+ sprite->callback = PokeBallOpenParticleAnimation_Step2;
+ else
+ sprite->data[1]--;
+}
+
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]);
+ sprite->data[1] += 2;
+ if (sprite->data[1] == 50)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void TimerBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 10;
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void DiveBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 10;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Net Ball
+static void SafariBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 4;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Nest Ball
+static void UltraBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 10; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 25;
+ gSprites[spriteId].data[4] = 5;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Luxury Ball
+static void GreatBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ }
+ else
+ {
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 8;
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+
+ gTasks[taskId].data[7] = 8;
+ if (++gTasks[taskId].data[0] == 2)
+ {
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+ }
+ }
+}
+
+static void FanOutBallOpenParticles_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], sprite->data[2]);
+ sprite->data[0] = (sprite->data[0] + sprite->data[4]) & 0xFF;
+ sprite->data[1] += sprite->data[5];
+ sprite->data[2] += sprite->data[6];
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void RepeatBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 12; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 21;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0], sprite->data[2]));
+ sprite->data[0] = (sprite->data[0] + 6) & 0xFF;
+ sprite->data[1]++;
+ sprite->data[2]++;
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void MasterBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i, j;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (j = 0; j < 2; j++)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 8;
+
+ if (j == 0)
+ {
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 1;
+ }
+ else
+ {
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void PremierBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0] & 0x3F, sprite->data[2]));
+ sprite->data[0] = (sprite->data[0] + 10) & 0xFF;
+ sprite->data[1]++;
+ sprite->data[2]++;
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
+{
+ int i, j;
+ int temp;
+
+ if (!gMain.inBattle)
+ {
+ temp = sprite->data[7]; // temp var needed to match
+ if (temp == 1)
+ DestroySpriteAndFreeResources(sprite);
+ else
+ DestroySprite(sprite);
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_A--;
+ if (gBattleSpritesDataPtr->animationData->field_A == 0)
+ {
+ for (i = 0; i < 12; i++)
+ {
+ if (FuncIsActiveTask(gBallOpenParticleAnimationFuncs[i]) == TRUE)
+ break;
+ }
+
+ if (i == 12)
+ {
+ for (j = 0; j < 12; j++)
+ {
+ FreeSpriteTilesByTag(gBallOpenParticleSpritesheets[j].tag);
+ FreeSpritePaletteByTag(gBallOpenParticlePalettes[j].tag);
+ }
+ }
+
+ DestroySprite(sprite);
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+ }
+}
+
+u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_8172AB0, 5);
+ gTasks[taskId].data[15] = ballId;
+ gTasks[taskId].data[3] = battler;
+ gTasks[taskId].data[10] = selectedPalettes;
+ gTasks[taskId].data[11] = selectedPalettes >> 16;
+
+ if (!unfadeLater)
+ {
+ BlendPalette(battler * 16 + 0x100, 16, 0, gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[1] = 1;
+ }
+ else
+ {
+ BlendPalette(battler * 16 + 0x100, 16, 16, gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId].func = sub_8172B40;
+ }
+
+ BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31));
+ return taskId;
+}
+
+static void sub_8172AB0(u8 taskId)
+{
+ u8 ballId = gTasks[taskId].data[15];
+
+ if (gTasks[taskId].data[2] <= 16)
+ {
+ BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] += gTasks[taskId].data[1];
+ gTasks[taskId].data[2]++;
+ }
+ else if (!gPaletteFade.active)
+ {
+ u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8172B40(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
+ gTasks[taskId].func = sub_8172B90;
+ }
+}
+
+static void sub_8172B90(u8 taskId)
+{
+ u8 ballId = gTasks[taskId].data[15];
+
+ if (gTasks[taskId].data[2] <= 16)
+ {
+ BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] += gTasks[taskId].data[1];
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8172BF0(u8 taskId)
+{
+ u8 spriteId;
+ u32 x;
+ u32 done;
+
+ done = FALSE;
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ gTasks[taskId].data[11] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0] += 0x500;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8;
+ else
+ gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8;
+
+ gTasks[taskId].data[0] &= 0xFF;
+ x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x + 32;
+ if (x > 304)
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, gTasks[taskId].data[11], spriteId);
+ gTasks[taskId].data[10]++;
+ break;
+ case 2:
+ gTasks[taskId].data[0] += 0x500;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8;
+ else
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8;
+
+ gTasks[taskId].data[0] &= 0xFF;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ if (gSprites[spriteId].pos2.x <= 0)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ // done = FALSE; // fakematching--can't get the tail merge correct
+ goto DONE;
+ }
+ }
+ else
+ {
+ if (gSprites[spriteId].pos2.x >= 0)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ done = TRUE;
+ }
+ }
+
+ if (done)
+ {
+ DONE:
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_8172D98(u8 taskId)
+{
+ u8 spriteId;
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ if (sub_80A8364(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ else
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+ gTasks[taskId].data[15]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[1]++ > 1)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[0], gTasks[taskId].data[0]));
+ if (gTasks[taskId].data[0] == 16)
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 2:
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ RequestDma3Fill(0, (void *)OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP, 0x800, 1);
+ ClearBehindSubstituteBit(gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8172E9C(u8 taskId)
+{
+ gBattleAnimArgs[7] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].behindSubstitute;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8172ED0(u8 taskId)
+{
+ gBattleAnimTarget = gEffectBattler;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8172EF0(u8 battler, struct Pokemon *mon)
+{
+ int isShiny;
+ u32 otId, personality;
+ u32 shinyValue;
+ u8 taskId1, taskId2;
+
+ isShiny = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1;
+ otId = GetMonData(mon, MON_DATA_OT_ID);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+
+ if (IsBattlerSpriteVisible(battler))
+ {
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ isShiny = TRUE;
+
+ if (isShiny)
+ {
+ if (GetSpriteTileStartByTag(0x27F9) == 0xFFFF)
+ {
+ LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[233]);
+ LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[233]);
+ }
+
+ taskId1 = CreateTask(sub_8172FEC, 10);
+ taskId2 = CreateTask(sub_8172FEC, 10);
+ gTasks[taskId1].data[0] = battler;
+ gTasks[taskId2].data[0] = battler;
+ gTasks[taskId1].data[1] = 0;
+ gTasks[taskId2].data[1] = 1;
+ return;
+ }
+ }
+
+ gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+}
+
+static void sub_8172FEC(u8 taskId)
+{
+ u8 battler;
+ u8 x, y;
+ u8 spriteId;
+ u16 counter;
+ s16 state;
+ u8 pan;
+
+ if (gTasks[taskId].data[13] < 60)
+ {
+ gTasks[taskId].data[13]++;
+ return;
+ }
+
+ if (gBattleSpritesDataPtr->animationData->field_A)
+ return;
+
+ counter = gTasks[taskId].data[10]++;
+ if (counter & 3)
+ return;
+
+ battler = gTasks[taskId].data[0];
+ x = GetBattlerSpriteCoord(battler, 0);
+ y = GetBattlerSpriteCoord(battler, 1);
+ state = gTasks[taskId].data[11];
+ if (state == 0)
+ {
+ spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5);
+ }
+ else if (state >= 0 && gTasks[taskId].data[11] < 4)
+ {
+ spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ gSprites[spriteId].oam.tileNum += 4;
+ }
+ else
+ {
+ spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ gSprites[spriteId].oam.tileNum += 5;
+ }
+
+ if (gTasks[taskId].data[1] == 0)
+ {
+ gSprites[spriteId].callback = sub_81731FC;
+ }
+ else
+ {
+ gSprites[spriteId].callback = sub_8173250;
+ gSprites[spriteId].pos2.x = -32;
+ gSprites[spriteId].pos2.y = 32;
+ gSprites[spriteId].invisible = 1;
+ if (gTasks[taskId].data[11] == 0)
+ {
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ pan = 192;
+ else
+ pan = 63;
+
+ PlaySE12WithPanning(SE_REAPOKE, pan);
+ }
+ }
+
+ gSprites[spriteId].data[0] = taskId;
+ gTasks[taskId].data[11]++;
+ if (spriteId != MAX_SPRITES)
+ gTasks[taskId].data[12]++;
+
+ if (gTasks[taskId].data[11] == 5)
+ gTasks[taskId].func = sub_81731B0;
+}
+
+static void sub_81731B0(u8 taskId)
+{
+ u8 battler;
+
+ if (gTasks[taskId].data[12] == 0)
+ {
+ if (gTasks[taskId].data[1] == 1)
+ {
+ battler = gTasks[taskId].data[0];
+ gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+ }
+
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_81731FC(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], 24);
+ sprite->pos2.y = Cos(sprite->data[1], 24);
+ sprite->data[1] += 12;
+ if (sprite->data[1] > 0xFF)
+ {
+ gTasks[sprite->data[0]].data[12]--;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8173250(struct Sprite *sprite)
+{
+ if (sprite->data[1] < 4)
+ {
+ sprite->data[1]++;
+ }
+ else
+ {
+ sprite->invisible = 0;
+ sprite->pos2.x += 5;
+ sprite->pos2.y -= 5;
+ if (sprite->pos2.x > 32)
+ {
+ gTasks[sprite->data[0]].data[12]--;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void sub_81732B0(u8 taskId)
+{
+ u8 paletteIndex;
+
+ LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[269]);
+ LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[269]);
+ paletteIndex = IndexOfSpritePaletteTag(0x281D); // unused
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_81732E4(u8 taskId)
+{
+ FreeSpriteTilesByTag(0x281D);
+ FreeSpritePaletteByTag(0x281D);
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_817330C(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 0);
+ sprite->data[0] = 30;
+ sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3];
+ sprite->data[5] = -32;
+ InitAnimArcTranslation(sprite);
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84;
+ sprite->callback = sub_817339C;
+}
+
+static void sub_817339C(struct Sprite *sprite)
+{
+ if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
+ sprite->callback = sub_81733D4;
+}
+
+static void sub_81733D4(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = 1;
+ sprite->callback = sub_8173400;
+ }
+}
+
+static void sub_8173400(struct Sprite *sprite)
+{
+ if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded)
+ {
+ if (++sprite->data[0] > 0)
+ {
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_817345C(u8 taskId)
+{
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ break;
+ case 1:
+ gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ break;
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_GetTrappedMoveAnimId(u8 taskId)
+{
+ if (gBattleSpritesDataPtr->animationData->animArg == 83)
+ gBattleAnimArgs[0] = 1;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 250)
+ gBattleAnimArgs[0] = 2;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 128)
+ gBattleAnimArgs[0] = 3;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 328)
+ gBattleAnimArgs[0] = 4;
+ else
+ gBattleAnimArgs[0] = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_817351C(u8 taskId)
+{
+ gBattleAnimAttacker = gBattleSpritesDataPtr->animationData->animArg;
+ gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
new file mode 100644
index 000000000..0f56c05d8
--- /dev/null
+++ b/src/battle_anim_effects_1.c
@@ -0,0 +1,5520 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "gpu_regs.h"
+#include "palette.h"
+#include "random.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 sub_80FE8E0(struct Sprite *);
+void sub_80FE930(struct Sprite *);
+void sub_80FE988(struct Sprite *);
+void sub_80FEAD8(struct Sprite *);
+void sub_80FEB44(struct Sprite *);
+void sub_80FED28(struct Sprite *);
+void sub_80FEE78(struct Sprite *);
+void sub_80FEF44(struct Sprite *);
+void sub_80FEFFC(struct Sprite *);
+void AnimLeechSeed(struct Sprite *);
+void AnimTranslateLinearSingleSineWave(struct Sprite *);
+void AnimMoveTwisterParticle(struct Sprite *);
+void sub_80FF374(struct Sprite *);
+void sub_80FF698(struct Sprite *);
+void sub_80FF768(struct Sprite *);
+void sub_80FF7EC(struct Sprite *);
+void sub_80FF934(struct Sprite *);
+void sub_80FFB18(struct Sprite *);
+void sub_80FFBF4(struct Sprite *);
+void sub_80FFC70(struct Sprite *);
+void sub_80FFCB4(struct Sprite *);
+void sub_80FFDBC(struct Sprite *);
+void sub_8100640(struct Sprite *);
+void sub_8100898(struct Sprite *);
+void sub_81009F8(struct Sprite *);
+void sub_8100A50(struct Sprite *);
+void sub_8100A94(struct Sprite *);
+void AnimCuttingSlice(struct Sprite *);
+void sub_8100B88(struct Sprite *);
+void sub_8100E1C(struct Sprite *);
+void sub_8100EF0(struct Sprite *);
+void sub_81010CC(struct Sprite *);
+void sub_810130C(struct Sprite *);
+void sub_810135C(struct Sprite *);
+void sub_8101440(struct Sprite *);
+void sub_81014F4(struct Sprite *);
+void sub_81015AC(struct Sprite *);
+void sub_8101898(struct Sprite *);
+void sub_8101940(struct Sprite *);
+void sub_8101B90(struct Sprite *);
+void sub_8101F40(struct Sprite *);
+void sub_8101FA8(struct Sprite *);
+void sub_8101FF0(struct Sprite *);
+void sub_81020D8(struct Sprite *);
+void sub_810217C(struct Sprite *);
+void sub_8102268(struct Sprite *);
+void sub_810234C(struct Sprite *);
+void sub_81024E0(struct Sprite *);
+void sub_8102540(struct Sprite *);
+void sub_8102844(struct Sprite *);
+void sub_8102BCC(struct Sprite *);
+void sub_8102CD4(struct Sprite *);
+void sub_8102EB0(struct Sprite *);
+void sub_8102FB8(struct Sprite *);
+void sub_8103028(struct Sprite *);
+void sub_8103164(struct Sprite *);
+void sub_8103208(struct Sprite *);
+void sub_8103284(struct Sprite *);
+void sub_8103390(struct Sprite *);
+static void AnimMovePowderParticleStep(struct Sprite *);
+static void sub_80FE9E4(struct Sprite *);
+static void sub_80FEB28(struct Sprite *);
+static void sub_80FEBFC(struct Sprite *);
+static void AnimLeechSeedStep(struct Sprite *);
+static void AnimLeechSeedSprouts(struct Sprite *);
+static void sub_80FED74(struct Sprite *);
+static void sub_80FEECC(struct Sprite *);
+static void sub_80FEF98(struct Sprite *);
+static void sub_80FF044(struct Sprite *);
+static void sub_80FF090(struct Sprite *);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *);
+static void AnimMoveTwisterParticleStep(struct Sprite *);
+static void sub_80FF3B0(struct Sprite *);
+static void sub_80FF3EC(struct Sprite *);
+static void sub_80FF53C(u8);
+static void sub_80FF5CC(u8);
+static void sub_80FFD2C(struct Sprite *);
+static void sub_80FF8DC(struct Sprite *);
+static void sub_80FFE58(struct Sprite *);
+static void sub_80FFEC4(struct Sprite *);
+static void sub_80FFF7C(struct Sprite *);
+static void sub_8100128(u8);
+static s16 sub_8100504(struct Sprite *);
+static void sub_8100524(struct Task *, u8);
+static void sub_80CC408(struct Sprite *);
+static void sub_810074C(struct Sprite *);
+static void sub_81009A0(struct Sprite *);
+static void AnimSliceStep(struct Sprite *);
+static void sub_8100E80(struct Sprite *);
+static void sub_8100FD4(struct Sprite *);
+static void sub_8101138(struct Sprite *);
+static void sub_8101298(struct Sprite *, int, int);
+static void sub_81014A0(struct Sprite *);
+static void sub_8101560(struct Sprite *);
+static void sub_81015D4(struct Sprite *);
+static void sub_8101684(struct Sprite *);
+static void sub_81016B8(struct Sprite *);
+static void sub_8101774(struct Sprite *);
+static void sub_8101820(struct Sprite *);
+static void sub_8101848(struct Sprite *);
+static void sub_8101998(struct Sprite *);
+static void sub_81019E8(struct Sprite *);
+static void sub_8101A74(struct Sprite *);
+static void sub_8101AC4(struct Sprite *);
+static void sub_8101B84(struct Sprite *);
+static void sub_8101AE8(struct Sprite *);
+static void sub_8101BA0(struct Sprite *);
+static void sub_8101D2C(u8);
+static void sub_8101EEC(u8);
+static void sub_8102044(struct Sprite *);
+static void sub_810207C(struct Sprite *);
+static void sub_810208C(struct Sprite *);
+static void sub_810213C(struct Sprite *);
+static void sub_81021CC(struct Sprite *);
+static void sub_810237C(struct Sprite *);
+static void sub_8102528(struct Sprite *);
+static void sub_8102584(struct Sprite *);
+static void sub_810296C(struct Sprite *);
+static void sub_8102AE0(u8);
+static void sub_8102B3C(struct Sprite *);
+static void sub_8102D8C(s16, s16, s16 *, s16 *, s8);
+static void sub_8102DE4(struct Sprite *);
+static void sub_8102F40(struct Sprite *);
+static void sub_81030B0(struct Sprite *);
+static void sub_81031D0(struct Sprite *);
+static void sub_8103250(struct Sprite *);
+static void sub_8103300(struct Sprite *);
+static void sub_8103320(struct Sprite *);
+static void sub_81033F0(struct Sprite *);
+static void sub_810342C(struct Sprite *);
+
+const union AnimCmd gUnknown_085920F0[] =
+{
+ 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 gUnknown_08592114[] =
+{
+ gUnknown_085920F0,
+};
+
+const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLEEP_POWDER,
+ .paletteTag = ANIM_TAG_SLEEP_POWDER,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STUN_SPORE,
+ .paletteTag = ANIM_TAG_STUN_SPORE,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_POWDER,
+ .paletteTag = ANIM_TAG_POISON_POWDER,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const union AnimCmd gUnknown_08592160[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592168[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592170[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592178[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592180[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592188[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592190[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592198[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085921A0[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085921A8[] =
+{
+ gUnknown_08592160,
+ gUnknown_08592168,
+ gUnknown_08592170,
+ gUnknown_08592178,
+ gUnknown_08592180,
+ gUnknown_08592188,
+ gUnknown_08592190,
+};
+
+const union AnimCmd *const gUnknown_085921C4[] =
+{
+ gUnknown_08592198,
+};
+
+const union AnimCmd *const gUnknown_085921C8[] =
+{
+ gUnknown_085921A0,
+};
+
+const union AffineAnimCmd gUnknown_085921CC[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085921DC[] = {
+ gUnknown_085921CC,
+};
+
+const struct SpriteTemplate gUnknown_085921E0 =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524A8C,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085921DC,
+ .callback = sub_80FE8E0,
+};
+
+const struct SpriteTemplate gUnknown_085921F8 =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FE930,
+};
+
+const struct SpriteTemplate gUnknown_08592210 =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921C4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FE988,
+};
+
+const union AffineAnimCmd gUnknown_08592228[] = {
+ AFFINEANIMCMD_FRAME(320, 320, 0, 0),
+ AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08592240[] = {
+ gUnknown_08592228,
+};
+
+const struct SpriteTemplate gUnknown_08592244 =
+{
+ .tileTag = ANIM_TAG_GRAY_ORB,
+ .paletteTag = ANIM_TAG_GRAY_ORB,
+ .oam = &gUnknown_085249C4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592240,
+ .callback = sub_80FE8E0,
+};
+
+const union AffineAnimCmd gUnknown_0859225C[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_0859226C[] = {
+ gUnknown_0859225C,
+};
+
+const struct SpriteTemplate gUnknown_08592270 =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524A8C,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_0859226C,
+ .callback = sub_80FEAD8,
+};
+
+const struct SpriteTemplate gUnknown_08592288 =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FEB44,
+};
+
+const union AnimCmd gUnknown_085922A0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085922A8[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085922B4[] =
+{
+ gUnknown_085922A0,
+ gUnknown_085922A8,
+};
+
+const struct SpriteTemplate gLeechSeedSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SEED,
+ .paletteTag = ANIM_TAG_SEED,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085922B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimLeechSeed,
+};
+
+const union AnimCmd gUnknown_085922D4[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085922DC[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085922E4[] =
+{
+ gUnknown_085922D4,
+ gUnknown_085922DC,
+};
+
+const struct SpriteTemplate gUnknown_085922EC =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_SPORE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085922E4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FED28,
+};
+
+const union AnimCmd gUnknown_08592304[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859230C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592314[] =
+{
+ gUnknown_08592304,
+};
+
+const union AnimCmd *const gUnknown_08592318[] =
+{
+ gUnknown_0859230C,
+};
+
+const struct SpriteTemplate gUnknown_0859231C =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592314,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FEE78,
+};
+
+const struct SpriteTemplate gUnknown_08592334 =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FEF44,
+};
+
+const union AnimCmd gUnknown_0859234C[] =
+{
+ 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 gUnknown_08592378[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592388[] =
+{
+ gUnknown_0859234C,
+ gUnknown_08592378,
+};
+
+const struct SpriteTemplate gUnknown_08592390 =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592388,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FEFFC,
+};
+
+const struct SpriteTemplate gUnknown_085923A8 =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592388,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const union AnimCmd gUnknown_085923C0[] =
+{
+ 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 gUnknown_085923D4[] =
+{
+ gUnknown_085923C0,
+};
+
+const struct SpriteTemplate gUnknown_085923D8 =
+{
+ .tileTag = ANIM_TAG_RAZOR_LEAF,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_085923D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AffineAnimCmd gUnknown_085923F0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08592400[] = {
+ gUnknown_085923F0,
+};
+
+const struct SpriteTemplate gSwiftStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_STAR,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592400,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AnimCmd gUnknown_0859241C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(96, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592430[] =
+{
+ 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 gUnknown_08592444[] =
+{
+ gUnknown_0859241C,
+ gUnknown_08592430,
+};
+
+const union AffineAnimCmd gUnknown_0859244C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859246C[] = {
+ AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859248C[] = {
+ gUnknown_0859244C,
+ gUnknown_0859246C,
+};
+
+const struct SpriteTemplate gUnknown_08592494 =
+{
+ .tileTag = ANIM_TAG_TENDRILS,
+ .paletteTag = ANIM_TAG_TENDRILS,
+ .oam = &gUnknown_0852499C,
+ .anims = gUnknown_08592444,
+ .images = NULL,
+ .affineAnims = gUnknown_0859248C,
+ .callback = sub_80FF374,
+};
+
+const union AffineAnimCmd gUnknown_085924AC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 0),
+ AFFINEANIMCMD_FRAME(48, 48, 0, 14),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085924C4[] = {
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085924D4[] = {
+ gUnknown_085924AC,
+ gUnknown_085924C4,
+};
+
+const struct SpriteTemplate gUnknown_085924DC =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085924D4,
+ .callback = sub_80FF698,
+};
+
+const union AnimCmd gUnknown_085924F4[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592508[] =
+{
+ 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 gUnknown_0859251C[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859252C[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_0859253C[] =
+{
+ gUnknown_085924F4,
+ gUnknown_08592508,
+ gUnknown_0859251C,
+ gUnknown_0859252C,
+};
+
+const struct SpriteTemplate gUnknown_0859254C =
+{
+ .tileTag = ANIM_TAG_ROOTS,
+ .paletteTag = ANIM_TAG_ROOTS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859253C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FF768,
+};
+
+const struct SpriteTemplate gUnknown_08592564 =
+{
+ .tileTag = ANIM_TAG_ROOTS,
+ .paletteTag = ANIM_TAG_ROOTS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859253C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FF7EC,
+};
+
+const union AnimCmd gUnknown_0859257C[] =
+{
+ ANIMCMD_FRAME(3, 3),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592588[] =
+{
+ gUnknown_0859257C,
+};
+
+const struct SpriteTemplate gUnknown_0859258C =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592588,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FF934,
+};
+
+const union AnimCmd gUnknown_085925A4[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085925AC[] =
+{
+ gUnknown_085925A4,
+};
+
+const union AffineAnimCmd gUnknown_085925B0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085925D0[] = {
+ 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 gUnknown_08592608[] = {
+ gUnknown_085925B0,
+ gUnknown_085925D0,
+};
+
+const struct SpriteTemplate gUnknown_08592610 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = sub_80FFB18,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8592628 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = sub_80FFBF4,
+};
+
+const union AnimCmd gUnknown_08592640[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592654[] =
+{
+ gUnknown_08592640,
+};
+
+const struct SpriteTemplate gUnknown_08592658 =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_GREEN_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592654,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80FFC70,
+};
+
+const struct SpriteTemplate gUnknown_08592670 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = sub_80FFCB4,
+};
+
+const union AffineAnimCmd gUnknown_08592688[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592698[] = {
+ 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 gUnknown_085926D8[] = {
+ gUnknown_08592688,
+ gUnknown_08592698,
+ gUnknown_085925B0,
+ gUnknown_085925D0,
+};
+
+const struct SpriteTemplate gUnknown_085926E8 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_085926D8,
+ .callback = sub_80FFDBC,
+};
+
+const s8 gUnknown_08592700[][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 gUnknown_08592724[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859272C[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592734[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859273C[] =
+{
+ ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592744[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859274C[] =
+{
+ ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592754[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_0859275C[] =
+{
+ gUnknown_08592724,
+ gUnknown_0859272C,
+ gUnknown_08592734,
+ gUnknown_0859273C,
+ gUnknown_08592744,
+ gUnknown_0859274C,
+ gUnknown_08592754,
+};
+
+const struct SpriteTemplate gUnknown_08592778 =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_0859275C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const union AffineAnimCmd gUnknown_08592790[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_085927A8[] = {
+ gUnknown_08592790,
+};
+
+const struct SpriteTemplate gUnknown_085927AC =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_085927C4 =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592314,
+ .images = NULL,
+ .affineAnims = gUnknown_085927A8,
+ .callback = sub_8100640,
+};
+
+const union AffineAnimCmd gUnknown_085927DC[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_085927F4[] = {
+ AFFINEANIMCMD_FRAME(192, 192, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_0859280C[] = {
+ AFFINEANIMCMD_FRAME(143, 143, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -15, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08592824[] = {
+ gUnknown_085927DC,
+};
+
+const union AffineAnimCmd *const gUnknown_08592828[] = {
+ gUnknown_085927F4,
+};
+
+const union AffineAnimCmd *const gUnknown_0859282C[] = {
+ gUnknown_0859280C,
+};
+
+const struct SpriteTemplate gUnknown_08592830 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592824,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_08592848 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592828,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_08592860 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859282C,
+ .callback = sub_8100640,
+};
+
+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 gUnknown_08592888 =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_GREEN_SPIKE,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100898,
+};
+
+const union AnimCmd gUnknown_085928A0[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085928B4[] =
+{
+ 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 gUnknown_085928C8[] =
+{
+ gUnknown_085928A0,
+ gUnknown_085928B4,
+};
+
+const struct SpriteTemplate gUnknown_085928D0 =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT,
+ .paletteTag = ANIM_TAG_SLAM_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085928C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100A50,
+};
+
+const struct SpriteTemplate gUnknown_085928E8 =
+{
+ .tileTag = ANIM_TAG_WHIP_HIT,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085928C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100A50,
+};
+
+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,
+};
+
+const struct SpriteTemplate gUnknown_0859291C =
+{
+ .tileTag = ANIM_TAG_UNUSED_HIT,
+ .paletteTag = ANIM_TAG_UNUSED_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592918,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81009F8,
+};
+
+const struct SpriteTemplate gUnknown_08592934 =
+{
+ .tileTag = ANIM_TAG_UNUSED_HIT_2,
+ .paletteTag = ANIM_TAG_UNUSED_HIT_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592918,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81009F8,
+};
+
+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,
+};
+
+const struct SpriteTemplate gUnknown_085929EC =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085929CC,
+ .callback = sub_8100A94,
+};
+
+const union AnimCmd gUnknown_08592A04[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592A18[] =
+{
+ gUnknown_08592A04,
+};
+
+const struct SpriteTemplate gCuttingSliceSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08592A18,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice,
+};
+
+const struct SpriteTemplate gUnknown_08592A34 =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08592A18,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100B88,
+};
+
+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,
+};
+
+const struct SpriteTemplate gUnknown_08592AC4 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592A9C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100E1C,
+};
+
+const struct SpriteTemplate gUnknown_08592ADC =
+{
+ .tileTag = ANIM_TAG_PROTECT,
+ .paletteTag = ANIM_TAG_PROTECT,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100EF0,
+};
+
+const union AffineAnimCmd gUnknown_08592AF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592B04[] =
+{
+ 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 gUnknown_08592B34[] =
+{
+ gUnknown_08592AF4,
+ gUnknown_08592B04,
+};
+
+const struct SpriteTemplate gUnknown_08592B3C =
+{
+ .tileTag = ANIM_TAG_MILK_BOTTLE,
+ .paletteTag = ANIM_TAG_MILK_BOTTLE,
+ .oam = &gUnknown_08524A94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592B34,
+ .callback = sub_81010CC,
+};
+
+const union AnimCmd gUnknown_08592B54[] =
+{
+ 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 gUnknown_08592B78[] =
+{
+ gUnknown_08592B54,
+};
+
+const struct SpriteTemplate gUnknown_08592B7C =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_SPARKLE_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810130C,
+};
+
+const struct SpriteTemplate gUnknown_08592B94 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_SPARKLE_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810135C,
+};
+
+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,
+};
+
+const struct SpriteTemplate gUnknown_08592BFC =
+{
+ .tileTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
+ .paletteTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592BF4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101440,
+};
+
+const union AnimCmd gUnknown_08592C14[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592C1C[] =
+{
+ gUnknown_08592C14,
+};
+
+const union AffineAnimCmd gUnknown_08592C20[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592C20_2[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd gUnknown_08592C50[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592C50_2[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd *const gUnknown_08592C80[] =
+{
+ gUnknown_08592C20,
+ gUnknown_08592C50,
+};
+
+const struct SpriteTemplate gUnknown_08592C88 =
+{
+ .tileTag = ANIM_TAG_LETTER_Z,
+ .paletteTag = ANIM_TAG_LETTER_Z,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_08592C1C,
+ .images = NULL,
+ .affineAnims = gUnknown_08592C80,
+ .callback = sub_81014F4,
+};
+
+const struct SpriteTemplate gUnknown_08592CA0 =
+{
+ .tileTag = ANIM_TAG_LOCK_ON,
+ .paletteTag = ANIM_TAG_LOCK_ON,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81015AC,
+};
+
+const struct SpriteTemplate gUnknown_08592CB8 =
+{
+ .tileTag = ANIM_TAG_LOCK_ON,
+ .paletteTag = ANIM_TAG_LOCK_ON,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101898,
+};
+
+const s8 gUnknown_08592CD0[][2] =
+{
+ { 64, 64},
+ { 0, -64},
+ {-64, 64},
+ { 32, -32},
+};
+
+const struct SpriteTemplate gUnknown_08592CD8 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101940,
+};
+
+const struct SpriteTemplate gUnknown_08592CF0 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101B90,
+};
+
+const union AnimCmd gUnknown_08592D08[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592D1C[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592D24[] =
+{
+ gUnknown_08592D08,
+ gUnknown_08592D1C,
+};
+
+const struct SpriteTemplate gUnknown_08592D2C =
+{
+ .tileTag = ANIM_TAG_SLASH,
+ .paletteTag = ANIM_TAG_SLASH,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101F40,
+};
+
+const struct SpriteTemplate gUnknown_08592D44 =
+{
+ .tileTag = ANIM_TAG_SLASH_2,
+ .paletteTag = ANIM_TAG_SLASH_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101FA8,
+};
+
+const struct SpriteTemplate gUnknown_08592D5C =
+{
+ .tileTag = ANIM_TAG_SLASH_2,
+ .paletteTag = ANIM_TAG_SLASH_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101FF0,
+};
+
+const union AnimCmd gUnknown_08592D74[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 12),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592D88[] =
+{
+ gUnknown_08592D74,
+};
+
+const struct SpriteTemplate gUnknown_08592D8C =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_FOCUS_ENERGY,
+ .oam = &gUnknown_08524954,
+ .anims = gUnknown_08592D88,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81020D8,
+};
+
+const union AnimCmd gUnknown_08592DA4[] =
+{
+ 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 gUnknown_08592DE0[] =
+{
+ gUnknown_08592DA4,
+};
+
+const struct SpriteTemplate gUnknown_08592DE4 =
+{
+ .tileTag = ANIM_TAG_SPHERE_TO_CUBE,
+ .paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592DE0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810217C,
+};
+
+const struct SpriteTemplate gUnknown_08592DFC =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL,
+ .paletteTag = ANIM_TAG_BLACK_BALL,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gUnknown_08592E14[] =
+{
+ 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 gUnknown_08592E2C[] =
+{
+ gUnknown_08592E14,
+};
+
+const struct SpriteTemplate gUnknown_08592E30 =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_GRAY_SMOKE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592E2C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AnimCmd gUnknown_08592E48[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592E5C[] =
+{
+ gUnknown_08592E48,
+};
+
+const union AffineAnimCmd gUnknown_08592E60[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08592E70[] =
+{
+ gUnknown_08592E60,
+};
+
+const struct SpriteTemplate gUnknown_08592E74 =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_CONVERSION,
+ .oam = &gUnknown_08524AE4,
+ .anims = gUnknown_08592E5C,
+ .images = NULL,
+ .affineAnims = gUnknown_08592E70,
+ .callback = sub_8102268,
+};
+
+const union AnimCmd gUnknown_08592E8C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592EA0[] =
+{
+ gUnknown_08592E8C,
+};
+
+const struct SpriteTemplate gUnknown_08592EA4 =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_CONVERSION,
+ .oam = &gUnknown_08524AE4,
+ .anims = gUnknown_08592EA0,
+ .images = NULL,
+ .affineAnims = gUnknown_08592E70,
+ .callback = sub_810234C,
+};
+
+const struct SpriteTemplate gUnknown_08592EBC =
+{
+ .tileTag = ANIM_TAG_MOON,
+ .paletteTag = ANIM_TAG_MOON,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81024E0,
+};
+
+const union AnimCmd gUnknown_08592ED4[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_FRAME(12, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592EE8[] =
+{
+ gUnknown_08592ED4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_GREEN_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592EE8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102540,
+};
+
+const union AnimCmd gUnknown_08592F04[] =
+{
+ 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 gUnknown_08592F28[] =
+{
+ gUnknown_08592F04,
+};
+
+const struct SpriteTemplate gUnknown_08592F2C =
+{
+ .tileTag = ANIM_TAG_BLUE_STAR,
+ .paletteTag = ANIM_TAG_BLUE_STAR,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592F28,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_08592F44 =
+{
+ .tileTag = ANIM_TAG_HORN_HIT,
+ .paletteTag = ANIM_TAG_HORN_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102844,
+};
+
+const union AnimCmd gUnknown_08592F5C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592F70[] =
+{
+ gUnknown_08592F5C,
+};
+
+const struct SpriteTemplate gUnknown_08592F74 =
+{
+ .tileTag = ANIM_TAG_FANG_ATTACK,
+ .paletteTag = ANIM_TAG_FANG_ATTACK,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592F70,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102BCC,
+};
+
+const union AnimCmd gUnknown_08592F8C[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592F94[] =
+{
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592F9C[] =
+{
+ ANIMCMD_FRAME(8, 41),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FA4[] =
+{
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FAC[] =
+{
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FB4[] =
+{
+ ANIMCMD_FRAME(20, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FBC[] =
+{
+ ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FC4[] =
+{
+ ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592FCC[] =
+{
+ gUnknown_08592F8C,
+ gUnknown_08592F94,
+ gUnknown_08592F9C,
+ gUnknown_08592FA4,
+ gUnknown_08592FAC,
+ gUnknown_08592FB4,
+ gUnknown_08592FBC,
+ gUnknown_08592FC4,
+};
+
+const union AffineAnimCmd gUnknown_08592FEC[] =
+{
+ AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08593004[] =
+{
+ gUnknown_08592FEC,
+};
+
+const struct SpriteTemplate gUnknown_08593008 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593004,
+ .callback = sub_8102CD4,
+};
+
+const u16 gUnknown_08593020[][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 gUnknown_08593050 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593004,
+ .callback = sub_8102EB0,
+};
+
+const struct SpriteTemplate gUnknown_08593068 =
+{
+ .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102FB8,
+};
+
+const union AffineAnimCmd gUnknown_08593080[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593098[] =
+{
+ gUnknown_08593080,
+};
+
+const struct SpriteTemplate gUnknown_0859309C =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593098,
+ .callback = sub_8103028,
+};
+
+const union AnimCmd gUnknown_085930B4[] =
+{
+ 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 gUnknown_085930C8[] =
+{
+ 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 gUnknown_085930DC[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085930F0[] =
+{
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593104[] =
+{
+ gUnknown_085930B4,
+ gUnknown_085930DC,
+ gUnknown_085930C8,
+ gUnknown_085930F0,
+};
+
+const struct SpriteTemplate gUnknown_08593114 =
+{
+ .tileTag = ANIM_TAG_THOUGHT_BUBBLE,
+ .paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593104,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103164,
+};
+
+const union AffineAnimCmd gUnknown_0859312C[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593144[] =
+{
+ 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 gUnknown_08593144_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 gUnknown_085931B4[] =
+{
+ gUnknown_0859312C,
+ gUnknown_08593144,
+};
+
+const struct SpriteTemplate gUnknown_085931BC =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_085249D4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085931B4,
+ .callback = sub_8103208,
+};
+
+const struct SpriteTemplate gUnknown_085931D4 =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085931B4,
+ .callback = sub_8103284,
+};
+
+const union AnimCmd gUnknown_085931EC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085931F4[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085931FC[] =
+{
+ 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 gUnknown_0859321C[] =
+{
+ 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 gUnknown_0859323C[] =
+{
+ gUnknown_085931EC,
+ gUnknown_085931F4,
+ gUnknown_085931FC,
+ gUnknown_0859321C,
+};
+
+const struct SpriteTemplate gUnknown_0859324C =
+{
+ .tileTag = ANIM_TAG_FINGER_2,
+ .paletteTag = ANIM_TAG_FINGER_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859323C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103390,
+};
+
+// 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);
+ }
+}
+
+void sub_80FE8E0(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+}
+
+void sub_80FE930(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_80FE988(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_80FE9E4;
+ sprite->callback(sprite);
+}
+
+static void sub_80FE9E4(struct Sprite* sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ {
+ DestroySprite(sprite);
+ }
+ else
+ {
+ if (sprite->data[5] > 0x7F)
+ sprite->subpriority = sub_80A82E4(gBattleAnimTarget) + 1;
+ else
+ sprite->subpriority = sub_80A82E4(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;
+ }
+}
+
+void sub_80FEA58(u8 taskId)
+{
+ gTasks[taskId].data[0]--;
+ 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(&gUnknown_08592210, 0, 0, sub_80A82E4(gBattleAnimTarget) + 1);
+ }
+
+ if (gTasks[taskId].data[1] == 15)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80FEAD8(struct Sprite* sprite)
+{
+ sub_80A6980(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[5] = gBattleAnimArgs[2];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_80FEB28;
+}
+
+static void sub_80FEB28(struct Sprite* sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80FEB44(struct Sprite* sprite)
+{
+ u16 a = Random2();
+ u16 b;
+
+ StartSpriteAnim(sprite, a & 7);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ {
+ sprite->pos1.x -= 20;
+ }
+ else
+ {
+ sprite->pos1.x += 20;
+ }
+
+ b = Random2();
+ sprite->data[0] = (b & 31) + 64;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sub_80A7160(sprite);
+ sprite->data[5] = Random2() & 0xFF;
+ sprite->data[6] = sprite->subpriority;
+ sprite->callback = sub_80FEBFC;
+ sprite->callback(sprite);
+}
+
+static void sub_80FEBFC(struct Sprite* sprite)
+{
+ if (sub_80A70E8(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] = (sprite->data[5] + 24) & 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)
+{
+ InitAnimSpritePos(sprite, 1);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimLeechSeedStep;
+}
+
+static void AnimLeechSeedStep(struct Sprite* sprite)
+{
+ if (TranslateAnimArc(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);
+}
+
+void sub_80FED28(struct Sprite* sprite)
+{
+ sub_80A6980(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 = sub_80FED74;
+ sprite->callback(sprite);
+}
+
+static void sub_80FED74(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 = (sub_80A8328(gBattleAnimTarget) & 3);
+ }
+ else
+ {
+ u8 priority = sub_80A8328(gBattleAnimTarget) + 1;
+ if (priority > 3)
+ priority = 3;
+
+ sprite->oam.priority = priority;
+ }
+
+ sprite->data[1] = (sprite->data[1] + 2) & 0xFF;
+ if (--sprite->data[0] == -1)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80FEE1C(u8 taskId)
+{
+ if (IsContest() || !IsDoubleBattle())
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ if (sub_80A8364(gBattleAnimTarget) == 1)
+ SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 3);
+ else
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_80FEE78(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 0);
+ 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 = sub_80FEECC;
+ sprite->callback(sprite);
+}
+
+static void sub_80FEECC(struct Sprite* sprite)
+{
+ if (!TranslateAnimLinear(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 = sub_80A82E4(gBattleAnimAttacker) - 1;
+ else
+ sprite->subpriority = sub_80A82E4(gBattleAnimAttacker) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80FEF44(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ 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 = sub_80FEF98;
+ sprite->callback(sprite);
+}
+
+static void sub_80FEF98(struct Sprite* sprite)
+{
+ if (!TranslateAnimLinear(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 ^= 0x8;
+
+ sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80FEFFC(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->callback = sub_80FF044;
+}
+
+static void sub_80FF044(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] = sprite->data[1] & 1;
+ sprite->data[1] = sprite->data[1] & 1;
+ sprite->data[2] = sprite->data[1] & 1;
+ }
+ sprite->callback = sub_80FF090;
+ }
+ else
+ {
+ sprite->data[2]--;
+ sprite->pos1.x += sprite->data[0];
+ sprite->pos1.y += sprite->data[1];
+ }
+}
+
+static void sub_80FF090(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] = (sprite->data[0] + 2) & 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)
+{
+ InitAnimSpritePos(sprite, 1);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &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;
+ TranslateAnimArc(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 = sub_80A8328(gBattleAnimTarget) - 1;
+ else
+ sprite->oam.priority = sub_80A8328(gBattleAnimTarget) + 1;
+
+ if (--sprite->data[0] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80FF374(struct Sprite* sprite)
+{
+ sub_80A6980(sprite, FALSE);
+ sprite->affineAnimPaused = 1;
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+ sprite->callback = sub_80FF3B0;
+}
+
+static void sub_80FF3B0(struct Sprite* sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->affineAnimPaused = 0;
+ GetAnimBattlerSpriteId(1);
+ sprite->data[0] = 0x100;
+ sprite->callback = sub_80FF3EC;
+ }
+}
+
+static void sub_80FF3EC(struct Sprite* sprite)
+{
+ GetAnimBattlerSpriteId(1);
+ 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
+ {
+ sub_80A7270(spriteId, 1);
+ gTasks[taskId].data[14] = gSprites[spriteId].oam.priority;
+ gSprites[spriteId].oam.priority = sub_80A8328(gBattleAnimTarget);
+ spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
+ gTasks[taskId].data[15] = gSprites[spriteId].oam.priority;
+ gSprites[spriteId].oam.priority = sub_80A8328(BATTLE_PARTNER(gBattleAnimTarget));
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+ gTasks[taskId].data[11] = 256;
+ gTasks[taskId].func = sub_80FF53C;
+ }
+}
+
+static void sub_80FF53C(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(1);
+ gTasks[taskId].data[10] += gTasks[taskId].data[0];
+ gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8;
+ if (GetBattlerSide(gBattleAnimTarget))
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+
+ gTasks[taskId].data[11] += 16;
+ obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0);
+ sub_80A7E6C(spriteId);
+ if (--gTasks[taskId].data[1] == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80FF5CC;
+ }
+}
+
+static void sub_80FF5CC(u8 taskId)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ sub_80A7344(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);
+}
+
+void sub_80FF698(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattleAnimArgs[0] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 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, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->callback = sub_80A70C0;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ break;
+ }
+ }
+ }
+}
+
+void sub_80FF768(struct Sprite* sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ 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 = sub_80FF8DC;
+}
+
+void sub_80FF7EC(struct Sprite *sprite)
+{
+ s16 p1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ s16 p2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 e1 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ s16 e2 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ e1 -= p1;
+ e2 -= p2;
+ sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100;
+ sprite->pos1.y = p2 + e2 * 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 = sub_80FF8DC;
+ gUnknown_0203A0F8[0] = sprite->pos1.x;
+ gUnknown_0203A0F8[1] = sprite->pos1.y;
+ gUnknown_0203A0F8[2] = e1;
+ gUnknown_0203A0F8[3] = e2;
+}
+
+static void sub_80FF8DC(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);
+}
+
+void sub_80FF934(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);
+}
+
+void sub_80FF9B8(struct Sprite* sprite, s16 c)
+{
+ s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
+ s32 b = (sprite->data[6] * 256) | sprite->data[7];
+ c *= 256;
+ sprite->data[5] = a;
+ sprite->data[6] = b;
+ sprite->data[7] = c;
+}
+
+bool8 sub_80FF9E0(struct Sprite* sprite)
+{
+ u16 r10 = (u8)(sprite->data[5] >> 8);
+ u16 r9 = (u8)sprite->data[5];
+ s32 r2 = (u8)(sprite->data[6] >> 8);
+ s32 r4 = (u8)sprite->data[6];
+ s16 r6 = sprite->data[7] >> 8;
+ s16 r3 = sprite->data[7] & 0xFF;
+ s16 r4_2;
+ s16 r0;
+ s32 var1;
+ s32 var2;
+
+ if (r2 == 0)
+ r2 = -32;
+ else if (r2 == 255)
+ r2 = 272;
+
+ r4_2 = r4 - r9;
+ r0 = r2 - r10;
+ var1 = r0 * r3 / r6;
+ var2 = r4_2 * r3 / r6;
+ sprite->pos1.x = var1 + r10;
+ sprite->pos1.y = var2 + r9;
+ if (++r3 == r6)
+ return TRUE;
+
+ sprite->data[7] = (r6 << 8) | r3;
+ return FALSE;
+}
+
+void sub_80FFA84(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 10)
+ StartSpriteAffineAnim(sprite, 1);
+
+ sprite->data[0]++;
+ if (sprite->data[0] > 50)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80FFAB4(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 (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_80FFA84;
+ }
+}
+
+void sub_80FFB18(struct Sprite* sprite)
+{
+ s16 e1;
+ s16 e2;
+ InitAnimSpritePos(sprite, 0);
+ e1 = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ e2 = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
+ {
+ sprite->data[6] = e1;
+ sprite->data[7] = e2 + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 1;
+ }
+ else
+ {
+ sprite->data[6] = e1;
+ sprite->data[7] = e2 + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 3;
+ }
+
+ sprite->data[4] = 60;
+ sprite->callback = sub_80FFAB4;
+}
+
+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 (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = zero;
+ sprite->data[0] = zero;
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80FFBF4(struct Sprite* sprite)
+{
+ s16 e = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = e + 10;
+ sub_80FF9B8(sprite, 40);
+ sprite->data[3] = 3;
+ sprite->data[4] = 0x3C;
+ sprite->callback = sub_80FFAB4;
+ }
+ else
+ {
+ sprite->data[6] = 255;
+ sprite->data[7] = e + 10;
+ if (IsContest())
+ sprite->data[6] = 0;
+
+ sub_80FF9B8(sprite, 40);
+ sprite->data[3] = 3;
+ sprite->data[4] = 0x3C;
+ sprite->callback = sub_80FFB90;
+ }
+}
+
+void sub_80FFC70(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sub_80A6980(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 sub_80FFCB4(struct Sprite* sprite)
+{
+ s16 p1;
+ s16 p2;
+ sub_80A6980(sprite, FALSE);
+ p1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ p2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ if (BATTLE_PARTNER(gBattleAnimTarget) == gBattleAnimAttacker)
+ {
+ sprite->data[6] = p1;
+ sprite->data[7] = p2 + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 1;
+ }
+ else
+ {
+ sprite->data[6] = p1;
+ sprite->data[7] = p2 + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 3;
+ }
+
+ sprite->data[4] = 60;
+ sprite->callback = sub_80FFD2C;
+}
+
+static void sub_80FFD2C(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 (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_80FFA84;
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ }
+}
+
+void sub_80FFDBC(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 = sub_80FFE58;
+ if (sprite->data[1] > 0 && sprite->data[1] < 192)
+ sprite->subpriority = 31;
+ else
+ sprite->subpriority = 29;
+ }
+}
+
+static void sub_80FFE58(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 = sub_80FFEC4;
+ }
+ break;
+ }
+}
+
+static void sub_80FFEC4(struct Sprite* sprite)
+{
+ if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1])
+ {
+ if (gUnknown_08592700[sprite->data[0]][2] == 127)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80FFF7C;
+ }
+
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[2]++;
+ sprite->data[1] = (gUnknown_08592700[sprite->data[0]][0] * gUnknown_08592700[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 sub_80FFF7C(struct Sprite* sprite)
+{
+ if (sprite->data[0] > 20)
+ DestroyAnimSprite(sprite);
+
+ sprite->invisible = sprite->data[0] % 2;
+ sprite->data[0]++;
+}
+
+void sub_80FFFC0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[4] = sub_80A82E4(gBattleAnimTarget) - 1;
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->data[10] = sub_80A861C(gBattleAnimTarget, 1);
+ task->data[11] = sub_80A861C(gBattleAnimTarget, 0);
+ 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(&gUnknown_08592778, 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] = sub_8100504(&gSprites[task->data[2]]);
+ InitAnimArcTranslation(&gSprites[task->data[2]]);
+ task->func = sub_8100128;
+}
+
+static void sub_8100128(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct Sprite* sprite = &gSprites[task->data[2]];
+ int a = task->data[0];
+ switch (a)
+ {
+ case 4:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 5;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 8:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 9;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 0:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(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] = sub_8100504(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:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(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] = sub_8100504(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] = sub_8100504(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:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(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] = sub_8100504(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] = sub_8100504(sprite);
+ task->data[3] = 5;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 10:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(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] = sub_8100504(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:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(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 sub_8100504(struct Sprite* sprite)
+{
+ s16 var = 8;
+ if (sprite->data[4] < sprite->pos1.y)
+ var = -var;
+
+ return var;
+}
+
+static void sub_8100524(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(&gUnknown_08592778, 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 = sub_80CC408;
+ }
+ }
+}
+
+static void sub_80CC408(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 sub_8100640(struct Sprite* sprite)
+{
+ u8 battler;
+ if (!gBattleAnimArgs[6])
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) != 0)
+ {
+ 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 = sub_80A8328(battler);
+ break;
+ case 1:
+ sprite->pos1.y = gBattleAnimArgs[0];
+ sprite->oam.priority = sub_80A8328(battler) + 1;
+ break;
+ case 2:
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0];
+ sprite->oam.priority = sub_80A8328(battler);
+ break;
+ case 3:
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0];
+ GetAnimBattlerSpriteId(ANIM_TARGET);
+ sprite->oam.priority = sub_80A8328(battler) + 1;
+ break;
+ }
+
+ sprite->callback = sub_810074C;
+}
+
+static void sub_810074C(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;
+ }
+
+ move_anim_8074EE0(sprite);
+}
+
+void sub_81007C4(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 sub_8100898(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;
+
+ sub_80A73E0(sprite, 0, 0x100, 0x100, c);
+ sprite->callback = sub_81009A0;
+ }
+}
+
+static void sub_81009A0(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
+ {
+ move_anim_8074EE0(sprite);
+ }
+}
+
+static void sub_81009DC(struct Sprite* sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81009F8(struct Sprite* sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->callback = sub_80A67D8;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8100A50(struct Sprite* sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == 0)
+ StartSpriteAnim(sprite, 1);
+
+ sprite->callback = sub_81009DC;
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+}
+
+void sub_8100A94(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, move_anim_8074EE0);
+ sprite->callback = sub_80A66DC;
+}
+
+// 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 sub_8100B88(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) == 0)
+ 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 unref_sub_8100D38(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_8100E1C(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_8100E80;
+ sprite->callback(sprite);
+}
+
+static void sub_8100E80(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 sub_8100EF0(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 = sub_80A8328(gBattleAnimAttacker) + 1;
+ else
+ sprite->oam.priority = sub_80A8328(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 = sub_8100FD4;
+}
+
+static void sub_8100FD4(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 = sub_80A67F4;
+ }
+ }
+}
+
+void sub_81010CC(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 = sub_8101138;
+}
+
+static void sub_8101138(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:
+ sub_8101298(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 sub_8101298(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 sub_810130C(struct Sprite* sprite)
+{
+ if (!gBattleAnimArgs[2])
+ sub_80A6838(sprite);
+
+ sub_80A6864(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 = sub_80A656C;
+}
+
+void sub_810135C(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);
+ sub_80A6864(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];
+ }
+
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ }
+
+ sprite->data[0] = gBattleAnimArgs[5];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_80A656C;
+}
+
+void sub_8101440(struct Sprite* sprite)
+{
+ sub_80A6838(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) == 0)
+ {
+ 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_81014A0;
+}
+
+static void sub_81014A0(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 sub_81014F4(struct Sprite* sprite)
+{
+ sub_80A6838(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 = sub_8101560;
+}
+
+static void sub_8101560(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)
+ move_anim_8074EE0(sprite);
+}
+
+void sub_81015AC(struct Sprite* sprite)
+{
+ sprite->pos1.x -= 32;
+ sprite->pos1.y -= 32;
+ sprite->data[0] = 20;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81015D4);
+}
+
+static void sub_81015D4(struct Sprite* sprite)
+{
+ switch (sprite->data[5] & 1)
+ {
+ case 0:
+ sprite->data[0] = 1;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81015D4);
+ 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 + gUnknown_08592CD0[sprite->data[5] >> 8][0];
+ sprite->data[4] = sprite->pos1.y + gUnknown_08592CD0[sprite->data[5] >> 8][1];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_8101684);
+ sprite->data[5] += 0x100;
+ PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63));
+ break;
+ }
+
+ sprite->data[5] ^= 1;
+}
+
+static void sub_8101684(struct Sprite* sprite)
+{
+ if ((sprite->data[5] >> 8) == 4)
+ {
+ sprite->data[0] = 10;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81016B8);
+ }
+ else
+ {
+ sprite->callback = sub_81015D4;
+ }
+}
+
+static void sub_81016B8(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, sub_8101774);
+ }
+ 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, sub_8101820);
+ }
+}
+
+static void sub_8101774(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 = sub_8101820;
+ }
+}
+
+static void sub_8101820(struct Sprite* sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101848;
+ }
+}
+
+static void sub_8101848(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 sub_8101898(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 = 16;
+ }
+ else if ((s16)sprite->oam.affineParam == 3)
+ {
+ sprite->pos1.x += 0x18;
+ sprite->pos1.y -= 0x18;
+ sprite->oam.matrixNum = 8;
+ }
+ else
+ {
+ sprite->pos1.x += 0x18;
+ sprite->pos1.y += 0x18;
+ sprite->oam.matrixNum = 24;
+ }
+
+ sprite->oam.tileNum = (sprite->oam.tileNum + 16);
+ sprite->callback = sub_81015AC;
+ sprite->callback(sprite);
+}
+
+void sub_8101940(struct Sprite* sprite)
+{
+ sprite->invisible = 1;
+ sprite->data[0] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ sprite->callback = sub_8101998;
+ break;
+ case 1:
+ sprite->callback = sub_8101A74;
+ break;
+ case 2:
+ sprite->callback = sub_8101AC4;
+ break;
+ default:
+ sprite->callback = sub_8101B84;
+ break;
+ }
+}
+
+static void sub_8101998(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, sub_81019E8);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_81019E8(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
+ sub_80A7270(sprite->data[3], 0);
+ sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00;
+ sprite->data[5] = 0;
+ }
+
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_80A73A0(sprite->data[3]);
+ if (++sprite->data[0] > 3)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101B84;
+ }
+}
+
+static void sub_8101A74(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, sub_8101B84);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_8101AC4(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101AE8;
+ }
+}
+
+static void sub_8101AE8(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];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_80A73A0(sprite->data[3]);
+ if (++sprite->data[0] > 2)
+ {
+ sub_80A7344(sprite->data[3]);
+ sprite->callback = sub_8101B84;
+ }
+}
+
+static void sub_8101B84(struct Sprite* sprite)
+{
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8101B90(struct Sprite *sprite)
+{
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101BA0;
+}
+
+static void sub_8101BA0(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;
+ sub_80A7270(sprite->data[2], 0);
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_80A73A0(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];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_80A73A0(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sub_80A7344(sprite->data[2]);
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_8101C94(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 = sub_8101D2C;
+ 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 = sub_8101EEC;
+ break;
+ }
+}
+
+static void sub_8101D2C(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;
+ sub_80A7270(task->data[0], 0);
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_80A73A0(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 sub_8101EEC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[3])
+ {
+ task->data[4] -= task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_80A73A0(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ sub_80A7344(task->data[0]);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8101F40(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, sub_810208C);
+ sprite->callback = sub_80A67D8;
+}
+
+void sub_8101FA8(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ StoreSpriteCallbackInData6(sprite, sub_8102044);
+ sprite->callback = sub_80A67D8;
+}
+
+void sub_8101FF0(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 = sub_810208C;
+}
+
+static void sub_8102044(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 12;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_810207C);
+ sprite->callback = TranslateSpriteOverDuration;
+ }
+}
+
+static void sub_810207C(struct Sprite* sprite)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->callback = sub_810208C;
+}
+
+static void sub_810208C(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 1)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = !sprite->invisible;
+ if (++sprite->data[1] > 8)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81020D8(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 = sub_810213C;
+}
+
+static void sub_810213C(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 sub_810217C(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 = sub_81021CC;
+}
+
+static void sub_81021CC(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 sub_8102268(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 sub_81022D4(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 sub_810234C(struct Sprite* sprite)
+{
+ sub_80A6980(sprite, FALSE);
+ sprite->animPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = sub_810237C;
+}
+
+static void sub_810237C(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 sub_81023E0(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 unref_sub_8102434(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 unref_sub_81024A8(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[i]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_81024E0(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 = sub_8102528;
+}
+
+static void sub_8102528(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8102540(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 = sub_8102584;
+}
+
+static void sub_8102584(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 sub_81026A8(u8);
+
+
+void sub_81025C0(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;
+ sub_80A8048(&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 = sub_81026A8;
+ gTasks[taskId].func(taskId);
+}
+
+void sub_81026A8(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 == &gUnknown_08592EBC || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_8592EEC)
+ gSprites[spriteId].data[0] = 1;
+ }
+
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 30)
+ {
+ BeginNormalPaletteFade((u32)sub_80A8050(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 sub_8102844(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 = 8;
+ 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 = 24;
+ }
+
+ sprite->callback = sub_810296C;
+}
+
+static void sub_810296C(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 sub_81029B4(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 = duplicate_obj_of_side_rel2move_in_transparent_mode(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 = sub_8102B3C;
+ task->data[3]++;
+ i++;
+ }
+
+ task->func = sub_8102AE0;
+ if (sub_80A8364(gBattleAnimAttacker) == 1)
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+}
+
+static void sub_8102AE0(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!task->data[3])
+ {
+ if (sub_80A8364(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 sub_8102B3C(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 sub_8102BCC(struct Sprite* sprite)
+{
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_80A67D8;
+}
+
+void sub_8102BE8(u8 taskId)
+{
+ u16 i;
+ u16 j;
+ u16 index;
+
+ index = IndexOfSpritePaletteTag(gUnknown_08593020[0][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
+ gPlttBufferFaded[index + i] = gUnknown_08593020[0][i];
+ }
+
+ for (j = 1; j < ARRAY_COUNT(gUnknown_08593020); j++)
+ {
+ index = AllocSpritePalette(gUnknown_08593020[j][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
+ gPlttBufferFaded[index + i] = gUnknown_08593020[j][i];
+ }
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+// clears the rainbow effect for musical notes.
+void sub_8102CA0(u8 taskId)
+{
+ u16 i;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020); i++)
+ FreeSpritePaletteByTag(gUnknown_08593020[i][0]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8102CD4(struct Sprite* sprite)
+{
+ u8 index;
+ u8 a;
+ u8 b;
+ sub_80A6838(sprite);
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[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;
+ sub_8102D8C(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40);
+ sprite->callback = sub_8102DE4;
+}
+
+static void sub_8102D8C(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 sub_8102DE4(struct Sprite* sprite)
+{
+ int b;
+ s16 a;
+ int c;
+ u8 index;
+ sprite->data[0]++;
+ b = 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(b, 15);
+ a = (u16)sprite->pos1.y;
+ c = (u16)sprite->pos1.x;
+
+ if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
+ {
+ move_anim_8074EE0(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(gUnknown_08593020[sprite->data[1]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+ }
+ }
+}
+
+void sub_8102EB0(struct Sprite* sprite)
+{
+ int a;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ a = gBattleAnimArgs[1];
+ (u16)gBattleAnimArgs[1] = -a;
+ }
+
+ 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 = sub_8102F40;
+}
+
+static void sub_8102F40(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)
+ move_anim_8074EE0(sprite);
+}
+
+void sub_8102FB8(struct Sprite* sprite)
+{
+ s16 a;
+ if (gBattleAnimArgs[0] == 1)
+ {
+ sprite->oam.matrixNum = 8;
+ 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 sub_8103028(struct Sprite* sprite)
+{
+ s16 xDiff;
+ u8 index;
+ sub_80A6838(sprite);
+ sprite->pos1.y += 8;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ index = IndexOfSpritePaletteTag(gUnknown_08593020[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 = sub_81030B0;
+}
+
+static void sub_81030B0(struct Sprite* sprite)
+{
+ if (TranslateAnimLinear(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 sub_810310C(u8 battler, struct Sprite* sprite)
+{
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ else
+ sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)sub_80A861C(battler, 0) / 4;
+}
+
+void sub_8103164(struct Sprite* sprite)
+{
+ u8 a;
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(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, sub_81031D0);
+ sprite->callback = sub_80A67D8;
+}
+
+static void sub_81031D0(struct Sprite* sprite)
+{
+ if (--sprite->data[0] == 0)
+ {
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->callback = sub_80A67D8;
+ }
+}
+
+void sub_8103208(struct Sprite* sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(battler, sprite);
+ sprite->data[0] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_8103250);
+ sprite->callback = sub_80A67BC;
+}
+
+static void sub_8103250(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 16)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A67BC;
+ }
+}
+
+void sub_8103284(struct Sprite* sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
+ sprite->pos1.y = sub_80A861C(battler, 2);
+ 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, sub_8103300);
+ sprite->callback = sub_80A67BC;
+}
+
+static void sub_8103300(struct Sprite* sprite)
+{
+ if (++sprite->data[4] > 12)
+ sprite->callback = sub_8103320;
+}
+
+static void sub_8103320(struct Sprite* sprite)
+{
+ s16 temp;
+ s16 temp2;
+ sprite->data[1] += 4;
+ if (sprite->data[1] > 254)
+ {
+ if (--sprite->data[0] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->callback = sub_8103250;
+ 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];
+
+ temp = gSineTable[sprite->data[1]];
+ sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
+}
+
+void sub_8103390(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gBattleAnimAttacker;
+ else
+ bank = gBattleAnimTarget;
+
+ sub_810310C(bank, sprite);
+ if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->data[0] = 2;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 3;
+ }
+
+ sprite->callback = sub_81033F0;
+}
+
+static void sub_81033F0(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 10)
+ {
+ sprite->data[1] = 0;
+ StartSpriteAnim(sprite, sprite->data[0]);
+ StoreSpriteCallbackInData6(sprite, sub_810342C);
+ sprite->callback = sub_80A67D8;
+ }
+}
+
+static void sub_810342C(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 5)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle_intro.c b/src/battle_intro.c
index 91e7c8ea0..736e35a87 100644
--- a/src/battle_intro.c
+++ b/src/battle_intro.c
@@ -250,12 +250,7 @@ static void BattleIntroSlide2(u8 taskId)
if (gTasks[taskId].data[1] == 4)
{
- u16 *bg1Y = &gBattle_BG1_Y;
- int cos = Cos2(gTasks[taskId].data[6]);
- if (cos < 0)
- cos += 0x1FF;
- *bg1Y = (cos >> 9) - 8;
-
+ gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
if (gTasks[taskId].data[6] < 180)
gTasks[taskId].data[6] += 4;
else
diff --git a/src/battle_tower.c b/src/battle_tower.c
index cb128b532..4a9e0dbc4 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -3245,7 +3245,7 @@ static void FillPartnerParty(u16 trainerId)
for (i = 0; i < 2; i++)
{
struct EmeraldBattleTowerRecord *record = &gSaveBlock2Ptr->frontier.towerRecords[trainerId];
- struct UnknownPokemonStruct monData = record->party[gSaveBlock2Ptr->frontier.field_CB4[18 + i]];
+ struct BattleTowerPokemon monData = record->party[gSaveBlock2Ptr->frontier.field_CB4[18 + i]];
StringCopy(trainerName, record->name);
if (record->language == LANGUAGE_JAPANESE)
{
diff --git a/src/birch_pc.c b/src/birch_pc.c
index 3148832be..5179b1920 100644
--- a/src/birch_pc.c
+++ b/src/birch_pc.c
@@ -66,20 +66,20 @@ const u8 *GetPokedexRatingText(u16 count)
return gBirchDexRatingText_LessThan200;
if (count == 200)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), FLAG_GET_CAUGHT)
+ || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), FLAG_GET_CAUGHT)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 201)
+ if (count == HOENN_DEX_COUNT - 1)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), FLAG_GET_CAUGHT)
+ && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), FLAG_GET_CAUGHT)) // If both of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 202)
- return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210.
+ if (count == HOENN_DEX_COUNT)
+ return gBirchDexRatingText_DexCompleted;
return gBirchDexRatingText_LessThan10;
}
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 7950b7cac..9de3d733d 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -1,8 +1,709 @@
#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "bg.h"
+#include "contest.h"
+#include "contest_painting.h"
+#include "contest_painting_effects.h"
+#include "battle_gfx_sfx_util.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "international_string_util.h"
+#include "main.h"
+#include "lilycove_lady.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+#include "window.h"
+#include "constants/rgb.h"
+
+extern u8 gUnknown_02039F5C;
+extern u8 gUnknown_02039F5D;
+
+extern u16 (*gUnknown_03006190)[][32];
+extern struct ContestWinner *gUnknown_030061C0;
+extern u16 *gContestPaintingMonPalette;
+extern struct Unk030061A0 gUnknown_030061A0;
// IWRAM bss
-IWRAM_DATA u8 gUnknown_030011F0;
-IWRAM_DATA u16 gUnknown_030011F2;
-IWRAM_DATA u16 gUnknown_030011F4;
-IWRAM_DATA u8 gUnknown_030011F6;
-IWRAM_DATA u8 gUnknown_030011F7;
+IWRAM_DATA u8 gContestPaintingState;
+IWRAM_DATA u16 gContestPaintingMosaicVal;
+IWRAM_DATA u16 gContestPaintingFadeCounter;
+IWRAM_DATA bool8 gUnknown_030011F6;
+IWRAM_DATA u8 gContestPaintingWindowId;
+
+static void ShowContestPainting(void);
+static void HoldContestPainting(void);
+static void InitContestPaintingWindow(void);
+static void InitContestPaintingBg(void);
+static void InitContestPaintingVars(bool8);
+static void sub_8130884(u8, u8);
+static void PrintContestPaintingCaption(u8, u8);
+static void VBlankCB_ContestPainting(void);
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64]);
+
+extern const u8 gUnknown_0827EA0C[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const struct CompressedSpriteSheet gMonBackPicTable[];
+extern const u8 gContestCoolness[];
+extern const u8 gContestBeauty[];
+extern const u8 gContestCuteness[];
+extern const u8 gContestSmartness[];
+extern const u8 gContestToughness[];
+extern const u8 gContestRankNormal[];
+extern const u8 gContestRankSuper[];
+extern const u8 gContestRankHyper[];
+extern const u8 gContestRankMaster[];
+extern const u8 gContestLink[];
+extern const u8 gContestPaintingCool1[];
+extern const u8 gContestPaintingCool2[];
+extern const u8 gContestPaintingCool3[];
+extern const u8 gContestPaintingBeauty1[];
+extern const u8 gContestPaintingBeauty2[];
+extern const u8 gContestPaintingBeauty3[];
+extern const u8 gContestPaintingCute1[];
+extern const u8 gContestPaintingCute2[];
+extern const u8 gContestPaintingCute3[];
+extern const u8 gContestPaintingSmart1[];
+extern const u8 gContestPaintingSmart2[];
+extern const u8 gContestPaintingSmart3[];
+extern const u8 gContestPaintingTough1[];
+extern const u8 gContestPaintingTough2[];
+extern const u8 gContestPaintingTough3[];
+
+const u16 gPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
+const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl");
+const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl");
+const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl");
+const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl");
+const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl");
+const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl");
+const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl");
+const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl");
+const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl");
+const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl");
+const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
+const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
+
+const u8 *const gUnknown_085B07C0[] =
+{
+ gContestCoolness,
+ gContestBeauty,
+ gContestCuteness,
+ gContestSmartness,
+ gContestToughness,
+};
+
+const u8 *const gContestRankTextPointers[] =
+{
+ gContestRankNormal,
+ gContestRankSuper,
+ gContestRankHyper,
+ gContestRankMaster,
+ gContestLink,
+};
+
+const struct BgTemplate gUnknown_085B07E8[] =
+{
+ {
+ .bg = 1,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 10,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0,
+ },
+};
+
+const struct WindowTemplate gUnknown_085B07EC =
+{
+ .bg = 1,
+ .tilemapLeft = 2,
+ .tilemapTop = 14,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 1,
+};
+
+const u8 *const gContestPaintingDescriptionPointers[] =
+{
+ gContestPaintingCool1,
+ gContestPaintingCool2,
+ gContestPaintingCool3,
+ gContestPaintingBeauty1,
+ gContestPaintingBeauty2,
+ gContestPaintingBeauty3,
+ gContestPaintingCute1,
+ gContestPaintingCute2,
+ gContestPaintingCute3,
+ gContestPaintingSmart1,
+ gContestPaintingSmart2,
+ gContestPaintingSmart3,
+ gContestPaintingTough1,
+ gContestPaintingTough2,
+ gContestPaintingTough3,
+};
+
+const struct OamData gUnknown_085B0830 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 1,
+ .bpp = ST_OAM_8BPP,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)};
+
+void sub_812FDA8(int contestWinner)
+{
+ // probably fakematching
+ u8 *ptr1 = &gUnknown_02039F5D;
+ u8 *ptr2 = &gUnknown_02039F5C;
+ gUnknown_02039F3C = gSaveBlock1Ptr->contestWinners[contestWinner - 1];
+ *ptr1 = contestWinner - 1;
+ *ptr2 = 0;
+}
+
+void CB2_ContestPainting(void)
+{
+ ShowContestPainting();
+}
+
+static void CB2_HoldContestPainting(void)
+{
+ HoldContestPainting();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void CB2_QuitContestPainting(void)
+{
+ SetMainCallback2(gMain.savedCallback);
+ FREE_AND_SET_NULL(gContestPaintingMonPalette);
+ FREE_AND_SET_NULL(gUnknown_03006190);
+ RemoveWindow(gContestPaintingWindowId);
+ Free(GetBgTilemapBuffer(1));
+ FreeMonSpritesGfx();
+}
+
+static void ShowContestPainting(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ ScanlineEffect_Stop();
+ SetVBlankCallback(NULL);
+ AllocateMonSpritesGfx();
+ gUnknown_030061C0 = &gUnknown_02039F3C;
+ InitContestPaintingVars(1);
+ InitContestPaintingBg();
+ gMain.state++;
+ break;
+ case 1:
+ ResetPaletteFade();
+ DmaFillLarge32(3, 0, (void *)BG_VRAM, 0x18000, 0x1000);
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 2:
+ SeedRng(gMain.vblankCounter1);
+ InitKeys();
+ InitContestPaintingWindow();
+ gMain.state++;
+ break;
+ case 3:
+ sub_8130884(gUnknown_02039F5D, gUnknown_02039F5C);
+ gMain.state++;
+ break;
+ case 4:
+ PrintContestPaintingCaption(gUnknown_02039F5D, gUnknown_02039F5C);
+ LoadPalette(gUnknown_085B0838, 0, 1 * 2);
+ DmaClear32(3, PLTT, PLTT_SIZE);
+ BeginFastPaletteFade(2);
+ SetVBlankCallback(VBlankCB_ContestPainting);
+ gContestPaintingState = 0;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
+ SetMainCallback2(CB2_HoldContestPainting);
+ break;
+ }
+}
+
+static void HoldContestPainting(void)
+{
+ switch (gContestPaintingState)
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ gContestPaintingState = 1;
+ if (gUnknown_030011F6 && gContestPaintingFadeCounter)
+ gContestPaintingFadeCounter--;
+ break;
+ case 1:
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ u8 two = 2; //needed to make the asm match
+ gContestPaintingState = two;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
+ }
+
+ if (gUnknown_030011F6)
+ gContestPaintingFadeCounter = 0;
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ SetMainCallback2(CB2_QuitContestPainting);
+ if (gUnknown_030011F6 && gContestPaintingFadeCounter < 30)
+ gContestPaintingFadeCounter++;
+ break;
+ }
+}
+
+static void InitContestPaintingWindow(void)
+{
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_085B07E8, ARRAY_COUNT(gUnknown_085B07E8));
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
+ gContestPaintingWindowId = AddWindow(&gUnknown_085B07EC);
+ DeactivateAllTextPrinters();
+ FillWindowPixelBuffer(gContestPaintingWindowId, 0);
+ PutWindowTilemap(gContestPaintingWindowId);
+ CopyWindowToVram(gContestPaintingWindowId, 3);
+ ShowBg(1);
+}
+
+static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
+{
+ int x;
+ u8 category;
+
+ if (arg1 == TRUE)
+ return;
+
+ category = gUnknown_030061C0->contestCategory;
+ if (contestType < 8)
+ {
+ sub_818E868(gStringVar1, category);
+ StringAppend(gStringVar1, gText_Space);
+ StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]);
+ StringCopy(gStringVar2, gUnknown_030061C0->trainerName);
+ sub_81DB5AC(gStringVar2);
+ StringCopy(gStringVar3, gUnknown_030061C0->monName);
+ StringExpandPlaceholders(gStringVar4, gUnknown_0827EA0C);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gUnknown_030061C0->monName);
+ StringExpandPlaceholders(gStringVar4, gContestPaintingDescriptionPointers[category]);
+ }
+
+ x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
+ AddTextPrinterParameterized(gContestPaintingWindowId, 1, gStringVar4, x, 1, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+}
+
+static void InitContestPaintingBg(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ REG_IE |= INTR_FLAG_VBLANK;
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void InitContestPaintingVars(bool8 arg0)
+{
+ if (arg0 == FALSE)
+ {
+ gUnknown_030011F6 = FALSE;
+ gContestPaintingMosaicVal = 0;
+ gContestPaintingFadeCounter = 0;
+ }
+ else
+ {
+ gUnknown_030011F6 = TRUE;
+ gContestPaintingMosaicVal = 15;
+ gContestPaintingFadeCounter = 30;
+ }
+}
+
+static void UpdateContestPaintingMosaicEffect(void)
+{
+ if (!gUnknown_030011F6)
+ {
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ gContestPaintingMosaicVal = gContestPaintingFadeCounter / 2;
+ SetGpuReg(REG_OFFSET_MOSAIC, (gContestPaintingMosaicVal << 12) | (gContestPaintingMosaicVal << 8) | (gContestPaintingMosaicVal << 4) | (gContestPaintingMosaicVal << 0));
+ }
+}
+
+static void VBlankCB_ContestPainting(void)
+{
+ UpdateContestPaintingMosaicEffect();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_81302E8(u16 species, u8 arg1)
+{
+ const void *pal = GetFrontSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality);
+ LZDecompressVram(pal, gContestPaintingMonPalette);
+ if (!arg1)
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ gUnknown_030061C0->personality);
+ sub_8130380(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonBackPicTable[species],
+ gMonSpritesGfxPtr->sprites[0],
+ species,
+ gUnknown_030061C0->personality);
+ sub_8130380(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ }
+}
+
+#ifdef NONMATCHING
+// functionally equivalent.
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+{
+ u16 tileY, tileX, pixelY, pixelX;
+ u8 colorIndex;
+
+ for (tileY = 0; tileY < 8; tileY++)
+ {
+ for (tileX = 0; tileX < 8; tileX++)
+ {
+ for (pixelY = 0; pixelY < 8; pixelY++)
+ {
+ for (pixelX = 0; pixelX < 8; pixelX++)
+ {
+ int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2);
+ colorIndex = spritePixels[offset];
+ if (pixelX & 1)
+ colorIndex >>= 4;
+ else
+ colorIndex &= 0xF;
+
+ if (colorIndex == 0) // transparent pixel
+ (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
+ else
+ (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
+ }
+ }
+ }
+ }
+}
+#else
+NAKED
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0xC\n\
+ mov r10, r0\n\
+ mov r9, r1\n\
+ str r2, [sp]\n\
+ movs r0, 0\n\
+_08130394:\n\
+ movs r3, 0\n\
+ adds r1, r0, 0x1\n\
+ str r1, [sp, 0x4]\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0x8]\n\
+_0813039E:\n\
+ movs r1, 0\n\
+ adds r2, r3, 0x1\n\
+ mov r8, r2\n\
+ ldr r7, [sp, 0x8]\n\
+ adds r0, r7, r3\n\
+ lsls r0, 5\n\
+ mov r12, r0\n\
+ lsls r4, r3, 3\n\
+_081303AE:\n\
+ movs r3, 0\n\
+ lsls r0, r1, 2\n\
+ adds r6, r1, 0x1\n\
+ mov r2, r12\n\
+ adds r5, r2, r0\n\
+ ldr r7, [sp, 0x8]\n\
+ adds r0, r7, r1\n\
+ lsls r0, 7\n\
+ ldr r1, [sp]\n\
+ adds r2, r0, r1\n\
+_081303C2:\n\
+ lsrs r0, r3, 1\n\
+ adds r0, r5, r0\n\
+ add r0, r10\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _081303D6\n\
+ lsrs r1, 4\n\
+ b _081303DA\n\
+_081303D6:\n\
+ movs r0, 0xF\n\
+ ands r1, r0\n\
+_081303DA:\n\
+ cmp r1, 0\n\
+ bne _081303EC\n\
+ adds r0, r4, r3\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ movs r7, 0x80\n\
+ lsls r7, 8\n\
+ adds r1, r7, 0\n\
+ b _081303F8\n\
+_081303EC:\n\
+ adds r0, r4, r3\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ lsls r1, 1\n\
+ add r1, r9\n\
+ ldrh r1, [r1]\n\
+_081303F8:\n\
+ strh r1, [r0]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x7\n\
+ bls _081303C2\n\
+ lsls r0, r6, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, 0x7\n\
+ bls _081303AE\n\
+ mov r1, r8\n\
+ lsls r0, r1, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x7\n\
+ bls _0813039E\n\
+ ldr r2, [sp, 0x4]\n\
+ lsls r0, r2, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x7\n\
+ bls _08130394\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif
+
+static void sub_8130430(u8 arg0, u8 arg1)
+{
+ u8 x, y;
+
+ LoadPalette(gPictureFramePalettes, 0, 0x100);
+ if (arg1 == 1)
+ {
+ switch (gUnknown_030061C0->contestCategory / 3)
+ {
+ case CONTEST_CATEGORY_COOL:
+ RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03006190);
+ break;
+ }
+
+#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)])
+
+ // Set the background
+ for (y = 0; y < 20; y++)
+ {
+ for (x = 0; x < 32; x++)
+ VRAM_PICTURE_DATA(x, y) = 0x1015;
+ }
+
+ // Copy the image frame
+ for (y = 0; y < 10; y++)
+ {
+ for (x = 0; x < 18; x++)
+ VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03006190)[y + 2][x + 6];
+ }
+
+ // Re-set the entire top row to the first top frame part
+ for (x = 0; x < 16; x++)
+ VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03006190)[2][7];
+
+#undef VRAM_PICTURE_DATA
+ }
+ else if (arg0 < 8)
+ {
+ RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000));
+ }
+ else
+ {
+ switch (gUnknown_030061C0->contestCategory / 3)
+ {
+ case CONTEST_CATEGORY_COOL:
+ RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_SMART:
+ RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000));
+ break;
+ }
+ }
+}
+
+static void sub_8130688(u8 arg0)
+{
+ //Some hacks just to get the asm to match
+#ifndef NONMATCHING
+ asm(""::"r"(arg0));
+#endif
+
+ gMain.oamBuffer[0] = gUnknown_085B0830;
+ gMain.oamBuffer[0].tileNum = 0;
+
+#ifndef NONMATCHING
+ if (arg0) arg0 = gMain.oamBuffer[0].tileNum;
+#endif
+
+ gMain.oamBuffer[0].x = 88;
+ gMain.oamBuffer[0].y = 24;
+}
+
+static u8 sub_81306CC(u8 arg0)
+{
+ u8 contestCategory;
+
+ if (arg0 < 8)
+ contestCategory = gUnknown_030061C0->contestCategory;
+ else
+ contestCategory = gUnknown_030061C0->contestCategory / 3;
+
+ switch (contestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ return CONTESTRESULT_COOL;
+ case CONTEST_CATEGORY_BEAUTY:
+ return CONTESTRESULT_BEAUTY;
+ case CONTEST_CATEGORY_CUTE:
+ return CONTESTRESULT_CUTE;
+ case CONTEST_CATEGORY_SMART:
+ return CONTESTRESULT_SMART;
+ case CONTEST_CATEGORY_TOUGH:
+ return CONTESTRESULT_TOUGH;
+ }
+
+ return contestCategory;
+}
+
+static void sub_8130738(void)
+{
+ gContestPaintingMonPalette = AllocZeroed(0x200);
+ gUnknown_03006190 = AllocZeroed(0x2000);
+}
+
+static void sub_8130760(u8 contestResult)
+{
+ gUnknown_030061A0.var_4 = gUnknown_03006190;
+ gUnknown_030061A0.var_8 = gContestPaintingMonPalette;
+ gUnknown_030061A0.var_18 = 0;
+ gUnknown_030061A0.var_1F = gUnknown_030061C0->personality % 256;
+ gUnknown_030061A0.var_19 = 0;
+ gUnknown_030061A0.var_1A = 0;
+ gUnknown_030061A0.var_1B = 64;
+ gUnknown_030061A0.var_1C = 64;
+ gUnknown_030061A0.var_1D = 64;
+ gUnknown_030061A0.var_1E = 64;
+
+ switch (contestResult)
+ {
+ case CONTESTRESULT_SMART:
+ case CONTESTRESULT_TOUGH:
+ gUnknown_030061A0.var_14 = 3;
+ break;
+ case CONTESTRESULT_COOL:
+ case CONTESTRESULT_BEAUTY:
+ case CONTESTRESULT_CUTE:
+ default:
+ gUnknown_030061A0.var_14 = 1;
+ break;
+ }
+
+ gUnknown_030061A0.var_16 = 2;
+ gUnknown_030061A0.var_0 = contestResult;
+ gUnknown_030061A0.var_10 = 0x6010000;
+
+ sub_8124F2C(&gUnknown_030061A0);
+ sub_81261A4(&gUnknown_030061A0);
+ sub_8126058(&gUnknown_030061A0);
+
+ LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
+}
+
+static void sub_8130884(u8 arg0, u8 arg1)
+{
+ sub_8130738();
+ sub_81302E8(gUnknown_030061C0->species, 0);
+ sub_8130760(sub_81306CC(arg0));
+ sub_8130688(arg0);
+ sub_8130430(arg0, arg1);
+}
diff --git a/src/credits.c b/src/credits.c
index 02b01c072..67ab97481 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -135,7 +135,7 @@ struct Unk201C000
u16 unk90;
u16 unk92;
u16 unk94;
- u16 unk96[386];
+ u16 unk96[NATIONAL_DEX_COUNT];
u16 unk39A;
u16 unk39C[7];
};
@@ -2254,12 +2254,12 @@ static void sub_8177050(struct Sprite *sprite)
}
}
-static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position)
+static u8 sub_8177224(u16 nationalDexNum, s16 x, s16 y, u16 position)
{
u8 spriteId;
u8 spriteId2;
- spriteId = sub_80C0E9C(species, x, y, position);
+ spriteId = CreateMonSpriteFromNationalDexNumber(nationalDexNum, x, y, position);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].data[1] = position + 1;
gSprites[spriteId].invisible = TRUE;
@@ -2297,16 +2297,16 @@ static void sub_8177388(void)
u16 dexNum;
u16 j;
- for (dexNum = 1, j = 0; dexNum < 386; dexNum++)
+ for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++)
{
- if (GetSetPokedexFlag(dexNum, 1))
+ if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT))
{
gUnknown_0203BCE8->unk96[j] = dexNum;
j++;
}
}
- for (dexNum = j; dexNum < 386; dexNum++)
+ for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++)
gUnknown_0203BCE8->unk96[dexNum] = 0;
gUnknown_0203BCE8->unk39A = j;
diff --git a/src/effects_1.c b/src/effects_1.c
deleted file mode 100644
index a8687bc38..000000000
--- a/src/effects_1.c
+++ /dev/null
@@ -1,2093 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "constants/rgb.h"
-
-extern void sub_80FE840(struct Sprite *);
-extern void sub_80FE8E0(struct Sprite *);
-extern void sub_80FE930(struct Sprite *);
-extern void sub_80FE988(struct Sprite *);
-extern void sub_80FEAD8(struct Sprite *);
-extern void sub_80FEB44(struct Sprite *);
-extern void sub_80FEC48(struct Sprite *);
-extern void sub_80FED28(struct Sprite *);
-extern void sub_80FEE78(struct Sprite *);
-extern void sub_80FEF44(struct Sprite *);
-extern void sub_80FEFFC(struct Sprite *);
-extern void AnimMoveTwisterParticle(struct Sprite *);
-extern void sub_80FF0F4(struct Sprite *);
-extern void sub_80FF374(struct Sprite *);
-extern void sub_80FF698(struct Sprite *);
-extern void sub_80FF768(struct Sprite *);
-extern void sub_80FF7EC(struct Sprite *);
-extern void sub_80FF934(struct Sprite *);
-extern void sub_80FFB18(struct Sprite *);
-extern void sub_80FFBF4(struct Sprite *);
-extern void sub_80FFC70(struct Sprite *);
-extern void sub_80FFCB4(struct Sprite *);
-extern void sub_80FFDBC(struct Sprite *);
-extern void sub_8100640(struct Sprite *);
-extern void sub_8100898(struct Sprite *);
-extern void sub_8100A50(struct Sprite *);
-extern void sub_81009F8(struct Sprite *);
-extern void sub_8100A94(struct Sprite *);
-extern void sub_8100AE0(struct Sprite *);
-extern void sub_8100B88(struct Sprite *);
-extern void sub_8100E1C(struct Sprite *);
-extern void sub_8100EF0(struct Sprite *);
-extern void sub_81010CC(struct Sprite *);
-extern void sub_810130C(struct Sprite *);
-extern void sub_810135C(struct Sprite *);
-extern void sub_8101440(struct Sprite *);
-extern void sub_81014F4(struct Sprite *);
-extern void sub_81015AC(struct Sprite *);
-extern void sub_8101898(struct Sprite *);
-extern void sub_8101940(struct Sprite *);
-extern void sub_8101B90(struct Sprite *);
-extern void sub_8101F40(struct Sprite *);
-extern void sub_8101FA8(struct Sprite *);
-extern void sub_8101FF0(struct Sprite *);
-extern void sub_81020D8(struct Sprite *);
-extern void sub_810217C(struct Sprite *);
-extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_8102268(struct Sprite *);
-extern void sub_810234C(struct Sprite *);
-extern void sub_81024E0(struct Sprite *);
-extern void sub_8102540(struct Sprite *);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_8102844(struct Sprite *);
-extern void sub_8102BCC(struct Sprite *);
-extern void sub_8102CD4(struct Sprite *);
-extern void sub_8102EB0(struct Sprite *);
-extern void sub_8102FB8(struct Sprite *);
-extern void sub_8103028(struct Sprite *);
-extern void sub_8103164(struct Sprite *);
-extern void sub_8103208(struct Sprite *);
-extern void sub_8103284(struct Sprite *);
-extern void sub_8103390(struct Sprite *);
-
-const union AnimCmd gUnknown_085920F0[] =
-{
- 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 gUnknown_08592114[] =
-{
- gUnknown_085920F0,
-};
-
-const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SLEEP_POWDER,
- .paletteTag = ANIM_TAG_SLEEP_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_STUN_SPORE,
- .paletteTag = ANIM_TAG_STUN_SPORE,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_POISON_POWDER,
- .paletteTag = ANIM_TAG_POISON_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const union AnimCmd gUnknown_08592160[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592168[] =
-{
- ANIMCMD_FRAME(1, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592170[] =
-{
- ANIMCMD_FRAME(2, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592178[] =
-{
- ANIMCMD_FRAME(3, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592180[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592188[] =
-{
- ANIMCMD_FRAME(5, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592190[] =
-{
- ANIMCMD_FRAME(6, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592198[] =
-{
- ANIMCMD_FRAME(7, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085921A0[] =
-{
- ANIMCMD_FRAME(8, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085921A8[] =
-{
- gUnknown_08592160,
- gUnknown_08592168,
- gUnknown_08592170,
- gUnknown_08592178,
- gUnknown_08592180,
- gUnknown_08592188,
- gUnknown_08592190,
-};
-
-const union AnimCmd *const gUnknown_085921C4[] =
-{
- gUnknown_08592198,
-};
-
-const union AnimCmd *const gUnknown_085921C8[] =
-{
- gUnknown_085921A0,
-};
-
-const union AffineAnimCmd gUnknown_085921CC[] = {
- AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085921DC[] = {
- gUnknown_085921CC,
-};
-
-const struct SpriteTemplate gUnknown_085921E0 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_085921DC,
- .callback = sub_80FE8E0,
-};
-
-const struct SpriteTemplate gUnknown_085921F8 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE930,
-};
-
-const struct SpriteTemplate gUnknown_08592210 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921C4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE988,
-};
-
-const union AffineAnimCmd gUnknown_08592228[] = {
- AFFINEANIMCMD_FRAME(320, 320, 0, 0),
- AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08592240[] = {
- gUnknown_08592228,
-};
-
-const struct SpriteTemplate gUnknown_08592244 =
-{
- .tileTag = ANIM_TAG_GRAY_ORB,
- .paletteTag = ANIM_TAG_GRAY_ORB,
- .oam = &gUnknown_085249C4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592240,
- .callback = sub_80FE8E0,
-};
-
-const union AffineAnimCmd gUnknown_0859225C[] = {
- AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_0859226C[] = {
- gUnknown_0859225C,
-};
-
-const struct SpriteTemplate gUnknown_08592270 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_0859226C,
- .callback = sub_80FEAD8,
-};
-
-const struct SpriteTemplate gUnknown_08592288 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEB44,
-};
-
-const union AnimCmd gUnknown_085922A0[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085922A8[] =
-{
- ANIMCMD_FRAME(4, 7),
- ANIMCMD_FRAME(8, 7),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_085922B4[] =
-{
- gUnknown_085922A0,
- gUnknown_085922A8,
-};
-
-const struct SpriteTemplate gLeechSeedSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SEED,
- .paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922B4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEC48,
-};
-
-const union AnimCmd gUnknown_085922D4[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085922DC[] =
-{
- ANIMCMD_FRAME(4, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085922E4[] =
-{
- gUnknown_085922D4,
- gUnknown_085922DC,
-};
-
-const struct SpriteTemplate gUnknown_085922EC =
-{
- .tileTag = ANIM_TAG_SPORE,
- .paletteTag = ANIM_TAG_SPORE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922E4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FED28,
-};
-
-const union AnimCmd gUnknown_08592304[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859230C[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592314[] =
-{
- gUnknown_08592304,
-};
-
-const union AnimCmd *const gUnknown_08592318[] =
-{
- gUnknown_0859230C,
-};
-
-const struct SpriteTemplate gUnknown_0859231C =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592314,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEE78,
-};
-
-const struct SpriteTemplate gUnknown_08592334 =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEF44,
-};
-
-const union AnimCmd gUnknown_0859234C[] =
-{
- 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 gUnknown_08592378[] =
-{
- ANIMCMD_FRAME(24, 5),
- ANIMCMD_FRAME(28, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592388[] =
-{
- gUnknown_0859234C,
- gUnknown_08592378,
-};
-
-const struct SpriteTemplate gUnknown_08592390 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEFFC,
-};
-
-const struct SpriteTemplate gUnknown_085923A8 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimMoveTwisterParticle,
-};
-
-const union AnimCmd gUnknown_085923C0[] =
-{
- 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 gUnknown_085923D4[] =
-{
- gUnknown_085923C0,
-};
-
-const struct SpriteTemplate gUnknown_085923D8 =
-{
- .tileTag = ANIM_TAG_RAZOR_LEAF,
- .paletteTag = ANIM_TAG_RAZOR_LEAF,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_085923D4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF0F4,
-};
-
-const union AffineAnimCmd gUnknown_085923F0[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08592400[] = {
- gUnknown_085923F0,
-};
-
-const struct SpriteTemplate gSwiftStarSpriteTemplate =
-{
- .tileTag = ANIM_TAG_YELLOW_STAR,
- .paletteTag = ANIM_TAG_YELLOW_STAR,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592400,
- .callback = sub_80FF0F4,
-};
-
-const union AnimCmd gUnknown_0859241C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(96, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592430[] =
-{
- 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 gUnknown_08592444[] =
-{
- gUnknown_0859241C,
- gUnknown_08592430,
-};
-
-const union AffineAnimCmd gUnknown_0859244C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
- AFFINEANIMCMD_FRAME(11, 0, 0, 6),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859246C[] = {
- AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(11, 0, 0, 6),
- AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859248C[] = {
- gUnknown_0859244C,
- gUnknown_0859246C,
-};
-
-const struct SpriteTemplate gUnknown_08592494 =
-{
- .tileTag = ANIM_TAG_TENDRILS,
- .paletteTag = ANIM_TAG_TENDRILS,
- .oam = &gUnknown_0852499C,
- .anims = gUnknown_08592444,
- .images = NULL,
- .affineAnims = gUnknown_0859248C,
- .callback = sub_80FF374,
-};
-
-const union AffineAnimCmd gUnknown_085924AC[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 0),
- AFFINEANIMCMD_FRAME(48, 48, 0, 14),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085924C4[] = {
- AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085924D4[] = {
- gUnknown_085924AC,
- gUnknown_085924C4,
-};
-
-const struct SpriteTemplate gUnknown_085924DC =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_085924D4,
- .callback = sub_80FF698,
-};
-
-const union AnimCmd gUnknown_085924F4[] =
-{
- ANIMCMD_FRAME(0, 7),
- ANIMCMD_FRAME(16, 7),
- ANIMCMD_FRAME(32, 7),
- ANIMCMD_FRAME(48, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592508[] =
-{
- 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 gUnknown_0859251C[] =
-{
- ANIMCMD_FRAME(0, 7),
- ANIMCMD_FRAME(16, 7),
- ANIMCMD_FRAME(32, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859252C[] =
-{
- ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_0859253C[] =
-{
- gUnknown_085924F4,
- gUnknown_08592508,
- gUnknown_0859251C,
- gUnknown_0859252C,
-};
-
-const struct SpriteTemplate gUnknown_0859254C =
-{
- .tileTag = ANIM_TAG_ROOTS,
- .paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF768,
-};
-
-const struct SpriteTemplate gUnknown_08592564 =
-{
- .tileTag = ANIM_TAG_ROOTS,
- .paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF7EC,
-};
-
-const union AnimCmd gUnknown_0859257C[] =
-{
- ANIMCMD_FRAME(3, 3),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592588[] =
-{
- gUnknown_0859257C,
-};
-
-const struct SpriteTemplate gUnknown_0859258C =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592588,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF934,
-};
-
-const union AnimCmd gUnknown_085925A4[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085925AC[] =
-{
- gUnknown_085925A4,
-};
-
-const union AffineAnimCmd gUnknown_085925B0[] = {
- AFFINEANIMCMD_FRAME(0, 0, -4, 10),
- AFFINEANIMCMD_FRAME(0, 0, 4, 20),
- AFFINEANIMCMD_FRAME(0, 0, -4, 10),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085925D0[] = {
- 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 gUnknown_08592608[] = {
- gUnknown_085925B0,
- gUnknown_085925D0,
-};
-
-const struct SpriteTemplate gUnknown_08592610 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFB18,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592628 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFBF4,
-};
-
-const union AnimCmd gUnknown_08592640[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592654[] =
-{
- gUnknown_08592640,
-};
-
-const struct SpriteTemplate gUnknown_08592658 =
-{
- .tileTag = ANIM_TAG_GREEN_SPARKLE,
- .paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592654,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FFC70,
-};
-
-const struct SpriteTemplate gUnknown_08592670 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFCB4,
-};
-
-const union AffineAnimCmd gUnknown_08592688[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 3),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592698[] = {
- 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 gUnknown_085926D8[] = {
- gUnknown_08592688,
- gUnknown_08592698,
- gUnknown_085925B0,
- gUnknown_085925D0,
-};
-
-const struct SpriteTemplate gUnknown_085926E8 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_085926D8,
- .callback = sub_80FFDBC,
-};
-
-const s8 gUnknown_08592700[][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 gUnknown_08592724[] =
-{
- ANIMCMD_FRAME(28, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859272C[] =
-{
- ANIMCMD_FRAME(32, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592734[] =
-{
- ANIMCMD_FRAME(20, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859273C[] =
-{
- ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592744[] =
-{
- ANIMCMD_FRAME(16, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859274C[] =
-{
- ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592754[] =
-{
- ANIMCMD_FRAME(28, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_0859275C[] =
-{
- gUnknown_08592724,
- gUnknown_0859272C,
- gUnknown_08592734,
- gUnknown_0859273C,
- gUnknown_08592744,
- gUnknown_0859274C,
- gUnknown_08592754,
-};
-
-const struct SpriteTemplate gUnknown_08592778 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_0859275C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-const union AffineAnimCmd gUnknown_08592790[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, 4, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_085927A8[] = {
- gUnknown_08592790,
-};
-
-const struct SpriteTemplate gUnknown_085927AC =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_085927C4 =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592314,
- .images = NULL,
- .affineAnims = gUnknown_085927A8,
- .callback = sub_8100640,
-};
-
-const union AffineAnimCmd gUnknown_085927DC[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -10, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd gUnknown_085927F4[] = {
- AFFINEANIMCMD_FRAME(192, 192, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -12, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd gUnknown_0859280C[] = {
- AFFINEANIMCMD_FRAME(143, 143, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -15, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08592824[] = {
- gUnknown_085927DC,
-};
-
-const union AffineAnimCmd *const gUnknown_08592828[] = {
- gUnknown_085927F4,
-};
-
-const union AffineAnimCmd *const gUnknown_0859282C[] = {
- gUnknown_0859280C,
-};
-
-const struct SpriteTemplate gUnknown_08592830 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592824,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_08592848 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592828,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_08592860 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859282C,
- .callback = sub_8100640,
-};
-
-// sMagicalLeafBlendColors
-const u16 gUnknown_08592878[] =
-{
- 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 gUnknown_08592888 =
-{
- .tileTag = ANIM_TAG_GREEN_SPIKE,
- .paletteTag = ANIM_TAG_GREEN_SPIKE,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100898,
-};
-
-const union AnimCmd gUnknown_085928A0[] =
-{
- ANIMCMD_FRAME(64, 3),
- ANIMCMD_FRAME(80, 3),
- ANIMCMD_FRAME(96, 3),
- ANIMCMD_FRAME(112, 6),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085928B4[] =
-{
- 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 gUnknown_085928C8[] =
-{
- gUnknown_085928A0,
- gUnknown_085928B4,
-};
-
-const struct SpriteTemplate gUnknown_085928D0 =
-{
- .tileTag = ANIM_TAG_SLAM_HIT,
- .paletteTag = ANIM_TAG_SLAM_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
-};
-
-const struct SpriteTemplate gUnknown_085928E8 =
-{
- .tileTag = ANIM_TAG_WHIP_HIT,
- .paletteTag = ANIM_TAG_WHIP_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
-};
-
-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,
-};
-
-const struct SpriteTemplate gUnknown_0859291C =
-{
- .tileTag = ANIM_TAG_UNUSED_HIT,
- .paletteTag = ANIM_TAG_UNUSED_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592918,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81009F8,
-};
-
-const struct SpriteTemplate gUnknown_08592934 =
-{
- .tileTag = ANIM_TAG_UNUSED_HIT_2,
- .paletteTag = ANIM_TAG_UNUSED_HIT_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592918,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81009F8,
-};
-
-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,
-};
-
-const struct SpriteTemplate gUnknown_085929EC =
-{
- .tileTag = ANIM_TAG_HANDS_AND_FEET,
- .paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085929CC,
- .callback = sub_8100A94,
-};
-
-const union AnimCmd gUnknown_08592A04[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592A18[] =
-{
- gUnknown_08592A04,
-};
-
-const struct SpriteTemplate gCuttingSliceSpriteTemplate =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100AE0,
-};
-
-const struct SpriteTemplate gUnknown_08592A34 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100B88,
-};
-
-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,
-};
-
-const struct SpriteTemplate gUnknown_08592AC4 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592A9C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100E1C,
-};
-
-const struct SpriteTemplate gUnknown_08592ADC =
-{
- .tileTag = ANIM_TAG_PROTECT,
- .paletteTag = ANIM_TAG_PROTECT,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100EF0,
-};
-
-const union AffineAnimCmd gUnknown_08592AF4[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592B04[] =
-{
- 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 gUnknown_08592B34[] =
-{
- gUnknown_08592AF4,
- gUnknown_08592B04,
-};
-
-const struct SpriteTemplate gUnknown_08592B3C =
-{
- .tileTag = ANIM_TAG_MILK_BOTTLE,
- .paletteTag = ANIM_TAG_MILK_BOTTLE,
- .oam = &gUnknown_08524A94,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592B34,
- .callback = sub_81010CC,
-};
-
-const union AnimCmd gUnknown_08592B54[] =
-{
- 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 gUnknown_08592B78[] =
-{
- gUnknown_08592B54,
-};
-
-const struct SpriteTemplate gUnknown_08592B7C =
-{
- .tileTag = ANIM_TAG_SPARKLE_2,
- .paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810130C,
-};
-
-const struct SpriteTemplate gUnknown_08592B94 =
-{
- .tileTag = ANIM_TAG_SPARKLE_2,
- .paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810135C,
-};
-
-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,
-};
-
-const struct SpriteTemplate gUnknown_08592BFC =
-{
- .tileTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
- .paletteTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592BF4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101440,
-};
-
-const union AnimCmd gUnknown_08592C14[] =
-{
- ANIMCMD_FRAME(0, 40),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592C1C[] =
-{
- gUnknown_08592C14,
-};
-
-const union AffineAnimCmd gUnknown_08592C20[] =
-{
- AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592C20_2[] =
-{
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
- AFFINEANIMCMD_LOOP(10),
-};
-
-const union AffineAnimCmd gUnknown_08592C50[] =
-{
- AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592C50_2[] =
-{
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
- AFFINEANIMCMD_LOOP(10),
-};
-
-const union AffineAnimCmd *const gUnknown_08592C80[] =
-{
- gUnknown_08592C20,
- gUnknown_08592C50,
-};
-
-const struct SpriteTemplate gUnknown_08592C88 =
-{
- .tileTag = ANIM_TAG_LETTER_Z,
- .paletteTag = ANIM_TAG_LETTER_Z,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_08592C1C,
- .images = NULL,
- .affineAnims = gUnknown_08592C80,
- .callback = sub_81014F4,
-};
-
-const struct SpriteTemplate gUnknown_08592CA0 =
-{
- .tileTag = ANIM_TAG_LOCK_ON,
- .paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81015AC,
-};
-
-const struct SpriteTemplate gUnknown_08592CB8 =
-{
- .tileTag = ANIM_TAG_LOCK_ON,
- .paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101898,
-};
-
-const s8 gUnknown_08592CD0[][2] =
-{
- { 64, 64},
- { 0, -64},
- {-64, 64},
- { 32, -32},
-};
-
-const struct SpriteTemplate gUnknown_08592CD8 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101940,
-};
-
-const struct SpriteTemplate gUnknown_08592CF0 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101B90,
-};
-
-const union AnimCmd gUnknown_08592D08[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592D1C[] =
-{
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592D24[] =
-{
- gUnknown_08592D08,
- gUnknown_08592D1C,
-};
-
-const struct SpriteTemplate gUnknown_08592D2C =
-{
- .tileTag = ANIM_TAG_SLASH,
- .paletteTag = ANIM_TAG_SLASH,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101F40,
-};
-
-const struct SpriteTemplate gUnknown_08592D44 =
-{
- .tileTag = ANIM_TAG_SLASH_2,
- .paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FA8,
-};
-
-const struct SpriteTemplate gUnknown_08592D5C =
-{
- .tileTag = ANIM_TAG_SLASH_2,
- .paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FF0,
-};
-
-const union AnimCmd gUnknown_08592D74[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(8, 12),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(24, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592D88[] =
-{
- gUnknown_08592D74,
-};
-
-const struct SpriteTemplate gUnknown_08592D8C =
-{
- .tileTag = ANIM_TAG_FOCUS_ENERGY,
- .paletteTag = ANIM_TAG_FOCUS_ENERGY,
- .oam = &gUnknown_08524954,
- .anims = gUnknown_08592D88,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81020D8,
-};
-
-const union AnimCmd gUnknown_08592DA4[] =
-{
- 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 gUnknown_08592DE0[] =
-{
- gUnknown_08592DA4,
-};
-
-const struct SpriteTemplate gUnknown_08592DE4 =
-{
- .tileTag = ANIM_TAG_SPHERE_TO_CUBE,
- .paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592DE0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810217C,
-};
-
-const struct SpriteTemplate gUnknown_08592DFC =
-{
- .tileTag = ANIM_TAG_BLACK_BALL,
- .paletteTag = ANIM_TAG_BLACK_BALL,
- .oam = &gUnknown_08524904,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const union AnimCmd gUnknown_08592E14[] =
-{
- 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 gUnknown_08592E2C[] =
-{
- gUnknown_08592E14,
-};
-
-const struct SpriteTemplate gUnknown_08592E30 =
-{
- .tileTag = ANIM_TAG_GRAY_SMOKE,
- .paletteTag = ANIM_TAG_GRAY_SMOKE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592E2C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const union AnimCmd gUnknown_08592E48[] =
-{
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592E5C[] =
-{
- gUnknown_08592E48,
-};
-
-const union AffineAnimCmd gUnknown_08592E60[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08592E70[] =
-{
- gUnknown_08592E60,
-};
-
-const struct SpriteTemplate gUnknown_08592E74 =
-{
- .tileTag = ANIM_TAG_CONVERSION,
- .paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592E5C,
- .images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_8102268,
-};
-
-const union AnimCmd gUnknown_08592E8C[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592EA0[] =
-{
- gUnknown_08592E8C,
-};
-
-const struct SpriteTemplate gUnknown_08592EA4 =
-{
- .tileTag = ANIM_TAG_CONVERSION,
- .paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592EA0,
- .images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_810234C,
-};
-
-const struct SpriteTemplate gUnknown_08592EBC =
-{
- .tileTag = ANIM_TAG_MOON,
- .paletteTag = ANIM_TAG_MOON,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81024E0,
-};
-
-const union AnimCmd gUnknown_08592ED4[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(4, 8),
- ANIMCMD_FRAME(8, 8),
- ANIMCMD_FRAME(12, 8),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592EE8[] =
-{
- gUnknown_08592ED4,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
-{
- .tileTag = ANIM_TAG_GREEN_SPARKLE,
- .paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592EE8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102540,
-};
-
-const union AnimCmd gUnknown_08592F04[] =
-{
- 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 gUnknown_08592F28[] =
-{
- gUnknown_08592F04,
-};
-
-const struct SpriteTemplate gUnknown_08592F2C =
-{
- .tileTag = ANIM_TAG_BLUE_STAR,
- .paletteTag = ANIM_TAG_BLUE_STAR,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F28,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const struct SpriteTemplate gUnknown_08592F44 =
-{
- .tileTag = ANIM_TAG_HORN_HIT,
- .paletteTag = ANIM_TAG_HORN_HIT,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102844,
-};
-
-const union AnimCmd gUnknown_08592F5C[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592F70[] =
-{
- gUnknown_08592F5C,
-};
-
-const struct SpriteTemplate gUnknown_08592F74 =
-{
- .tileTag = ANIM_TAG_FANG_ATTACK,
- .paletteTag = ANIM_TAG_FANG_ATTACK,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F70,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102BCC,
-};
-
-const union AnimCmd gUnknown_08592F8C[] =
-{
- ANIMCMD_FRAME(0, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592F94[] =
-{
- ANIMCMD_FRAME(4, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592F9C[] =
-{
- ANIMCMD_FRAME(8, 41),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FA4[] =
-{
- ANIMCMD_FRAME(12, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FAC[] =
-{
- ANIMCMD_FRAME(16, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FB4[] =
-{
- ANIMCMD_FRAME(20, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FBC[] =
-{
- ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FC4[] =
-{
- ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592FCC[] =
-{
- gUnknown_08592F8C,
- gUnknown_08592F94,
- gUnknown_08592F9C,
- gUnknown_08592FA4,
- gUnknown_08592FAC,
- gUnknown_08592FB4,
- gUnknown_08592FBC,
- gUnknown_08592FC4,
-};
-
-const union AffineAnimCmd gUnknown_08592FEC[] =
-{
- AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
- AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08593004[] =
-{
- gUnknown_08592FEC,
-};
-
-const struct SpriteTemplate gUnknown_08593008 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102CD4,
-};
-
-const u16 gUnknown_08593020[][6] =
-{
- {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
- {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
- {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
- {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
-};
-
-const struct SpriteTemplate gUnknown_08593050 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102EB0,
-};
-
-const struct SpriteTemplate gUnknown_08593068 =
-{
- .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
- .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102FB8,
-};
-
-const union AffineAnimCmd gUnknown_08593080[] =
-{
- AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
- AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593098[] =
-{
- gUnknown_08593080,
-};
-
-const struct SpriteTemplate gUnknown_0859309C =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593098,
- .callback = sub_8103028,
-};
-
-const union AnimCmd gUnknown_085930B4[] =
-{
- 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 gUnknown_085930C8[] =
-{
- 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 gUnknown_085930DC[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085930F0[] =
-{
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593104[] =
-{
- gUnknown_085930B4,
- gUnknown_085930DC,
- gUnknown_085930C8,
- gUnknown_085930F0,
-};
-
-const struct SpriteTemplate gUnknown_08593114 =
-{
- .tileTag = ANIM_TAG_THOUGHT_BUBBLE,
- .paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593104,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103164,
-};
-
-const union AffineAnimCmd gUnknown_0859312C[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593144[] =
-{
- 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 gUnknown_08593144_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 gUnknown_085931B4[] =
-{
- gUnknown_0859312C,
- gUnknown_08593144,
-};
-
-const struct SpriteTemplate gUnknown_085931BC =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_085249D4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103208,
-};
-
-const struct SpriteTemplate gUnknown_085931D4 =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103284,
-};
-
-const union AnimCmd gUnknown_085931EC[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085931F4[] =
-{
- ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085931FC[] =
-{
- 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 gUnknown_0859321C[] =
-{
- 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 gUnknown_0859323C[] =
-{
- gUnknown_085931EC,
- gUnknown_085931F4,
- gUnknown_085931FC,
- gUnknown_0859321C,
-};
-
-const struct SpriteTemplate gUnknown_0859324C =
-{
- .tileTag = ANIM_TAG_FINGER_2,
- .paletteTag = ANIM_TAG_FINGER_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859323C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103390,
-};
diff --git a/src/event_data.c b/src/event_data.c
index 8a998fe26..f6a1cde78 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "event_data.h"
+#include "pokedex.h"
#define TEMP_FLAGS_SIZE 0x4
#define TEMP_UPPER_FLAGS_SIZE 0x8
@@ -67,7 +68,7 @@ void EnableNationalPokedex(void)
gSaveBlock2Ptr->pokedex.nationalMagic = 0xDA;
*nationalDexVar = 0x302;
FlagSet(FLAG_SYS_NATIONAL_DEX);
- gSaveBlock2Ptr->pokedex.unknown1 = 1;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_NATIONAL;
gSaveBlock2Ptr->pokedex.order = 0;
sub_80BB358();
}
diff --git a/src/fire.c b/src/fire.c
index c054f154e..44ae9d320 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -726,7 +726,7 @@ static void AnimFireCross(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A653C; //TranslateSpriteOverDuration
+ sprite->callback = TranslateSpriteOverDuration;
}
static void sub_81093A4(struct Sprite *sprite)
diff --git a/src/item.c b/src/item.c
index 6a1f1955a..71c2dc0f7 100644
--- a/src/item.c
+++ b/src/item.c
@@ -543,7 +543,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count)
VarSet(VAR_0x40ED, itemId);
}
- var = sub_81ABB2C(pocket);
+ var = GetItemListPosition(pocket);
if (itemPocket->capacity > var
&& itemPocket->itemSlots[var].itemId == itemId)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index 40d09a8a1..32c42ac31 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -57,7 +57,7 @@ bool8 load_bag_menu_graphics(void);
void setup_bag_menu_textboxes(void);
void allocate_bag_item_list_buffers(void);
void load_bag_item_list_buffers(u8);
-void bag_menu_print_pocket_names(u8*, u8*);
+void bag_menu_print_pocket_names(const u8*, const u8*);
void bag_menu_copy_pocket_name_to_window(u32);
void bag_menu_draw_pocket_indicator_square(u8, u8);
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
@@ -69,7 +69,6 @@ void Task_BagMenu(u8);
void get_name(s8*, u16);
u16 ItemIdToBattleMoveId(u16);
u16 BagGetItemIdByPocketPosition(u8, u16);
-void AddBagItemIconSprite(u16, u8);
void bag_menu_print_description_box_text(int);
void bag_menu_print_cursor(u8, u8);
void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
@@ -121,7 +120,7 @@ void bag_menu_leave_maybe_3(void);
void bag_menu_leave_maybe_2(void);
void bag_menu_leave_maybe(void);
void sub_81ABA6C(void);
-void sub_81ABAC4(void);
+static void SetPocketListPositions(void);
void sub_81ABAE0(void);
u8 sub_81AB1F0(u8);
void sub_81AC23C(u8);
@@ -151,7 +150,7 @@ void sub_81AD6FC(u8 taskId);
// .rodata
-const struct BgTemplate gUnknown_08613F90[3] =
+static const struct BgTemplate sBgTemplates_ItemMenu[3] =
{
{
.bg = 0,
@@ -182,7 +181,7 @@ const struct BgTemplate gUnknown_08613F90[3] =
},
};
-const struct ListMenuTemplate gUnknown_08613F9C =
+static const struct ListMenuTemplate sItemListMenu =
{
.items = NULL,
.moveCursorFunc = bag_menu_change_item_callback,
@@ -258,7 +257,8 @@ const struct ScrollArrowsTemplate gUnknown_08614094 = {SCROLL_ARROW_LEFT, 0x1C,
const u8 gUnknown_086140A4[] = INCBIN_U8("graphics/interface/select_button.4bpp");
-const u8 gUnknown_08614164[][3] = {
+static const u8 sFontColorTable[][3] = {
+// bgColor, textColor, shadowColor
{0, 1, 3},
{0, 1, 4},
{0, 3, 6},
@@ -268,7 +268,7 @@ const u8 gUnknown_08614164[][3] = {
const struct WindowTemplate gUnknown_08614174[] =
{
- {
+ { // Item names
.bg = 0,
.tilemapLeft = 14,
.tilemapTop = 2,
@@ -277,7 +277,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x27,
},
- {
+ { // Description
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
@@ -286,7 +286,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x117,
},
- {
+ { // Pocket name
.bg = 0,
.tilemapLeft = 4,
.tilemapTop = 1,
@@ -295,7 +295,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x1A1,
},
- {
+ { // TM/HM info icons
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 13,
@@ -304,7 +304,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 12,
.baseBlock = 0x16B,
},
- {
+ {// TM/HM info
.bg = 0,
.tilemapLeft = 7,
.tilemapTop = 13,
@@ -313,7 +313,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 12,
.baseBlock = 0x189,
},
- {
+ { // Field message box
.bg = 1,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -440,16 +440,14 @@ struct TempWallyStruct {
EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0;
EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0};
-EWRAM_DATA struct ListBuffer1 *gUnknown_0203CE74 = 0;
-EWRAM_DATA struct ListBuffer2 *gUnknown_0203CE78 = 0;
+static EWRAM_DATA struct ListBuffer1 *sListBuffer1 = 0;
+static EWRAM_DATA struct ListBuffer2 *sListBuffer2 = 0;
EWRAM_DATA u16 gSpecialVar_ItemId = 0;
-EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
+static EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
-extern u8 *gPocketNamesStringsTable[];
-extern struct ListMenuTemplate gUnknown_08613F9C;
+extern u8 *const gPocketNamesStringsTable[];
extern const u8 gMoveNames[][0xD];
extern u8* gReturnToXStringsTable[];
-extern u32 gUnknown_0203CE5E[];
extern const u8 EventScript_2736B3[];
extern const u16 gUnknown_0860F074[];
@@ -531,12 +529,12 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)
temp = gUnknown_0203CE58.location - (POCKETS_COUNT - 1);
if (temp <= 1)
gUnknown_0203CE54->unk81B = 1;
- gUnknown_0203CE54->unk0 = 0;
+ gUnknown_0203CE54->mainCallback2 = 0;
gUnknown_0203CE54->unk81A = 0xFF;
gUnknown_0203CE54->unk81E = -1;
gUnknown_0203CE54->unk81F = -1;
- memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804));
- memset(gUnknown_0203CE54->unk810, 0xFF, 10);
+ memset(gUnknown_0203CE54->spriteId, 0xFF, sizeof(gUnknown_0203CE54->spriteId));
+ memset(gUnknown_0203CE54->windowPointers, 0xFF, 10);
SetMainCallback2(CB2_Bag);
}
}
@@ -615,7 +613,7 @@ bool8 setup_bag_menu(void)
break;
case 10:
sub_81ABA6C();
- sub_81ABAC4();
+ SetPocketListPositions();
sub_81ABAE0();
gMain.state++;
break;
@@ -677,10 +675,10 @@ bool8 setup_bag_menu(void)
void bag_menu_init_bgs(void)
{
ResetVramOamAndBgCntRegs();
- memset(gUnknown_0203CE54->unk4, 0, 0x800);
+ memset(gUnknown_0203CE54->tilemapBuffer, 0, 0x800);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_08613F90, 3);
- SetBgTilemapBuffer(2, gUnknown_0203CE54->unk4);
+ InitBgsFromTemplates(0, sBgTemplates_ItemMenu, 3);
+ SetBgTilemapBuffer(2, gUnknown_0203CE54->tilemapBuffer);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -702,7 +700,7 @@ bool8 load_bag_menu_graphics(void)
case 1:
if (free_temp_tile_data_buffers_if_possible() != TRUE)
{
- LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->unk4);
+ LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->tilemapBuffer);
gUnknown_0203CE54->unk834++;
}
break;
@@ -744,8 +742,8 @@ u8 sub_81AB1F0(u8 a)
void allocate_bag_item_list_buffers(void)
{
- gUnknown_0203CE74 = Alloc(sizeof(struct ListBuffer1));
- gUnknown_0203CE78 = Alloc(sizeof(struct ListBuffer2));
+ sListBuffer1 = Alloc(sizeof(struct ListBuffer1));
+ sListBuffer2 = Alloc(sizeof(struct ListBuffer2));
}
void load_bag_item_list_buffers(u8 pocketId)
@@ -754,34 +752,34 @@ void load_bag_item_list_buffers(u8 pocketId)
struct BagPocket *pocket = &gBagPockets[pocketId];
struct ListMenuItem *subBuffer;
- if (!gUnknown_0203CE54->unk81B_2)
+ if (!gUnknown_0203CE54->hideCloseBagText)
{
- for (i = 0; i < gUnknown_0203CE54->unk829[pocketId] - 1; i++)
+ for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId] - 1; i++)
{
- get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = i;
}
- StringCopy(gUnknown_0203CE78->name[i], gText_CloseBag);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ StringCopy(sListBuffer2->name[i], gText_CloseBag);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = -2;
}
else
{
- for (i = 0; i < gUnknown_0203CE54->unk829[pocketId]; i++)
+ for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId]; i++)
{
- get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = i;
}
}
- gMultiuseListMenuTemplate = gUnknown_08613F9C;
- gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->unk829[pocketId];
- gMultiuseListMenuTemplate.items = gUnknown_0203CE74->subBuffers;
- gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->unk82E[pocketId];
+ gMultiuseListMenuTemplate = sItemListMenu;
+ gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->numItemStacks[pocketId];
+ gMultiuseListMenuTemplate.items = sListBuffer1->subBuffers;
+ gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->numShownItems[pocketId];
}
void get_name(s8 *dest, u16 itemId)
@@ -907,7 +905,7 @@ void bag_menu_print_cursor(u8 a, u8 b)
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void)
{
if (gUnknown_0203CE54->unk81E == 0xFF)
- gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->unk82E[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
+ gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->numShownItems[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
}
void sub_81AB824(void)
@@ -937,8 +935,8 @@ void sub_81AB89C(void)
void free_bag_item_list_buffers(void)
{
- Free(gUnknown_0203CE78);
- Free(gUnknown_0203CE74);
+ Free(sListBuffer2);
+ Free(sListBuffer1);
FreeAllWindowBuffers();
Free(gUnknown_0203CE54);
}
@@ -955,8 +953,8 @@ void task_close_bag_menu_2(u8 taskId)
if (!gPaletteFade.active)
{
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
- if (gUnknown_0203CE54->unk0 != 0)
- SetMainCallback2(gUnknown_0203CE54->unk0);
+ if (gUnknown_0203CE54->mainCallback2 != 0)
+ SetMainCallback2(gUnknown_0203CE54->mainCallback2);
else
SetMainCallback2(gUnknown_0203CE58.bagCallback);
sub_81AB824();
@@ -981,15 +979,17 @@ void sub_81AB9A8(u8 pocketId)
CompactItemsInBagPocket(pocket);
break;
}
- gUnknown_0203CE54->unk829[pocketId] = 0;
+ gUnknown_0203CE54->numItemStacks[pocketId] = 0;
for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++)
- gUnknown_0203CE54->unk829[pocketId]++;
- if (!gUnknown_0203CE54->unk81B_2)
- gUnknown_0203CE54->unk829[pocketId]++;
- if (gUnknown_0203CE54->unk829[pocketId] > 8)
- gUnknown_0203CE54->unk82E[pocketId] = 8;
+ gUnknown_0203CE54->numItemStacks[pocketId]++;
+
+ if (!gUnknown_0203CE54->hideCloseBagText)
+ gUnknown_0203CE54->numItemStacks[pocketId]++;
+
+ if (gUnknown_0203CE54->numItemStacks[pocketId] > 8)
+ gUnknown_0203CE54->numShownItems[pocketId] = 8;
else
- gUnknown_0203CE54->unk82E[pocketId] = gUnknown_0203CE54->unk829[pocketId];
+ gUnknown_0203CE54->numShownItems[pocketId] = gUnknown_0203CE54->numItemStacks[pocketId];
}
void sub_81ABA6C(void)
@@ -999,26 +999,26 @@ void sub_81ABA6C(void)
sub_81AB9A8(i);
}
-void sub_81ABA88(u8 a)
+void SetInitialScrollAndCursorPositions(u8 pocketId)
{
- sub_812225C(&gUnknown_0203CE58.scrollPosition[a], &gUnknown_0203CE58.cursorPosition[a], gUnknown_0203CE54->unk82E[a], gUnknown_0203CE54->unk829[a]);
+ sub_812225C(&gUnknown_0203CE58.scrollPosition[pocketId], &gUnknown_0203CE58.cursorPosition[pocketId], gUnknown_0203CE54->numShownItems[pocketId], gUnknown_0203CE54->numItemStacks[pocketId]);
}
-void sub_81ABAC4(void)
+static void SetPocketListPositions(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
- sub_81ABA88(i);
+ SetInitialScrollAndCursorPositions(i);
}
void sub_81ABAE0(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
- sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->unk82E[i], gUnknown_0203CE54->unk829[i], 8);
+ sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->numShownItems[i], gUnknown_0203CE54->numItemStacks[i], 8);
}
-u8 sub_81ABB2C(u8 pocketId)
+u8 GetItemListPosition(u8 pocketId)
{
return gUnknown_0203CE58.scrollPosition[pocketId] + gUnknown_0203CE58.cursorPosition[pocketId];
}
@@ -1041,7 +1041,7 @@ void bag_menu_inits_lists_menu(u8 taskId)
bag_menu_RemoveBagItem_message_window(4);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
@@ -1092,7 +1092,7 @@ void Task_BagMenu(u8 taskId)
if (sub_81AC2C0() == 1)
{
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
+ if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - 1)
{
PlaySE(SE_SELECT);
bag_menu_swap_items(taskId);
@@ -1102,13 +1102,13 @@ void Task_BagMenu(u8 taskId)
}
else
{
- int r4 = ListMenuHandleInputGetItemId(data[0]);
+ int listPosition = ListMenuHandleInputGetItemId(data[0]);
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- switch (r4)
+ switch (listPosition)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
if (gUnknown_0203CE58.location == 5)
{
PlaySE(SE_HAZURE);
@@ -1118,13 +1118,13 @@ void Task_BagMenu(u8 taskId)
gSpecialVar_ItemId = select;
gTasks[taskId].func = unknown_ItemMenu_Confirm;
break;
- default:
+ default: // A_BUTTON
PlaySE(SE_SELECT);
sub_81AB824();
bag_menu_print_cursor_(data[0], 2);
- data[1] = r4;
- data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
- gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
+ data[1] = listPosition;
+ data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition);
gUnknown_08614054[gUnknown_0203CE58.location](taskId);
break;
}
@@ -1186,7 +1186,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
ClearWindowTilemap(1);
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
schedule_bg_copy_tilemap_to_vram(0);
- gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = TRUE;
+ gSprites[gUnknown_0203CE54->spriteId[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = TRUE;
sub_81AB824();
}
pocketId = gUnknown_0203CE58.pocket;
@@ -1744,7 +1744,7 @@ void Task_ActuallyToss(u8 taskId)
RemoveBagItem(gSpecialVar_ItemId, data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
@@ -1782,7 +1782,7 @@ void ItemMenu_Give(u8 taskId)
bag_menu_print_there_is_no_pokemon(taskId);
else
{
- gUnknown_0203CE54->unk0 = sub_81B7F60;
+ gUnknown_0203CE54->mainCallback2 = sub_81B7F60;
unknown_ItemMenu_Confirm(taskId);
}
}
@@ -1815,7 +1815,7 @@ void sub_81AD350(u8 taskId)
void ItemMenu_CheckTag(u8 taskId)
{
- gUnknown_0203CE54->unk0 = DoBerryTagScreen;
+ gUnknown_0203CE54->mainCallback2 = DoBerryTagScreen;
unknown_ItemMenu_Confirm(taskId);
}
@@ -2012,7 +2012,7 @@ void sub_81AD8C8(u8 taskId)
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
bag_menu_print_cursor_(data[0], 2);
@@ -2235,7 +2235,7 @@ void bag_menu_leave_maybe(void)
SetMainCallback2(CB2_ReturnToField);
}
-void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
+void bag_menu_print_pocket_names(const u8 *pocketName1, const u8 *pocketName2)
{
struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0};
u16 windowId;
@@ -2252,7 +2252,7 @@ void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40);
bag_menu_print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1);
}
- CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gUnknown_0203CE54->unk844, 0x400);
+ CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gUnknown_0203CE54->pocketNameBuffer, 0x400);
RemoveWindow(windowId);
}
@@ -2263,7 +2263,7 @@ void bag_menu_copy_pocket_name_to_window(u32 a)
int b;
if (a > 8)
a = 8;
- r4 = &gUnknown_0203CE54->unk844;
+ r4 = &gUnknown_0203CE54->pocketNameBuffer;
windowAttribute = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA);
CpuCopy32(r4[0][a], windowAttribute, 0x100);
b = a + 16;
@@ -2292,17 +2292,17 @@ void setup_bag_menu_textboxes(void)
void bag_menu_print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h)
{
- AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, gUnknown_08614164[h], speed, str);
+ AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[h], speed, str);
}
u8 sub_81AE124(u8 a)
{
- return gUnknown_0203CE54->unk810[a];
+ return gUnknown_0203CE54->windowPointers[a];
}
u8 bag_menu_add_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr == 0xFF)
{
*ptr = AddWindow(&gUnknown_086141AC[a]);
@@ -2314,7 +2314,7 @@ u8 bag_menu_add_window(u8 a)
void bag_menu_remove_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr != 0xFF)
{
sub_8198070(*ptr, 0);
@@ -2327,7 +2327,7 @@ void bag_menu_remove_window(u8 a)
u8 AddItemMessageWindow(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr == 0xFF)
*ptr = AddWindow(&gUnknown_086141AC[a]);
return *ptr;
@@ -2335,7 +2335,7 @@ u8 AddItemMessageWindow(u8 a)
void bag_menu_RemoveBagItem_message_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr != 0xFF)
{
sub_8197DF8(*ptr, 0);
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index 85b42b9b3..894574ec9 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -1,14 +1,14 @@
#include "global.h"
-#include "sprite.h"
+#include "berry.h"
#include "decompress.h"
+#include "graphics.h"
+#include "item.h"
#include "item_menu.h"
#include "item_icon.h"
#include "item_menu_icons.h"
-#include "window.h"
#include "menu_helpers.h"
-#include "berry.h"
-#include "graphics.h"
-#include "item.h"
+#include "sprite.h"
+#include "window.h"
#include "constants/items.h"
struct CompressedTilesPal
@@ -199,7 +199,7 @@ static const struct SpritePalette gUnknown_0857FBA8 =
gUnknown_0857F564, 101
};
-static const struct SpriteTemplate gUnknown_0857FBB0 =
+static const struct SpriteTemplate gSpriteTemplate_RotatingBall =
{
.tileTag = 101,
.paletteTag = 101,
@@ -409,7 +409,7 @@ static const struct SpriteTemplate gUnknown_0857FE10 =
// code
void RemoveBagSprite(u8 id)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[id];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[id];
if (*spriteId != 0xFF)
{
FreeSpriteTilesByTag(id + 100);
@@ -422,14 +422,14 @@ void RemoveBagSprite(u8 id)
void AddBagVisualSprite(u8 bagPocketId)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[0];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[0];
*spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0);
SetBagVisualPocketId(bagPocketId, FALSE);
}
void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]];
if (isSwitchingPockets)
{
sprite->pos2.y = -5;
@@ -458,7 +458,7 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
void ShakeBagVisual(void)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, 1);
@@ -477,10 +477,10 @@ static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[1];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[1];
LoadSpriteSheet(&gUnknown_0857FBA0);
LoadSpritePalette(&gUnknown_0857FBA8);
- *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
+ *spriteId = CreateSprite(&gSpriteTemplate_RotatingBall, 16, 16, 0);
gSprites[*spriteId].data[0] = rotationDirection;
}
@@ -515,7 +515,7 @@ static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
void AddBagItemIconSprite(u16 itemId, u8 id)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[id + 2];
if (*spriteId == 0xFF)
{
u8 iconSpriteId;
@@ -539,17 +539,17 @@ void RemoveBagItemIconSprite(u8 id)
void sub_80D4FAC(void)
{
- sub_8122344(&gUnknown_0203CE54->unk804[4], 8);
+ sub_8122344(&gUnknown_0203CE54->spriteId[4], 8);
}
void sub_80D4FC8(u8 arg0)
{
- sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0);
+ sub_81223FC(&gUnknown_0203CE54->spriteId[4], 8, arg0);
}
void sub_80D4FEC(u8 arg0)
{
- sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16);
+ sub_8122448(&gUnknown_0203CE54->spriteId[4], 136, 120, (arg0 + 1) * 16);
}
static void sub_80D5018(void *mem0, void *mem1)
diff --git a/src/item_use.c b/src/item_use.c
index b8b487bca..f82071a17 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -57,7 +57,6 @@ extern void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*);
extern void sub_81C5924(void);
extern void sub_81C59BC(void);
extern void sub_81AB9A8(u8);
-extern void sub_81ABA88(u8);
extern void StartEscapeRopeFieldEffect(void);
extern u8* sub_806CF78(u16);
extern void sub_81B89F0(void);
@@ -128,7 +127,7 @@ void SetUpItemUseCallback(u8 taskId)
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (!InBattlePyramid())
{
- gUnknown_0203CE54->unk0 = gUnknown_085920D8[type];
+ gUnknown_0203CE54->mainCallback2 = gUnknown_085920D8[type];
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -212,7 +211,7 @@ void sub_80FD254(void)
void ItemUseOutOfBattle_Mail(u8 taskId)
{
- gUnknown_0203CE54->unk0 = sub_80FD254;
+ gUnknown_0203CE54->mainCallback2 = sub_80FD254;
unknown_ItemMenu_Confirm(taskId);
}
@@ -608,7 +607,7 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
}
else if (gTasks[taskId].data[3] != TRUE)
{
- gUnknown_0203CE54->unk0 = sub_80FDBEC;
+ gUnknown_0203CE54->mainCallback2 = sub_80FDBEC;
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -670,7 +669,7 @@ void sub_80FDD10(u8 taskId)
{
gUnknown_0203A0F4 = sub_80FDD74;
gFieldCallback = MapPostLoadHook_UseItem;
- gUnknown_0203CE54->unk0 = CB2_ReturnToField;
+ gUnknown_0203CE54->mainCallback2 = CB2_ReturnToField;
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -812,7 +811,7 @@ void sub_80FE058(void)
if (!InBattlePyramid())
{
sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId));
- sub_81ABA88(ItemId_GetPocket(gSpecialVar_ItemId));
+ SetInitialScrollAndCursorPositions(ItemId_GetPocket(gSpecialVar_ItemId));
}
else
{
@@ -993,7 +992,7 @@ void sub_80FE54C(u8 taskId)
{
if (!InBattlePyramid())
{
- gUnknown_0203CE54->unk0 = sub_81B89F0;
+ gUnknown_0203CE54->mainCallback2 = sub_81B89F0;
unknown_ItemMenu_Confirm(taskId);
}
else
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 110ec068e..930f1f35b 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -62,14 +62,14 @@ static const u8 * const sGiddyAdjectives[] = {
};
static const u8 * const sGiddyQuestions[] = {
- gUnknown_08294313,
- gUnknown_08294359,
- gUnknown_08294398,
- gUnknown_082943DA,
- gUnknown_0829441C,
- gUnknown_08294460,
- gUnknown_082944A0,
- gUnknown_082944D5
+ gMauvilleManText_ISoWantToGoOnAVacation,
+ gMauvilleManText_IBoughtCrayonsWith120Colors,
+ gMauvilleManText_WouldntItBeNiceIfWeCouldFloat,
+ gMauvilleManText_WhenYouWriteOnASandyBeach,
+ gMauvilleManText_WhatsTheBottomOfTheSeaLike,
+ gMauvilleManText_WhenYouSeeTheSettingSunDoesIt,
+ gMauvilleManText_LyingBackInTheGreenGrass,
+ gMauvilleManText_SecretBasesAreSoWonderful
};
static void SetupBard(void)
diff --git a/src/pokeball.c b/src/pokeball.c
index ad839e6af..82d2f2cea 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -426,7 +426,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
sprite->pos2.y = 0;
sprite->data[5] = 0;
ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler));
- LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId);
sprite->sBattler = opponentBattler;
sprite->data[7] = noOfShakes;
@@ -737,7 +737,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
- LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
@@ -985,9 +985,9 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
#undef sBattler
-static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
+static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
{
- return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE);
+ return AnimateBallOpenParticles(x, y, kindOfStars, d, BALL_POKE);
}
static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2)
@@ -1036,7 +1036,7 @@ static void sub_8076524(struct Sprite *sprite)
r5 = 0;
StartSpriteAnim(sprite, 1);
- LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
+ AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = sub_80765E0;
gSprites[r7].invisible = FALSE;
@@ -1129,7 +1129,7 @@ static void sub_80767D4(struct Sprite *sprite)
r6 = 0;
StartSpriteAnim(sprite, 1);
- LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
+ AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5);
sprite->callback = sub_807687C;
StartSpriteAffineAnim(&gSprites[r7], 2);
diff --git a/src/pokedex.c b/src/pokedex.c
index e6198fd4f..ef8905bb6 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -75,9 +75,6 @@ struct UnknownStruct4
u8 unk9;
};
-#define HOENN_DEX_COUNT 202
-#define NATIONAL_DEX_COUNT 386
-
extern struct MusicPlayerInfo gMPlayInfo_BGM;
struct PokedexListItem
@@ -132,12 +129,6 @@ struct PokedexView
enum
{
- DEX_MODE_HOENN,
- DEX_MODE_NATIONAL
-};
-
-enum
-{
AREA_SCREEN,
CRY_SCREEN,
SIZE_SCREEN,
@@ -176,7 +167,7 @@ u16 sub_80BD69C(u16, u16);
void sub_80BD8D0(void);
bool8 sub_80BD930(void);
u8 sub_80BDA40(void);
-u16 sub_80BDA8C(u16);
+u16 GetPokemonSpriteToDisplay(u16);
u32 sub_80BDACC(u16, s16, s16);
static void CreateInterfaceSprites(u8);
void sub_80BE470(struct Sprite *sprite);
@@ -1237,7 +1228,7 @@ void ResetPokedex(void)
gUnknown_02039B50 = 0;
gUnknown_02039B52 = 64;
gUnknown_030060B0 = 0;
- gSaveBlock2Ptr->pokedex.unknown1 = 0;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
gSaveBlock2Ptr->pokedex.order = 0;
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
gSaveBlock2Ptr->pokedex.unknown2 = 0;
@@ -1289,7 +1280,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
pokedexView->unk618 = 0;
pokedexView->seenCount = 0;
pokedexView->ownCount = 0;
- for (i = 0; i <= 3; i++)
+ for (i = 0; i < 4; i++)
pokedexView->unk61E[i] |= 0xFFFF;
pokedexView->unk628 = 0;
pokedexView->unk62A = 0;
@@ -1348,7 +1339,7 @@ void CB2_Pokedex(void)
sPokedexView = AllocZeroed(sizeof(struct PokedexView));
ResetPokedexView(sPokedexView);
CreateTask(sub_80BB78C, 0);
- sPokedexView->dexMode = gSaveBlock2Ptr->pokedex.unknown1;
+ sPokedexView->dexMode = gSaveBlock2Ptr->pokedex.mode;
if (!IsNationalPokedexEnabled())
sPokedexView->dexMode = DEX_MODE_HOENN;
sPokedexView->dexOrder = gSaveBlock2Ptr->pokedex.order;
@@ -1571,9 +1562,9 @@ void sub_80BBDE8(u8 taskId)
{
if (!gPaletteFade.active)
{
- gSaveBlock2Ptr->pokedex.unknown1 = sPokedexView->dexMode;
+ gSaveBlock2Ptr->pokedex.mode = sPokedexView->dexMode;
if (!IsNationalPokedexEnabled())
- gSaveBlock2Ptr->pokedex.unknown1 = DEX_MODE_HOENN;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
gSaveBlock2Ptr->pokedex.order = sPokedexView->dexOrder;
sub_80BDA40();
sub_80BC890();
@@ -1898,6 +1889,9 @@ void sub_80BC890(void)
void sub_80BC8D4(u8 dexMode, u8 sortMode)
{
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
+#define temp_dexCount vars[0]
+#define temp_isHoennDex vars[1]
+#define temp_dexNum vars[2]
s16 i;
sPokedexView->pokemonListCount = 0;
@@ -1906,19 +1900,19 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
{
default:
case DEX_MODE_HOENN:
- vars[0] = HOENN_DEX_COUNT;
- vars[1] = 1;
+ temp_dexCount = HOENN_DEX_COUNT;
+ temp_isHoennDex = TRUE;
break;
case DEX_MODE_NATIONAL:
if (IsNationalPokedexEnabled())
{
- vars[0] = NATIONAL_DEX_COUNT;
- vars[1] = 0;
+ temp_dexCount = NATIONAL_DEX_COUNT;
+ temp_isHoennDex = FALSE;
}
else
{
- vars[0] = HOENN_DEX_COUNT;
- vars[1] = 1;
+ temp_dexCount = HOENN_DEX_COUNT;
+ temp_isHoennDex = TRUE;
}
break;
}
@@ -1926,14 +1920,14 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
switch (sortMode)
{
case 0:
- if (vars[1])
+ if (temp_isHoennDex)
{
- for (i = 0; i < vars[0]; i++)
+ for (i = 0; i < temp_dexCount; i++)
{
- vars[2] = HoennToNationalOrder(i + 1);
- sPokedexView->pokedexList[i].dexNum = vars[2];
- sPokedexView->pokedexList[i].seen = GetSetPokedexFlag(vars[2], 0);
- sPokedexView->pokedexList[i].owned = GetSetPokedexFlag(vars[2], 1);
+ temp_dexNum = HoennToNationalOrder(i + 1);
+ sPokedexView->pokedexList[i].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[i].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
+ sPokedexView->pokedexList[i].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[i].seen)
sPokedexView->pokemonListCount = i + 1;
}
@@ -1944,17 +1938,17 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
s16 r5;
r10 = r5 = i = 0;
- for (i = 0; i < vars[0]; i++)
+ for (i = 0; i < temp_dexCount; i++)
{
- vars[2] = i + 1;
- if (GetSetPokedexFlag(vars[2], 0))
+ temp_dexNum = i + 1;
+ if (GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
r10 = 1;
if (r10)
{
asm(""); //Needed to match for some reason
- sPokedexView->pokedexList[r5].dexNum = vars[2];
- sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(vars[2], 0);
- sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(vars[2], 1);
+ sPokedexView->pokedexList[r5].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
+ sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[r5].seen)
sPokedexView->pokemonListCount = r5 + 1;
r5++;
@@ -1965,13 +1959,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 1:
for (i = 0; i < POKEMON_SLOTS_NUMBER - 1; i++)
{
- vars[2] = gPokedexOrder_Alphabetical[i];
+ temp_dexNum = gPokedexOrder_Alphabetical[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1);
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
sPokedexView->pokemonListCount++;
}
}
@@ -1979,13 +1973,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 2:
for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
- vars[2] = gPokedexOrder_Weight[i];
+ temp_dexNum = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -1993,27 +1987,27 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 3:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- vars[2] = gPokedexOrder_Weight[i];
+ temp_dexNum = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
break;
case 4:
- for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--)
+ for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
- vars[2] = gPokedexOrder_Height[i];
+ temp_dexNum = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -2021,13 +2015,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 5:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- vars[2] = gPokedexOrder_Height[i];
+ temp_dexNum = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -2037,8 +2031,8 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{
sPokedexView->pokedexList[i].dexNum |= 0xFFFF;
- sPokedexView->pokedexList[i].seen = 0;
- sPokedexView->pokedexList[i].owned = 0;
+ sPokedexView->pokedexList[i].seen = FALSE;
+ sPokedexView->pokedexList[i].owned = FALSE;
}
}
@@ -2192,7 +2186,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
sPokedexView->unk61E[i] = 0xFFFF;
sPokedexView->selectedMonSpriteId = 0xFFFF;
- unk = sub_80BDA8C(selectedMon - 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon - 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2200,7 +2194,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
gSprites[spriteId].data[5] = -32;
}
- unk = sub_80BDA8C(selectedMon);
+ unk = GetPokemonSpriteToDisplay(selectedMon);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2208,7 +2202,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
gSprites[spriteId].data[5] = 0;
}
- unk = sub_80BDA8C(selectedMon + 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon + 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2274,7 +2268,7 @@ static void CreateNewPokemonSprite(u8 direction, u16 selectedMon)
switch (direction)
{
case 1: // up
- unk = sub_80BDA8C(selectedMon - 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon - 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2287,7 +2281,7 @@ static void CreateNewPokemonSprite(u8 direction, u16 selectedMon)
sPokedexView->unk630 = 15;
break;
case 2: // down
- unk = sub_80BDA8C(selectedMon + 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon + 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2449,12 +2443,12 @@ u8 sub_80BDA40(void)
return FALSE;
}
-u16 sub_80BDA8C(u16 a1)
+u16 GetPokemonSpriteToDisplay(u16 species)
{
- if (a1 >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[a1].dexNum == 0xFFFF)
+ if (species >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[species].dexNum == 0xFFFF)
return 0xFFFF;
- else if (sPokedexView->pokedexList[a1].seen)
- return sPokedexView->pokedexList[a1].dexNum;
+ else if (sPokedexView->pokedexList[species].seen)
+ return sPokedexView->pokedexList[species].dexNum;
else
return 0;
}
@@ -2467,7 +2461,7 @@ u32 sub_80BDACC(u16 num, s16 x, s16 y)
{
if (sPokedexView->unk61E[i] == 0xFFFF)
{
- u8 spriteId = sub_80C0E9C(num, x, y, i);
+ u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.priority = 3;
@@ -2963,7 +2957,7 @@ void sub_80BEA24(u8 taskId)
case 5:
if (gTasks[taskId].data[1] == 0)
{
- gTasks[taskId].data[4] = (u16)sub_80C0E9C(sPokedexListItem->dexNum, 0x30, 0x38, 0);
+ gTasks[taskId].data[4] = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
gMain.state++;
@@ -3251,7 +3245,7 @@ void sub_80BF250(u8 taskId)
gMain.state++;
break;
case 5:
- gTasks[taskId].data[4] = sub_80C0E9C(sPokedexListItem->dexNum, 48, 56, 0);
+ gTasks[taskId].data[4] = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
gDexCryScreenState = 0;
gMain.state++;
@@ -3459,7 +3453,7 @@ void sub_80BF82C(u8 taskId)
gMain.state++;
break;
case 6:
- spriteId = sub_80C0E9C(sPokedexListItem->dexNum, 88, 56, 1);
+ spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 2;
gSprites[spriteId].oam.priority = 0;
@@ -3790,7 +3784,7 @@ void sub_80BFE38(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 4:
- spriteId = sub_80C0E9C(dexNum, 0x30, 0x38, 0);
+ spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 48, 56, 0);
gSprites[spriteId].oam.priority = 0;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(gUnknown_030060B4);
@@ -4348,7 +4342,7 @@ u16 GetHoennPokedexCount(u8 caseID)
u16 count = 0;
u16 i;
- for (i = 0; i < 202; i++)
+ for (i = 0; i < HOENN_DEX_COUNT; i++)
{
switch (caseID)
{
@@ -4417,17 +4411,17 @@ u16 sub_80C0944(void)
for (i = 0; i < 150; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
for (i = 151; i < 248; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
for (i = 251; i < 384; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
return 1;
@@ -4643,10 +4637,10 @@ u32 sub_80C0E68(u16 a)
}
}
-u16 sub_80C0E9C(u16 num, s16 x, s16 y, u16 paletteSlot)
+u16 CreateMonSpriteFromNationalDexNumber(u16 nationalNum, s16 x, s16 y, u16 paletteSlot)
{
- num = NationalPokedexNumToSpecies(num);
- return CreateMonPicSprite_HandleDeoxys(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF);
+ nationalNum = NationalPokedexNumToSpecies(nationalNum);
+ return CreateMonPicSprite_HandleDeoxys(nationalNum, 8, sub_80C0E68(nationalNum), TRUE, x, y, paletteSlot, 0xFFFF);
}
u16 sub_80C0EF8(u16 species, s16 x, s16 y, s8 paletteSlot)
@@ -4980,10 +4974,10 @@ void sub_80C170C(u8 taskId)
sPokedexView->unk62A = 0x40;
gUnknown_02039B50 = 0;
sPokedexView->unk610 = 0;
- gSaveBlock2Ptr->pokedex.unknown1 = sub_80C2318(taskId, 5);
+ gSaveBlock2Ptr->pokedex.mode = sub_80C2318(taskId, 5);
if (!IsNationalPokedexEnabled())
- gSaveBlock2Ptr->pokedex.unknown1 = 0;
- sPokedexView->unk614 = gSaveBlock2Ptr->pokedex.unknown1;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
+ sPokedexView->unk614 = gSaveBlock2Ptr->pokedex.mode;
gSaveBlock2Ptr->pokedex.order = sub_80C2318(taskId, 4);
sPokedexView->unk618 = gSaveBlock2Ptr->pokedex.order;
PlaySE(SE_PC_OFF);
diff --git a/src/pokemon.c b/src/pokemon.c
index eec995050..14b4ea388 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -45,12 +45,6 @@ struct SpeciesItem
u16 item;
};
-// Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-// Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
extern const struct OamData gUnknown_0831ACB0;
extern const struct OamData gUnknown_0831ACA8;
extern const struct SpriteFrameImage gUnknown_082FF3A8[];
@@ -2755,7 +2749,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
CalculateMonStats(mon);
}
-void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
+void sub_806819C(struct Pokemon *mon, struct BattleTowerPokemon *src)
{
s32 i;
u8 nickname[30];
@@ -2809,7 +2803,7 @@ void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
CalculateMonStats(mon);
}
-void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50)
+void sub_8068338(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50)
{
s32 i;
u8 nickname[30];
@@ -2937,7 +2931,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level,
CalculateMonStats(mon);
}
-void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
+void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest)
{
s32 i;
u16 heldItem;
@@ -5864,10 +5858,10 @@ u16 HoennPokedexNumToSpecies(u16 hoennNum)
species = 0;
- while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
+ while (species < (NUM_SPECIES - 1) && gSpeciesToHoennPokedexNum[species] != hoennNum)
species++;
- if (species == 411)
+ if (species == NUM_SPECIES - 1)
return 0;
return species + 1;
@@ -5882,10 +5876,10 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum)
species = 0;
- while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
+ while (species < (NUM_SPECIES - 1) && gSpeciesToNationalPokedexNum[species] != nationalNum)
species++;
- if (species == 411)
+ if (species == NUM_SPECIES - 1)
return 0;
return species + 1;
@@ -5900,10 +5894,10 @@ u16 NationalToHoennOrder(u16 nationalNum)
hoennNum = 0;
- while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
+ while (hoennNum < (NUM_SPECIES - 1) && gHoennToNationalOrder[hoennNum] != nationalNum)
hoennNum++;
- if (hoennNum == 411)
+ if (hoennNum == NUM_SPECIES - 1)
return 0;
return hoennNum + 1;
@@ -6584,15 +6578,15 @@ u16 SpeciesToPokedexNum(u16 species)
else
{
species = SpeciesToHoennPokedexNum(species);
- if (species <= 202)
+ if (species <= HOENN_DEX_COUNT)
return species;
return 0xFFFF;
}
}
-bool32 sub_806E3F8(u16 species)
+bool32 IsSpeciesInHoennDex(u16 species)
{
- if (SpeciesToHoennPokedexNum(species) > 202)
+ if (SpeciesToHoennPokedexNum(species) > HOENN_DEX_COUNT)
return FALSE;
else
return TRUE;
@@ -6707,12 +6701,6 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
}
-// Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-// Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index d37883e4d..6d5d49265 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -647,7 +647,7 @@ static void ReceiveOldManData(OldMan *oldMan, size_t recordSize, u8 which)
static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u8 which)
{
struct EmeraldBattleTowerRecord *dest;
- struct UnknownPokemonStruct *btPokemon;
+ struct BattleTowerPokemon *btPokemon;
u32 mixIndices[4];
s32 i;
@@ -1866,7 +1866,7 @@ static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *ds
for (i = 0; i < 4; i++)
{
- struct UnknownPokemonStruct *towerMon = &dst->party[i];
+ struct BattleTowerPokemon *towerMon = &dst->party[i];
if (towerMon->species != 0)
StripExtCtrlCodes(towerMon->nickname);
}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 7fc61f953..fc5a06024 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -220,7 +220,7 @@ static void ShowContestWinnerCleanup(void)
void ShowContestWinner(void)
{
- SetMainCallback2(sub_812FDEC);
+ SetMainCallback2(CB2_ContestPainting);
gMain.savedCallback = ShowContestWinnerCleanup;
}
@@ -563,8 +563,8 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u
{
case 0:
case 1:
- GetSetPokedexFlag(nationalDexNum, 2);
- GetSetPokedexFlag(nationalDexNum, 3);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
break;
}
return sentToPc;
diff --git a/src/tv.c b/src/tv.c
index f77e93cb7..0d6e12279 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -3229,7 +3229,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
species = (Random() % (NUM_SPECIES - 1)) + 1;
initSpecies = species;
- while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) != 1 || species == passedSpecies)
+ while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies)
{
if (species == 1)
{
@@ -4376,7 +4376,7 @@ void SetTvShowInactive(u8 showIdx)
static void sub_80F0B24(u16 species, u8 showIdx)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN))
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}