summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokeball.c907
1 files changed, 574 insertions, 333 deletions
diff --git a/src/pokeball.c b/src/pokeball.c
index 0626b4714..171e1beb9 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -25,6 +25,19 @@
#define sBattler data[6]
+#define GFX_TAG_POKE_BALL 55000
+#define GFX_TAG_GREAT_BALL 55001
+#define GFX_TAG_SAFARI_BALL 55002
+#define GFX_TAG_ULTRA_BALL 55003
+#define GFX_TAG_MASTER_BALL 55004
+#define GFX_TAG_NET_BALL 55005
+#define GFX_TAG_DIVE_BALL 55006
+#define GFX_TAG_NEST_BALL 55007
+#define GFX_TAG_REPEAT_BALL 55008
+#define GFX_TAG_TIMER_BALL 55009
+#define GFX_TAG_LUXURY_BALL 55010
+#define GFX_TAG_PREMIER_BALL 55011
+
// Function Declarations
static void Task_DoPokeballSendOutAnim(u8 taskId);
static void SpriteCB_TestBallThrow(struct Sprite *sprite);
@@ -51,24 +64,272 @@ static void sub_804BAA4(struct Sprite *sprite);
static void sub_804BC50(struct Sprite *sprite);
static void sub_804BCF8(struct Sprite *sprite);
static void sub_804BD6C(struct Sprite *sprite);
-static void DestroySpriteAndFreeResources2(struct Sprite *sprite);
static void sub_804BE24(struct Sprite *sprite);
static void sub_804BE48(struct Sprite *sprite);
static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite);
static u16 GetBattlerPokeballItemId(u8 battlerId);
// Data
-extern const struct SpriteTemplate gUnknown_82606F4[];
+const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] =
+{
+ {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKE_BALL},
+ {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREAT_BALL},
+ {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARI_BALL},
+ {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRA_BALL},
+ {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTER_BALL},
+ {gInterfaceGfx_NetBall, 384, GFX_TAG_NET_BALL},
+ {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVE_BALL},
+ {gInterfaceGfx_NestBall, 384, GFX_TAG_NEST_BALL},
+ {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEAT_BALL},
+ {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMER_BALL},
+ {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURY_BALL},
+ {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIER_BALL},
+};
+
+const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
+{
+ {gInterfacePal_PokeBall, GFX_TAG_POKE_BALL},
+ {gInterfacePal_GreatBall, GFX_TAG_GREAT_BALL},
+ {gInterfacePal_SafariBall, GFX_TAG_SAFARI_BALL},
+ {gInterfacePal_UltraBall, GFX_TAG_ULTRA_BALL},
+ {gInterfacePal_MasterBall, GFX_TAG_MASTER_BALL},
+ {gInterfacePal_NetBall, GFX_TAG_NET_BALL},
+ {gInterfacePal_DiveBall, GFX_TAG_DIVE_BALL},
+ {gInterfacePal_NestBall, GFX_TAG_NEST_BALL},
+ {gInterfacePal_RepeatBall, GFX_TAG_REPEAT_BALL},
+ {gInterfacePal_TimerBall, GFX_TAG_TIMER_BALL},
+ {gInterfacePal_LuxuryBall, GFX_TAG_LUXURY_BALL},
+ {gInterfacePal_PremierBall, GFX_TAG_PREMIER_BALL},
+};
+
+static const struct OamData sBallOamData =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sBallAnimSeq3[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq5[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq4[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq6[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sBallAnimSeq1[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
-extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT];
-extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT];
-extern const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT];
+static const union AnimCmd sBallAnimSeq2[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sBallAnimSequences[] =
+{
+ sBallAnimSeq0,
+ sBallAnimSeq1,
+ sBallAnimSeq2,
+ sBallAnimSeq3,
+ sBallAnimSeq4,
+ sBallAnimSeq5,
+ sBallAnimSeq6,
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq1[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -3, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq2[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 3, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq3[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq4[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 25, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const sBallAffineAnimSequences[] =
+{
+ sBallAffineAnimSeq0,
+ sBallAffineAnimSeq1,
+ sBallAffineAnimSeq2,
+ sBallAffineAnimSeq3,
+ sBallAffineAnimSeq4,
+};
+
+const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
+{
+ {
+ .tileTag = GFX_TAG_POKE_BALL,
+ .paletteTag = GFX_TAG_POKE_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_GREAT_BALL,
+ .paletteTag = GFX_TAG_GREAT_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_SAFARI_BALL,
+ .paletteTag = GFX_TAG_SAFARI_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_ULTRA_BALL,
+ .paletteTag = GFX_TAG_ULTRA_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_MASTER_BALL,
+ .paletteTag = GFX_TAG_MASTER_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_NET_BALL,
+ .paletteTag = GFX_TAG_NET_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_DIVE_BALL,
+ .paletteTag = GFX_TAG_DIVE_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_NEST_BALL,
+ .paletteTag = GFX_TAG_NEST_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_REPEAT_BALL,
+ .paletteTag = GFX_TAG_REPEAT_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_TIMER_BALL,
+ .paletteTag = GFX_TAG_TIMER_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_LUXURY_BALL,
+ .paletteTag = GFX_TAG_LUXURY_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+ {
+ .tileTag = GFX_TAG_PREMIER_BALL,
+ .paletteTag = GFX_TAG_PREMIER_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = SpriteCB_TestBallThrow,
+ },
+};
// Functions
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
{
u8 taskId;
-
+
gDoingBattleAnim = TRUE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1;
taskId = CreateTask(Task_DoPokeballSendOutAnim, 5);
@@ -79,6 +340,7 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
}
#ifdef NONMATCHING
+//gender is an unused variable that still manages to show up in the assembly, can't get temporary variables to make it work.
static void Task_DoPokeballSendOutAnim(u8 taskId)
{
u16 throwCaseId;
@@ -86,7 +348,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
u16 itemId, ballId;
u8 ballSpriteId;
bool8 notSendOut = FALSE;
- u8 gender;
+ u8 gender, temp;
if (gTasks[taskId].tFrames == 0)
{
@@ -104,12 +366,14 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
ballId = ItemIdToBallId(itemId);
LoadBallGfx(ballId);
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender;
- else
- gender = gSaveBlock2Ptr->playerGender;
-
- ballSpriteId = CreateSprite(&gUnknown_82606F4[ballId], 32, 80, 29);
+
+ // r10 is set to gender byte here and loaded into a temporary variable to be immediately overwritten by an unused variable..
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender;
+ else
+ gender = gSaveBlock2Ptr->playerGender;
+
+ ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
gSprites[ballSpriteId].data[0] = 0x80;
gSprites[ballSpriteId].data[1] = 0;
gSprites[ballSpriteId].data[7] = throwCaseId;
@@ -117,19 +381,19 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
switch (throwCaseId)
{
case POKEBALL_PLAYER_SENDOUT:
- if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
- {
- gSprites[ballSpriteId].pos1.x = 32;
- gSprites[ballSpriteId].pos1.y = 64;
- }
- else
- {
- gender == gender;
- gSprites[ballSpriteId].pos1.x = 48;
- gSprites[ballSpriteId].pos1.y = 70;
- }
-
- gBattlerTarget = battlerId;
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
+ {
+ gSprites[ballSpriteId].pos1.x = 32;
+ gSprites[ballSpriteId].pos1.y = 64;
+ }
+ else
+ {
+ temp = gender; //mov r0, r10 (r10 = gender), but this is never actually used
+ gSprites[ballSpriteId].pos1.x = 48;
+ gSprites[ballSpriteId].pos1.y = 70;
+ }
+
+ gBattlerTarget = battlerId;
gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1;
break;
case POKEBALL_OPPONENT_SENDOUT:
@@ -153,7 +417,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
}
// this will perform an unused ball throw animation
- gSprites[ballSpriteId].data[0] = 0x22;
+ gSprites[ballSpriteId].data[0] = 34;
gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X);
gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16;
gSprites[ballSpriteId].data[5] = -40;
@@ -167,267 +431,267 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
NAKED
static void Task_DoPokeballSendOutAnim(u8 taskId)
{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstr r0, [sp]\n"
- "\tmovs r0, 0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r1, _0804A9D4 @ =gTasks\n"
- "\tldr r2, [sp]\n"
- "\tlsls r0, r2, 2\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 3\n"
- "\tadds r1, r0, r1\n"
- "\tldrh r2, [r1, 0x8]\n"
- "\tmovs r3, 0x8\n"
- "\tldrsh r0, [r1, r3]\n"
- "\tcmp r0, 0\n"
- "\tbne _0804A9D8\n"
- "\tadds r0, r2, 0x1\n"
- "\tstrh r0, [r1, 0x8]\n"
- "\tb _0804ABB8\n"
- "\t.align 2, 0\n"
- "_0804A9D4: .4byte gTasks\n"
- "_0804A9D8:\n"
- "\tldrh r0, [r1, 0xC]\n"
- "\tmov r9, r0\n"
- "\tldrb r6, [r1, 0xE]\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetBattlerSide\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0804AA04\n"
- "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n"
- "\tlsls r0, r6, 1\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tmovs r0, 0x64\n"
- "\tmuls r0, r1\n"
- "\tldr r1, _0804AA00 @ =gEnemyParty\n"
- "\tb _0804AA12\n"
- "\t.align 2, 0\n"
- "_0804A9FC: .4byte gBattlerPartyIndexes\n"
- "_0804AA00: .4byte gEnemyParty\n"
- "_0804AA04:\n"
- "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n"
- "\tlsls r0, r6, 1\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tmovs r0, 0x64\n"
- "\tmuls r0, r1\n"
- "\tldr r1, _0804AA54 @ =gPlayerParty\n"
- "_0804AA12:\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0x26\n"
- "\tbl GetMonData\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl ItemIdToBallId\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tbl LoadBallGfx\n"
- "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n"
- "\tldr r0, [r0]\n"
- "\tmovs r1, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0804AA60\n"
- "\tldr r4, _0804AA5C @ =gLinkPlayers\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetBattlerMultiplayerId\n"
- "\tlsls r1, r0, 3\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 2\n"
- "\tadds r1, r4\n"
- "\tldrb r1, [r1, 0x13]\n"
- "\tmov r10, r1\n"
- "\tb _0804AA68\n"
- "\t.align 2, 0\n"
- "_0804AA50: .4byte gBattlerPartyIndexes\n"
- "_0804AA54: .4byte gPlayerParty\n"
- "_0804AA58: .4byte gBattleTypeFlags\n"
- "_0804AA5C: .4byte gLinkPlayers\n"
- "_0804AA60:\n"
- "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n"
- "\tldr r0, [r0]\n"
- "\tldrb r0, [r0, 0x8]\n"
- "\tmov r10, r0\n"
- "_0804AA68:\n"
- "\tlsls r0, r5, 1\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 3\n"
- "\tldr r1, _0804AABC @ =gUnknown_82606F4\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0x20\n"
- "\tmovs r2, 0x50\n"
- "\tmovs r3, 0x1D\n"
- "\tbl CreateSprite\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tlsls r5, r7, 4\n"
- "\tadds r0, r5, r7\n"
- "\tlsls r0, 2\n"
- "\tmov r8, r0\n"
- "\tldr r4, _0804AAC0 @ =gSprites\n"
- "\tadd r4, r8\n"
- "\tmovs r0, 0x80\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tmovs r1, 0\n"
- "\tstrh r1, [r4, 0x30]\n"
- "\tmov r2, r9\n"
- "\tstrh r2, [r4, 0x3C]\n"
- "\tmov r3, r9\n"
- "\tcmp r3, 0xFE\n"
- "\tbeq _0804AAF8\n"
- "\tcmp r3, 0xFF\n"
- "\tbne _0804AB38\n"
- "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n"
- "\tldr r0, [r0]\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 9\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0804AAC8\n"
- "\tmovs r5, 0x20\n"
- "\tmovs r4, 0x40\n"
- "\tb _0804AACE\n"
- "\t.align 2, 0\n"
- "_0804AAB8: .4byte gSaveBlock2Ptr\n"
- "_0804AABC: .4byte gUnknown_82606F4\n"
- "_0804AAC0: .4byte gSprites\n"
- "_0804AAC4: .4byte gBattleTypeFlags\n"
- "_0804AAC8:\n"
- "\tmov r0, r10\n"
- "\tmovs r5, 0x30\n"
- "\tmovs r4, 0x46\n"
- "_0804AACE:\n"
- "\tldr r0, _0804AAEC @ =gBattlerTarget\n"
- "\tstrb r6, [r0]\n"
- "\tldr r2, _0804AAF0 @ =gSprites\n"
- "\tlsls r3, r7, 4\n"
- "\tadds r1, r3, r7\n"
- "\tlsls r1, 2\n"
- "\tadds r0, r1, r2\n"
- "\tstrh r5, [r0, 0x20]\n"
- "\tstrh r4, [r0, 0x22]\n"
- "\tadds r2, 0x1C\n"
- "\tadds r1, r2\n"
- "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n"
- "\tstr r0, [r1]\n"
- "\tb _0804AB48\n"
- "\t.align 2, 0\n"
- "_0804AAEC: .4byte gBattlerTarget\n"
- "_0804AAF0: .4byte gSprites\n"
- "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n"
- "_0804AAF8:\n"
- "\tadds r0, r6, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tadds r0, r6, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tadds r0, 0x18\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tldr r0, _0804AB2C @ =gBattlerTarget\n"
- "\tstrb r6, [r0]\n"
- "\tmovs r1, 0\n"
- "\tstrh r1, [r4, 0x2E]\n"
- "\tldr r0, _0804AB30 @ =gSprites\n"
- "\tadds r0, 0x1C\n"
- "\tadd r0, r8\n"
- "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n"
- "\tstr r1, [r0]\n"
- "\tb _0804AB46\n"
- "\t.align 2, 0\n"
- "_0804AB2C: .4byte gBattlerTarget\n"
- "_0804AB30: .4byte gSprites\n"
- "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n"
- "_0804AB38:\n"
- "\tmovs r0, 0x1\n"
- "\tbl GetBattlerAtPosition\n"
- "\tldr r1, _0804AB64 @ =gBattlerTarget\n"
- "\tstrb r0, [r1]\n"
- "\tmovs r2, 0x1\n"
- "\tstr r2, [sp, 0x4]\n"
- "_0804AB46:\n"
- "\tadds r3, r5, 0\n"
- "_0804AB48:\n"
- "\tldr r0, _0804AB68 @ =gSprites\n"
- "\tadds r1, r3, r7\n"
- "\tlsls r1, 2\n"
- "\tadds r4, r1, r0\n"
- "\tldr r5, _0804AB64 @ =gBattlerTarget\n"
- "\tldrb r0, [r5]\n"
- "\tstrh r0, [r4, 0x3A]\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tcmp r3, 0\n"
- "\tbne _0804AB6C\n"
- "\tldr r0, [sp]\n"
- "\tbl DestroyTask\n"
- "\tb _0804ABB8\n"
- "\t.align 2, 0\n"
- "_0804AB64: .4byte gBattlerTarget\n"
- "_0804AB68: .4byte gSprites\n"
- "_0804AB6C:\n"
- "\tmovs r0, 0x22\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tldrb r0, [r5]\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrb r0, [r5]\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tsubs r0, 0x10\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldr r0, _0804ABC8 @ =0x0000ffd8\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tadds r0, r4, 0\n"
- "\tbl InitAnimArcTranslation\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r4, 0x6]\n"
- "\tldr r1, _0804ABCC @ =gTasks\n"
- "\tldr r2, [sp]\n"
- "\tlsls r0, r2, 2\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r5]\n"
- "\tstrh r1, [r0, 0x10]\n"
- "\tldr r1, _0804ABD0 @ =TaskDummy\n"
- "\tstr r1, [r0]\n"
- "\tmovs r0, 0x36\n"
- "\tbl PlaySE\n"
- "_0804ABB8:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0804ABC8: .4byte 0x0000ffd8\n"
- "_0804ABCC: .4byte gTasks\n"
- "_0804ABD0: .4byte TaskDummy\n");
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstr r0, [sp]\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tldr r1, _0804A9D4 @ =gTasks\n"
+ "\tldr r2, [sp]\n"
+ "\tlsls r0, r2, 2\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tadds r1, r0, r1\n"
+ "\tldrh r2, [r1, 0x8]\n"
+ "\tmovs r3, 0x8\n"
+ "\tldrsh r0, [r1, r3]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0804A9D8\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tstrh r0, [r1, 0x8]\n"
+ "\tb _0804ABB8\n"
+ "\t.align 2, 0\n"
+ "_0804A9D4: .4byte gTasks\n"
+ "_0804A9D8:\n"
+ "\tldrh r0, [r1, 0xC]\n"
+ "\tmov r9, r0\n"
+ "\tldrb r6, [r1, 0xE]\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetBattlerSide\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0804AA04\n"
+ "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r1\n"
+ "\tldrh r1, [r0]\n"
+ "\tmovs r0, 0x64\n"
+ "\tmuls r0, r1\n"
+ "\tldr r1, _0804AA00 @ =gEnemyParty\n"
+ "\tb _0804AA12\n"
+ "\t.align 2, 0\n"
+ "_0804A9FC: .4byte gBattlerPartyIndexes\n"
+ "_0804AA00: .4byte gEnemyParty\n"
+ "_0804AA04:\n"
+ "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r1\n"
+ "\tldrh r1, [r0]\n"
+ "\tmovs r0, 0x64\n"
+ "\tmuls r0, r1\n"
+ "\tldr r1, _0804AA54 @ =gPlayerParty\n"
+ "_0804AA12:\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0x26\n"
+ "\tbl GetMonData\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tbl ItemIdToBallId\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl LoadBallGfx\n"
+ "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n"
+ "\tldr r0, [r0]\n"
+ "\tmovs r1, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0804AA60\n"
+ "\tldr r4, _0804AA5C @ =gLinkPlayers\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetBattlerMultiplayerId\n"
+ "\tlsls r1, r0, 3\n"
+ "\tsubs r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tadds r1, r4\n"
+ "\tldrb r1, [r1, 0x13]\n"
+ "\tmov r10, r1\n"
+ "\tb _0804AA68\n"
+ "\t.align 2, 0\n"
+ "_0804AA50: .4byte gBattlerPartyIndexes\n"
+ "_0804AA54: .4byte gPlayerParty\n"
+ "_0804AA58: .4byte gBattleTypeFlags\n"
+ "_0804AA5C: .4byte gLinkPlayers\n"
+ "_0804AA60:\n"
+ "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n"
+ "\tldr r0, [r0]\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tmov r10, r0\n"
+ "_0804AA68:\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tldr r1, _0804AABC @ =gBallSpriteTemplates\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0x20\n"
+ "\tmovs r2, 0x50\n"
+ "\tmovs r3, 0x1D\n"
+ "\tbl CreateSprite\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tlsls r5, r7, 4\n"
+ "\tadds r0, r5, r7\n"
+ "\tlsls r0, 2\n"
+ "\tmov r8, r0\n"
+ "\tldr r4, _0804AAC0 @ =gSprites\n"
+ "\tadd r4, r8\n"
+ "\tmovs r0, 0x80\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r1, [r4, 0x30]\n"
+ "\tmov r2, r9\n"
+ "\tstrh r2, [r4, 0x3C]\n"
+ "\tmov r3, r9\n"
+ "\tcmp r3, 0xFE\n"
+ "\tbeq _0804AAF8\n"
+ "\tcmp r3, 0xFF\n"
+ "\tbne _0804AB38\n"
+ "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n"
+ "\tldr r0, [r0]\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 9\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0804AAC8\n"
+ "\tmovs r5, 0x20\n"
+ "\tmovs r4, 0x40\n"
+ "\tb _0804AACE\n"
+ "\t.align 2, 0\n"
+ "_0804AAB8: .4byte gSaveBlock2Ptr\n"
+ "_0804AABC: .4byte gBallSpriteTemplates\n"
+ "_0804AAC0: .4byte gSprites\n"
+ "_0804AAC4: .4byte gBattleTypeFlags\n"
+ "_0804AAC8:\n"
+ "\tmov r0, r10\n"
+ "\tmovs r5, 0x30\n"
+ "\tmovs r4, 0x46\n"
+ "_0804AACE:\n"
+ "\tldr r0, _0804AAEC @ =gBattlerTarget\n"
+ "\tstrb r6, [r0]\n"
+ "\tldr r2, _0804AAF0 @ =gSprites\n"
+ "\tlsls r3, r7, 4\n"
+ "\tadds r1, r3, r7\n"
+ "\tlsls r1, 2\n"
+ "\tadds r0, r1, r2\n"
+ "\tstrh r5, [r0, 0x20]\n"
+ "\tstrh r4, [r0, 0x22]\n"
+ "\tadds r2, 0x1C\n"
+ "\tadds r1, r2\n"
+ "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n"
+ "\tstr r0, [r1]\n"
+ "\tb _0804AB48\n"
+ "\t.align 2, 0\n"
+ "_0804AAEC: .4byte gBattlerTarget\n"
+ "_0804AAF0: .4byte gSprites\n"
+ "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n"
+ "_0804AAF8:\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r4, 0x20]\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tadds r0, 0x18\n"
+ "\tstrh r0, [r4, 0x22]\n"
+ "\tldr r0, _0804AB2C @ =gBattlerTarget\n"
+ "\tstrb r6, [r0]\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r1, [r4, 0x2E]\n"
+ "\tldr r0, _0804AB30 @ =gSprites\n"
+ "\tadds r0, 0x1C\n"
+ "\tadd r0, r8\n"
+ "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n"
+ "\tstr r1, [r0]\n"
+ "\tb _0804AB46\n"
+ "\t.align 2, 0\n"
+ "_0804AB2C: .4byte gBattlerTarget\n"
+ "_0804AB30: .4byte gSprites\n"
+ "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n"
+ "_0804AB38:\n"
+ "\tmovs r0, 0x1\n"
+ "\tbl GetBattlerAtPosition\n"
+ "\tldr r1, _0804AB64 @ =gBattlerTarget\n"
+ "\tstrb r0, [r1]\n"
+ "\tmovs r2, 0x1\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "_0804AB46:\n"
+ "\tadds r3, r5, 0\n"
+ "_0804AB48:\n"
+ "\tldr r0, _0804AB68 @ =gSprites\n"
+ "\tadds r1, r3, r7\n"
+ "\tlsls r1, 2\n"
+ "\tadds r4, r1, r0\n"
+ "\tldr r5, _0804AB64 @ =gBattlerTarget\n"
+ "\tldrb r0, [r5]\n"
+ "\tstrh r0, [r4, 0x3A]\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tcmp r3, 0\n"
+ "\tbne _0804AB6C\n"
+ "\tldr r0, [sp]\n"
+ "\tbl DestroyTask\n"
+ "\tb _0804ABB8\n"
+ "\t.align 2, 0\n"
+ "_0804AB64: .4byte gBattlerTarget\n"
+ "_0804AB68: .4byte gSprites\n"
+ "_0804AB6C:\n"
+ "\tmovs r0, 0x22\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tldrb r0, [r5]\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r4, 0x32]\n"
+ "\tldrb r0, [r5]\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tsubs r0, 0x10\n"
+ "\tstrh r0, [r4, 0x36]\n"
+ "\tldr r0, _0804ABC8 @ =0x0000ffd8\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl InitAnimArcTranslation\n"
+ "\tmov r0, sp\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r4, 0x6]\n"
+ "\tldr r1, _0804ABCC @ =gTasks\n"
+ "\tldr r2, [sp]\n"
+ "\tlsls r0, r2, 2\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r5]\n"
+ "\tstrh r1, [r0, 0x10]\n"
+ "\tldr r1, _0804ABD0 @ =TaskDummy\n"
+ "\tstr r1, [r0]\n"
+ "\tmovs r0, 0x36\n"
+ "\tbl PlaySE\n"
+ "_0804ABB8:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0804ABC8: .4byte 0x0000ffd8\n"
+ "_0804ABCC: .4byte gTasks\n"
+ "_0804ABD0: .4byte TaskDummy\n");
}
#endif
@@ -485,6 +749,7 @@ static void sub_804AD00(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_SUIKOMU);
+
if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
@@ -654,6 +919,7 @@ static void sub_804AF24(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 2);
else
StartSpriteAffineAnim(sprite, 1);
+
PlaySE(SE_BOWA);
}
break;
@@ -663,35 +929,33 @@ static void sub_804AF24(struct Sprite *sprite)
#define tCryTaskSpecies data[0]
#define tCryTaskPan data[1]
#define tCryTaskWantedCry data[2]
-#define tCryTaskBattler data[3]
-#define tCryTaskMonSpriteId data[4]
-#define tCryTaskMonPtr1 data[5]
-#define tCryTaskMonPtr2 data[6]
+#define tCryTaskMonPtr1 data[3]
+#define tCryTaskMonPtr2 data[4]
#define tCryTaskFrames data[10]
#define tCryTaskState data[15]
static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
{
- u8 wantedCry = gTasks[taskId].tCryTaskWantedCry;
+ u8 state2 = gTasks[taskId].data[2];
s8 pan = gTasks[taskId].tCryTaskPan;
u16 species = gTasks[taskId].tCryTaskSpecies;
- u8 battlerId = gTasks[taskId].tCryTaskBattler;
- u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId;
- struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
+ struct Pokemon *mon = (void*)(u32)((u32)(gTasks[taskId].tCryTaskMonPtr1 << 0x10) | ((u16)gTasks[taskId].tCryTaskMonPtr2));
switch (gTasks[taskId].tCryTaskState)
{
case 0:
default:
- if (gSprites[monSpriteId].affineAnimEnded)
- gTasks[taskId].tCryTaskState = wantedCry + 1;
+ if (gTasks[taskId].data[8] < 3)
+ gTasks[taskId].data[8]++;
+ else
+ gTasks[taskId].tCryTaskState = state2 + 1;
break;
case 1:
if (ShouldPlayNormalPokeCry(mon) == TRUE)
PlayCry3(species, pan, 0);
else
PlayCry3(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
+
DestroyTask(taskId);
break;
case 2:
@@ -707,7 +971,6 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
else
PlayCry4(species, pan, 12);
- gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
}
else
@@ -726,7 +989,6 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
break;
}
gTasks[taskId].tCryTaskState++;
- // fall through
case 31:
if (!IsCryPlayingOrClearCrySongs())
{
@@ -741,12 +1003,12 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskFrames--;
break;
}
+
if (ShouldPlayNormalPokeCry(mon) == TRUE)
PlayCry4(species, pan, 0);
else
PlayCry4(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
break;
}
@@ -786,7 +1048,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1)
{
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (IsBGMPlaying())
m4aMPlayStop(&gMPlayInfo_BGM);
@@ -803,29 +1065,17 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
wantedCryCase = 1;
else
wantedCryCase = 2;
-
- gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1;
-
+
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
gTasks[taskId].tCryTaskSpecies = species;
gTasks[taskId].tCryTaskPan = pan;
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
- gTasks[taskId].tCryTaskBattler = battlerId;
- gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler];
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10;
gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon);
gTasks[taskId].tCryTaskState = 0;
}
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
-
-/*
- if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
- gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58;
- else
- gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44;
-*/
-
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
}
@@ -833,8 +1083,6 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
#undef tCryTaskSpecies
#undef tCryTaskPan
#undef tCryTaskWantedCry
-#undef tCryTaskBattler
-#undef tCryTaskMonSpriteId
#undef tCryTaskMonPtr1
#undef tCryTaskMonPtr2
#undef tCryTaskFrames
@@ -903,7 +1151,7 @@ static void sub_804B5C8(struct Sprite *sprite)
{
gDoingBattleAnim = FALSE;
m4aMPlayAllStop();
- PlaySE(MUS_FANFA5);
+ PlaySE(MUS_FAN6);
}
else if (sprite->data[4] == 315)
{
@@ -1026,22 +1274,17 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y,
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]);
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]);
spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy);
-
gSprites[spriteId].data[0] = monSpriteId;
gSprites[spriteId].data[5] = gSprites[monSpriteId].pos1.x;
gSprites[spriteId].data[6] = gSprites[monSpriteId].pos1.y;
-
gSprites[monSpriteId].pos1.x = x;
gSprites[monSpriteId].pos1.y = y;
- //gSprites[monSpriteId].data[7] = species;
-
gSprites[spriteId].data[1] = g;
gSprites[spriteId].data[2] = battlerId;
gSprites[spriteId].data[3] = h;
gSprites[spriteId].data[4] = h >> 0x10;
gSprites[spriteId].oam.priority = oamPriority;
gSprites[spriteId].callback = sub_804B9E8;
-
gSprites[monSpriteId].invisible = TRUE;
}
@@ -1085,11 +1328,13 @@ static void sub_804BAA4(struct Sprite *sprite)
if (sprite->animEnded)
sprite->invisible = TRUE;
+
if (gSprites[monSpriteId].affineAnimEnded)
{
StartSpriteAffineAnim(&gSprites[monSpriteId], 0);
r12 = TRUE;
}
+
var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x;
var2 = (sprite->data[6] - sprite->pos1.y) * sprite->data[7] / 128 + sprite->pos1.y;
gSprites[monSpriteId].pos1.x = var1;
@@ -1110,16 +1355,9 @@ static void sub_804BAA4(struct Sprite *sprite)
gSprites[monSpriteId].pos2.y = 0;
r6 = TRUE;
}
+
if (sprite->animEnded && r12 && r6)
- {
- /*
- if (gSprites[monSpriteId].data[7] == SPECIES_EGG)
- DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0);
- else
- DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0);
- */
DestroySpriteAndFreeResources(sprite);
- }
}
u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h)
@@ -1174,6 +1412,7 @@ static void sub_804BCF8(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_SUIKOMU);
+
r1 = sprite->data[0];
if (gSprites[r1].affineAnimEnded)
{
@@ -1195,7 +1434,7 @@ static void sub_804BD6C(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy;
}
-static void DestroySpriteAndFreeResources2(struct Sprite *sprite)
+void DestroySpriteAndFreeResources2(struct Sprite *sprite)
{
DestroySpriteAndFreeResources(sprite);
}
@@ -1216,6 +1455,7 @@ void sub_804BD94(u8 battlerId)
healthboxSprite->pos2.x = -healthboxSprite->pos2.x;
healthboxSprite->pos2.y = -healthboxSprite->pos2.y;
}
+
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
healthboxSprite->callback = sub_804BE24;
@@ -1273,6 +1513,7 @@ void LoadBallGfx(u8 ballId)
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]);
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]);
}
+
switch (ballId)
{
case BALL_DIVE: