summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AgbRfu_LinkManager.c4
-rwxr-xr-xsrc/battle_anim_throw.c (renamed from src/battle_anim_special.c)1027
-rw-r--r--src/battle_controller_link_opponent.c8
-rw-r--r--src/battle_controller_link_partner.c2
-rw-r--r--src/battle_controller_opponent.c8
-rw-r--r--src/battle_controller_player.c6
-rw-r--r--src/battle_controller_player_partner.c2
-rw-r--r--src/battle_controller_recorded_opponent.c8
-rw-r--r--src/battle_controller_recorded_player.c6
-rw-r--r--src/battle_controller_wally.c4
-rw-r--r--src/battle_script_commands.c1
-rw-r--r--src/m4a.c111
-rw-r--r--src/m4a_1.s456
-rw-r--r--src/move_relearner.c24
-rw-r--r--src/pokeball.c50
-rw-r--r--src/pokemon.c8
16 files changed, 954 insertions, 771 deletions
diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c
index f6ebcc726..42cc9aea3 100644
--- a/src/AgbRfu_LinkManager.c
+++ b/src/AgbRfu_LinkManager.c
@@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((bm_linkLossSlot >> i) & 1)
+ if (bm_linkLossSlot & (1 << i))
{
lman.linkRecoveryTimer.active |= (1 << i);
lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
@@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
bm_disconnectSlot = 0;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
+ if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
{
lman.linkRecoveryTimer.active &= ~(1 << i);
bm_disconnectSlot |= (1 << i);
diff --git a/src/battle_anim_special.c b/src/battle_anim_throw.c
index 3deb2065e..7049931d3 100755
--- a/src/battle_anim_special.c
+++ b/src/battle_anim_throw.c
@@ -22,51 +22,73 @@
#include "constants/rgb.h"
// iwram
-int gUnknown_030062DC;
-u16 gUnknown_030062E0;
-u16 gUnknown_030062E4;
+u32 gMonShrinkDuration;
+u16 gMonShrinkDelta;
+u16 gMonShrinkDistance;
+
+enum {
+ BALL_ROLL_1,
+ BALL_PIVOT_1,
+ BALL_ROLL_2,
+ BALL_PIVOT_2,
+ BALL_ROLL_3,
+ BALL_NEXT_MOVE,
+ BALL_WAIT_NEXT_SHAKE
+};
+
+enum {
+ MON_SHRINK,
+ MON_SHRINK_STEP,
+ MON_SHRINK_INVISIBLE,
+ MON_SHRINK_FREE
+};
+
+enum {
+ SHINY_STAR_ENCIRCLE,
+ SHINY_STAR_DIAGONAL,
+};
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 AnimTask_ThrowBall_Step(u8);
+static void SpriteCB_Ball_Throw(struct Sprite *);
+static void AnimTask_ThrowBall_StandingTrainer_Step(u8);
+static void Task_PlayerThrow_Wait(u8);
+static void SpriteCB_Ball_Arc(struct Sprite *);
+static void SpriteCB_Ball_Block(struct Sprite *);
+static void SpriteCB_Ball_MonShrink(struct Sprite *);
+static void SpriteCB_Ball_MonShrink_Step(struct Sprite *);
+static void SpriteCB_Ball_Bounce(struct Sprite *);
+static void SpriteCB_Ball_Bounce_Step(struct Sprite *);
+static void SpriteCB_Ball_Release(struct Sprite *);
+static void SpriteCB_Ball_Wobble(struct Sprite *);
+static void SpriteCB_Ball_Wobble_Step(struct Sprite *);
+static void SpriteCB_Ball_Capture(struct Sprite *);
+static void SpriteCB_Ball_Release_Step(struct Sprite *);
+static void SpriteCB_Ball_Capture_Step(struct Sprite *);
+static void MakeCaptureStars(struct Sprite *);
+static void SpriteCB_Ball_FadeOut(struct Sprite *);
+static void DestroySpriteAfterOneFrame(struct Sprite *);
+static void LoadBallParticleGfx(u8);
+static void SpriteCB_CaptureStar_Flicker(struct Sprite *);
+static void SpriteCB_Ball_Release_Wait(struct Sprite *);
+static void SpriteCB_Ball_Block_Step(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 Task_FadeMon_ToBallColor(u8);
+static void Task_FadeMon_ToNormal(u8);
+static void Task_FadeMon_ToNormal_Step(u8);
+static void Task_ShinyStars(u8);
+static void SpriteCB_ShinyStars_Encircle(struct Sprite *);
+static void SpriteCB_ShinyStars_Diagonal(struct Sprite *);
+static void Task_ShinyStars_Wait(u8);
+static void SpriteCB_PokeBlock_LiftArm(struct Sprite *);
+static void SpriteCB_PokeBlock_Arc(struct Sprite *);
+static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *);
static void PokeBallOpenParticleAnimation(u8);
static void GreatBallOpenParticleAnimation(u8);
static void SafariBallOpenParticleAnimation(u8);
@@ -76,31 +98,31 @@ static void DiveBallOpenParticleAnimation(u8);
static void RepeatBallOpenParticleAnimation(u8);
static void TimerBallOpenParticleAnimation(u8);
static void PremierBallOpenParticleAnimation(u8);
-static void sub_817330C(struct Sprite *);
+static void SpriteCB_PokeBlock_Throw(struct Sprite *);
-struct BallCaptureSuccessStarData
+struct CaptureStar
{
s8 xOffset;
s8 yOffset;
- s8 unk2;
+ s8 amplitude;
};
-static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
+static const struct CaptureStar sCaptureStars[] =
{
{
.xOffset = 10,
.yOffset = 2,
- .unk2 = -3,
+ .amplitude = -3,
},
{
.xOffset = 15,
.yOffset = 0,
- .unk2 = -4,
+ .amplitude = -4,
},
{
.xOffset = -10,
.yOffset = 2,
- .unk2 = -4,
+ .amplitude = -4,
},
};
@@ -379,7 +401,7 @@ const struct SpriteTemplate gPokeblockSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_817330C,
+ .callback = SpriteCB_PokeBlock_Throw,
};
const union AnimCmd gUnknown_085E5350[] =
@@ -400,7 +422,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
.anims = gUnknown_085E5358,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_817330C,
+ .callback = SpriteCB_PokeBlock_Throw,
};
extern const struct SpriteTemplate gWishStarSpriteTemplate;
@@ -578,7 +600,7 @@ void AnimTask_FlashHealthboxOnLevelUp(u8 taskId)
static void sub_8170A38(u8 taskId)
{
u8 paletteNum;
- int paletteOffset, colorOffset;
+ u32 paletteOffset, colorOffset;
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11])
@@ -658,13 +680,13 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
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[11] = LaunchBallFadeMonTask(FALSE, gBattleAnimAttacker, selectedPalettes, ballId);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -730,6 +752,12 @@ u8 ItemIdToBallId(u16 ballItem)
}
}
+#define tSpriteId data[0]
+
+#define sDuration data[0]
+#define sTargetX data[1]
+#define sTargetY data[2]
+
void AnimTask_ThrowBall(u8 taskId)
{
u8 ballId;
@@ -737,26 +765,26 @@ void AnimTask_ThrowBall(u8 taskId)
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;
+ gSprites[spriteId].sDuration = 34;
+ gSprites[spriteId].sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ gSprites[spriteId].sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16;
+ gSprites[spriteId].callback = SpriteCB_Ball_Throw;
+ gBattleSpritesDataPtr->animationData->wildMonInvisible = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
+ gTasks[taskId].tSpriteId = spriteId;
+ gTasks[taskId].func = AnimTask_ThrowBall_Step;
}
-static void sub_8170EF0(u8 taskId)
+static void AnimTask_ThrowBall_Step(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[0];
- if ((u16)gSprites[spriteId].data[0] == 0xFFFF)
+ u8 spriteId = gTasks[taskId].tSpriteId;
+ if ((u16)gSprites[spriteId].sDuration == 0xFFFF)
DestroyAnimVisualTask(taskId);
}
-// Safari Ball / Wally's ball throw
-void AnimTask_ThrowBallSpecial(u8 taskId)
+// Safari Zone throw / Wally's throw
+void AnimTask_ThrowBall_StandingTrainer(u8 taskId)
{
- int x, y;
+ s16 x, y;
u8 ballId;
u8 subpriority;
u8 spriteId;
@@ -775,27 +803,33 @@ void AnimTask_ThrowBallSpecial(u8 taskId)
ballId = ItemIdToBallId(gLastUsedItem);
subpriority = GetBattlerSpriteSubpriority(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].sDuration = 34;
+ gSprites[spriteId].sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ gSprites[spriteId].sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 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;
+ gTasks[taskId].tSpriteId = spriteId;
+ gTasks[taskId].func = AnimTask_ThrowBall_StandingTrainer_Step;
}
-static void sub_8171030(u8 taskId)
+static void AnimTask_ThrowBall_StandingTrainer_Step(u8 taskId)
{
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
{
PlaySE12WithPanning(SE_BALL_THROW, 0);
- gSprites[gTasks[taskId].data[0]].callback = sub_8171104;
- CreateTask(sub_81710A8, 10);
- gTasks[taskId].func = sub_8170EF0;
+ gSprites[gTasks[taskId].tSpriteId].callback = SpriteCB_Ball_Throw;
+ CreateTask(Task_PlayerThrow_Wait, 10);
+ gTasks[taskId].func = AnimTask_ThrowBall_Step;
}
}
-static void sub_81710A8(u8 taskId)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+
+#undef tSpriteId
+
+static void Task_PlayerThrow_Wait(u8 taskId)
{
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
{
@@ -804,29 +838,50 @@ static void sub_81710A8(u8 taskId)
}
}
-static void sub_8171104(struct Sprite *sprite)
+#define sTargetXArg data[1]
+#define sTargetYArg data[2]
+
+#define sOffsetX data[1] // re-use
+#define sTargetX data[2] // re-use
+#define sOffsetY data[3]
+#define sTargetY data[4]
+#define sAmplitude data[5]
+
+static void SpriteCB_Ball_Throw(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;
+ u16 targetX = sprite->sTargetXArg;
+ u16 targetY = sprite->sTargetYArg;
+
+ sprite->sOffsetX = sprite->pos1.x;
+ sprite->sTargetX = targetX;
+ sprite->sOffsetY = sprite->pos1.y;
+ sprite->sTargetY = targetY;
+ sprite->sAmplitude = -40;
InitAnimArcTranslation(sprite);
- sprite->callback = sub_8171134;
+ sprite->callback = SpriteCB_Ball_Arc;
}
-static void sub_8171134(struct Sprite *sprite)
+#undef sTargetXArg
+#undef sTargetYArg
+#undef sOffsetX
+#undef sTargetX
+#undef sOffsetY
+#undef sTargetY
+#undef sAmplitude
+
+#define sTimer data[5]
+#define sTaskId data[5] // re-use
+
+static void SpriteCB_Ball_Arc(struct Sprite *sprite)
{
- int i;
+ s32 i;
u8 ballId;
if (TranslateAnimHorizontalArc(sprite))
{
if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
{
- sprite->callback = sub_8171CAC;
+ sprite->callback = SpriteCB_Ball_Block;
}
else
{
@@ -839,116 +894,151 @@ static void sub_8171134(struct Sprite *sprite)
for (i = 0; i < 8; i++)
sprite->data[i] = 0;
- sprite->data[5] = 0;
- sprite->callback = sub_81711E8;
+ sprite->sTimer = 0;
+ sprite->callback = SpriteCB_Ball_MonShrink;
ballId = ItemIdToBallId(gLastUsedItem);
switch (ballId)
{
case 0 ... POKEBALL_COUNT - 1:
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
- LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId);
+ LaunchBallFadeMonTask(FALSE, gBattleAnimTarget, 14, ballId);
break;
}
}
}
}
-static void sub_81711E8(struct Sprite *sprite)
+static void SpriteCB_Ball_MonShrink(struct Sprite *sprite)
{
- if (++sprite->data[5] == 10)
+ if (++sprite->sTimer == 10)
{
- sprite->data[5] = CreateTask(TaskDummy, 50);
- sprite->callback = sub_8171240;
+ sprite->sTaskId = CreateTask(TaskDummy, 50);
+ sprite->callback = SpriteCB_Ball_MonShrink_Step;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0;
}
}
-static void sub_8171240(struct Sprite *sprite)
+#undef sTimer
+#undef sTaskId
+
+#define tState data[0]
+#define sTimer data[1]
+#define sTaskId data[5]
+
+static void SpriteCB_Ball_MonShrink_Step(struct Sprite *sprite)
{
u8 spriteId;
u8 taskId;
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
- taskId = sprite->data[5];
+ taskId = sprite->sTaskId;
- if (++gTasks[taskId].data[1] == 11)
+ if (++gTasks[taskId].sTimer == 11)
PlaySE(SE_BALL_TRADE);
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case MON_SHRINK:
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
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]++;
+ gMonShrinkDuration = 28;
+ gMonShrinkDistance = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
+ gMonShrinkDelta = (u32)(gMonShrinkDistance * 256) / gMonShrinkDuration;
+ gTasks[taskId].data[2] = gMonShrinkDelta;
+ gTasks[taskId].tState++; // MON_SHRINK_STEP
break;
- case 1:
- gTasks[taskId].data[10] += 0x20;
+ case MON_SHRINK_STEP:
+ gTasks[taskId].data[10] += 32;
SetSpriteRotScale(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]++;
+ if (gTasks[taskId].data[10] >= 1152)
+ gTasks[taskId].tState++; // MON_SHRINK_INVISIBLE
break;
- case 2:
+ case MON_SHRINK_INVISIBLE:
ResetSpriteRotScale(spriteId);
gSprites[spriteId].invisible = TRUE;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++; // MON_SHRINK_FREE
break;
+ case MON_SHRINK_FREE:
default:
if (gTasks[taskId].data[1] > 10)
{
DestroyTask(taskId);
StartSpriteAnim(sprite, 2);
sprite->data[5] = 0;
- sprite->callback = sub_817138C;
+ sprite->callback = SpriteCB_Ball_Bounce;
}
break;
}
}
-static void sub_817138C(struct Sprite *sprite)
+#undef sTimer
+#undef tState
+#undef sTaskId
+
+#define sState data[3]
+#define sAmplitude data[4]
+#define sPhase data[5]
+
+static void SpriteCB_Ball_Bounce(struct Sprite *sprite)
{
- int angle;
+ s16 phase;
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;
+ sprite->sState = 0;
+ sprite->sAmplitude = 40;
+ sprite->sPhase = 0;
+ phase = 0;
+ sprite->pos1.y += Cos(phase, 40);
+ sprite->pos2.y = -Cos(phase, sprite->sAmplitude);
+ sprite->callback = SpriteCB_Ball_Bounce_Step;
}
}
-static void sub_81713D0(struct Sprite *sprite)
+#undef sState
+#undef sAmplitude
+#undef sPhase
+
+#define DIRECTION(state) (state & 0xFF)
+#define PHASE_DELTA(state) (state >> 8)
+#define BOUNCES(state) (state >> 8)
+#define FALL(state) (state &= -0x100)
+#define RISE_FASTER(state) (state += 257)
+
+#define BALL_FALLING 0
+#define BALL_RISING 1
+
+#define sState data[3]
+#define sAmplitude data[4]
+#define sPhase data[5]
+#define sTimer data[5] // re-use
+
+// Animates the Poké Ball dropping to ground and bouncing.
+static void SpriteCB_Ball_Bounce_Step(struct Sprite *sprite)
{
bool8 lastBounce;
- int bounceCount;
+ s16 bounceCount;
- lastBounce = 0;
+ lastBounce = FALSE;
- switch (sprite->data[3] & 0xFF)
+ switch (DIRECTION(sprite->sState))
{
- 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)
+ case BALL_FALLING:
+ sprite->pos2.y = -Cos(sprite->sPhase, sprite->sAmplitude);
+ sprite->sPhase += PHASE_DELTA(sprite->sState) + 4;
+ // Once the ball touches the ground
+ if (sprite->sPhase >= 64)
{
- sprite->data[4] -= 10;
- sprite->data[3] += 257;
+ sprite->sAmplitude -= 10;
+ RISE_FASTER(sprite->sState);
- bounceCount = sprite->data[3] >> 8;
+ bounceCount = BOUNCES(sprite->sState);
if (bounceCount == 4)
- lastBounce = 1;
+ lastBounce = TRUE;
- // Play a different sound effect for each pokeball bounce.
switch (bounceCount)
{
case 1:
@@ -966,186 +1056,207 @@ static void sub_81713D0(struct Sprite *sprite)
}
}
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)
+ case BALL_RISING:
+ sprite->pos2.y = -Cos(sprite->sPhase, sprite->sAmplitude);
+ sprite->sPhase -= PHASE_DELTA(sprite->sState) + 4;
+ // Once ball reaches max height
+ if (sprite->sPhase <= 0)
{
- sprite->data[5] = 0;
- sprite->data[3] &= -0x100;
+ // Set to BALL_FALLING
+ sprite->sPhase = 0;
+ FALL(sprite->sState);
}
break;
}
if (lastBounce)
{
- sprite->data[3] = 0;
+ sprite->sState = 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;
+ sprite->sTimer = 0;
+ sprite->callback = SpriteCB_Ball_Release;
}
else
{
- sprite->callback = sub_81714D4;
+ sprite->callback = SpriteCB_Ball_Wobble;
sprite->data[4] = 1;
sprite->data[5] = 0;
}
}
}
-static void sub_81714D4(struct Sprite *sprite)
+#undef sState
+#undef sAmplitude
+#undef sPhase
+#undef sTimer
+
+#undef DIRECTION
+#undef PHASE_DELTA
+#undef BOUNCES
+#undef FALL
+#undef RISE_FASTER
+
+#define sTimer data[3]
+#define sState data[3] // re-use
+
+static void SpriteCB_Ball_Wobble(struct Sprite *sprite)
{
- if (++sprite->data[3] == 31)
+ if (++sprite->sTimer == 31)
{
- sprite->data[3] = 0;
- sprite->affineAnimPaused = 1;
- StartSpriteAffineAnim(sprite, 1);
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->callback = sub_8171520;
+ sprite->sState = 0;
+ sprite->affineAnimPaused = TRUE;
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->callback = SpriteCB_Ball_Wobble_Step;
PlaySE(SE_BALL);
}
}
-static void sub_8171520(struct Sprite *sprite)
+#undef sTimer
+#undef sState
+
+#define sState data[3]
+#define sDirection data[4]
+#define sTimer data[5]
+
+#define STATE(state) (state & 0xFF)
+#define SHAKES(state) (state >> 8)
+#define SHAKE_INC(state) (state += 0x100)
+#define RESET_STATE(state) (state &= -0x100)
+
+static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
{
- s8 state;
- u16 var0;
+ s8 shakes;
+ u16 frame;
- switch (sprite->data[3] & 0xFF)
+ switch (STATE(sprite->sState))
{
- case 0:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_1:
+ // Rolling effect: every frame in the rotation, the sprite shifts 176/256 of a pixel.
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 255)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 7;
- if (var0 > 14)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 7;
+ if (frame > 14)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_PIVOT_1
+ sprite->sTimer = 0;
}
break;
- case 1:
- if (++sprite->data[5] == 1)
+ case BALL_PIVOT_1:
+ if (++sprite->sTimer == 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);
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
+ sprite->sState++; // BALL_ROLL_2
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->sDirection < 0)
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- ChangeSpriteAffineAnim(sprite, 1);
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
}
else
- {
- sprite->affineAnimPaused = 1;
- }
+ sprite->affineAnimPaused = TRUE;
break;
- case 2:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_2:
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 255)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 12;
- if (var0 > 24)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 12;
+ if (frame > 24)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_PIVOT_2
+ sprite->sTimer = 0;
}
break;
- case 3:
- if (sprite->data[5]++ < 0)
+ case BALL_PIVOT_2:
+ if (sprite->sTimer++ < 0)
{
- sprite->affineAnimPaused = 1;
+ sprite->affineAnimPaused = TRUE;
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);
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
+ sprite->sState++; // BALL_ROLL_3
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->sDirection < 0)
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- ChangeSpriteAffineAnim(sprite, 1);
+ ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
// fall through
- case 4:
- if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ case BALL_ROLL_3:
+ if (gBattleSpritesDataPtr->animationData->ballSubpx > 0xFF)
{
- sprite->pos2.x += sprite->data[4];
- gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ sprite->pos2.x += sprite->sDirection;
+ gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
- {
- gBattleSpritesDataPtr->animationData->field_C += 0xB0;
- }
+ gBattleSpritesDataPtr->animationData->ballSubpx += 176;
- sprite->data[5]++;
- sprite->affineAnimPaused = 0;
- var0 = sprite->data[5] + 4;
- if (var0 > 8)
+ sprite->sTimer++;
+ sprite->affineAnimPaused = FALSE;
+ frame = sprite->sTimer + 4;
+ if (frame > 8)
{
- gBattleSpritesDataPtr->animationData->field_C = 0;
- sprite->data[3]++;
- sprite->data[5] = 0;
- sprite->data[4] = -sprite->data[4];
+ gBattleSpritesDataPtr->animationData->ballSubpx = 0;
+ sprite->sState++; // BALL_NEXT_MOVE
+ sprite->sTimer = 0;
+ sprite->sDirection = -sprite->sDirection;
}
break;
- case 5:
- sprite->data[3] += 0x100;
- state = sprite->data[3] >> 8;
- if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ case BALL_NEXT_MOVE:
+ SHAKE_INC(sprite->sState);
+ shakes = SHAKES(sprite->sState);
+ if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
{
- sprite->affineAnimPaused = 1;
- sprite->callback = sub_81717B4;
+ sprite->affineAnimPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Release;
}
else
{
- if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3)
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3)
{
- sprite->callback = sub_81717D8;
- sprite->affineAnimPaused = 1;
+ sprite->callback = SpriteCB_Ball_Capture;
+ sprite->affineAnimPaused = TRUE;
}
else
{
- sprite->data[3]++;
- sprite->affineAnimPaused = 1;
+ sprite->sState++; // BALL_WAIT_NEXT_SHAKE
+ sprite->affineAnimPaused = TRUE;
}
}
break;
- case 6:
+ case BALL_WAIT_NEXT_SHAKE:
default:
- if (++sprite->data[5] == 31)
+ if (++sprite->sTimer == 31)
{
- sprite->data[5] = 0;
- sprite->data[3] &= -0x100;
+ sprite->sTimer = 0;
+ RESET_STATE(sprite->sState);
StartSpriteAffineAnim(sprite, 3);
- if (sprite->data[4] < 0)
- StartSpriteAffineAnim(sprite, 2);
+ if (sprite->sDirection < 0)
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_LEFT);
else
- StartSpriteAffineAnim(sprite, 1);
+ StartSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
PlaySE(SE_BALL);
}
@@ -1153,60 +1264,81 @@ static void sub_8171520(struct Sprite *sprite)
}
}
-static void sub_81717B4(struct Sprite *sprite)
+#undef STATE
+#undef SHAKES
+#undef SHAKE_INC
+#undef RESET_STATE
+
+#undef sState
+
+#define sTimer data[5]
+
+static void SpriteCB_Ball_Release(struct Sprite *sprite)
{
- if (++sprite->data[5] == 31)
+ if (++sprite->sTimer == 31)
{
sprite->data[5] = 0;
- sprite->callback = sub_8171AE4;
+ sprite->callback = SpriteCB_Ball_Release_Step;
}
}
+#undef sTimer
-static void sub_81717D8(struct Sprite *sprite)
+#define sState data[0]
+#define sTimer data[4]
+
+static void SpriteCB_Ball_Capture(struct Sprite *sprite)
{
- sprite->animPaused = 1;
- sprite->callback = sub_81717F8;
+ sprite->animPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Capture_Step;
sprite->data[3] = 0;
- sprite->data[4] = 0;
+ sprite->sTimer = 0;
sprite->data[5] = 0;
}
-static void sub_81717F8(struct Sprite *sprite)
+// Fade and unfade ball, create star animations, play sound effects
+static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite)
{
u8 *battler = &gBattleAnimTarget;
- sprite->data[4]++;
- if (sprite->data[4] == 40)
+ sprite->sTimer++;
+ if (sprite->sTimer == 40)
{
PlaySE(SE_RG_BALL_CLICK);
BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
- sub_81719EC(sprite);
+ MakeCaptureStars(sprite);
}
- else if (sprite->data[4] == 60)
+ else if (sprite->sTimer == 60)
{
BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
}
- else if (sprite->data[4] == 95)
+ else if (sprite->sTimer == 95)
{
- gDoingBattleAnim = 0;
+ gDoingBattleAnim = FALSE;
UpdateOamPriorityInAllHealthboxes(1);
m4aMPlayAllStop();
PlaySE(MUS_RG_CAUGHT_INTRO);
}
- else if (sprite->data[4] == 315)
+ else if (sprite->sTimer == 315)
{
FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum);
DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]);
- sprite->data[0] = 0;
- sprite->callback = sub_81718D8;
+
+ sprite->sState = 0;
+ sprite->callback = SpriteCB_Ball_FadeOut;
}
}
-static void sub_81718D8(struct Sprite *sprite)
+#undef sTimer
+#undef sState
+
+#define sState data[0]
+#define sFrame data[0] // re-use
+
+static void SpriteCB_Ball_FadeOut(struct Sprite *sprite)
{
u8 paletteIndex;
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = 0;
@@ -1216,7 +1348,7 @@ static void sub_81718D8(struct Sprite *sprite)
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]++;
+ sprite->sState++;
break;
case 1:
if (sprite->data[1]++ > 0)
@@ -1225,103 +1357,124 @@ static void sub_81718D8(struct Sprite *sprite)
sprite->data[2]++;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2]));
if (sprite->data[2] == 16)
- sprite->data[0]++;
+ sprite->sState++;
}
break;
case 2:
sprite->invisible = TRUE;
- sprite->data[0]++;
+ sprite->sState++;
break;
default:
if (!gPaletteFade.active)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- sprite->data[0] = 0;
- sprite->callback = sub_81719C0;
+
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
}
break;
}
}
-static void sub_81719C0(struct Sprite *sprite)
+#undef sState
+#undef sFrame
+
+#define sFrame data[0]
+
+static void DestroySpriteAfterOneFrame(struct Sprite *sprite)
{
- if (sprite->data[0] == 0)
- {
- sprite->data[0] = -1;
- }
+ if (sprite->sFrame == 0)
+ sprite->sFrame = -1;
else
{
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
+#undef sFrame
+
+#define sDuration data[0]
+#define sTargetX data[2]
+#define sTargetY data[4]
+#define sAmplitude data[5]
-static void sub_81719EC(struct Sprite *sprite)
+static void MakeCaptureStars(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++)
+ LoadBallParticleGfx(BALL_MASTER);
+ for (i = 0; i < ARRAY_COUNT(sCaptureStars); i++)
{
u8 spriteId = CreateSprite(&gBallParticlesSpriteTemplates[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;
+ gSprites[spriteId].sDuration = 24;
+ gSprites[spriteId].sTargetX = sprite->pos1.x + sCaptureStars[i].xOffset;
+ gSprites[spriteId].sTargetY = sprite->pos1.y + sCaptureStars[i].yOffset;
+ gSprites[spriteId].sAmplitude = sCaptureStars[i].amplitude;
InitAnimArcTranslation(&gSprites[spriteId]);
- gSprites[spriteId].callback = sub_8171AAC;
- StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[4]);
+ gSprites[spriteId].callback = SpriteCB_CaptureStar_Flicker;
+ StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[BALL_MASTER]);
}
}
}
-static void sub_8171AAC(struct Sprite *sprite)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+#undef sAmplitude
+
+static void SpriteCB_CaptureStar_Flicker(struct Sprite *sprite)
{
sprite->invisible = !sprite->invisible;
if (TranslateAnimHorizontalArc(sprite))
DestroySprite(sprite);
}
-static void sub_8171AE4(struct Sprite *sprite)
+#define sFrame data[0]
+#define sOffsetY data[1]
+
+// Poké Ball didn't catch - starts:
+// - Ball particle animations
+// - Wild mon fade to normal color
+// - Wild mon emerge from Poké Ball
+static void SpriteCB_Ball_Release_Step(struct Sprite *sprite)
{
u8 ballId;
StartSpriteAnim(sprite, 1);
StartSpriteAffineAnim(sprite, 0);
- sprite->callback = sub_8171BAC;
+ sprite->callback = SpriteCB_Ball_Release_Wait;
ballId = ItemIdToBallId(gLastUsedItem);
switch (ballId)
{
case 0 ... POKEBALL_COUNT - 1:
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
- LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId);
+ LaunchBallFadeMonTask(TRUE, gBattleAnimTarget, 14, ballId);
break;
}
+ // Animate Pokémon emerging from Poké Ball
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY = 4096;
}
-static void sub_8171BAC(struct Sprite *sprite)
+static void SpriteCB_Ball_Release_Wait(struct Sprite *sprite)
{
- int next = FALSE;
+ bool8 released = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
@@ -1329,28 +1482,31 @@ static void sub_8171BAC(struct Sprite *sprite)
if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
{
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
- next = TRUE;
+ released = TRUE;
}
else
{
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288;
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY -= 288;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY >> 8;
}
- if (sprite->animEnded && next)
+ if (sprite->animEnded && released)
{
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0;
- gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2;
- sprite->data[0] = 0;
- sprite->callback = sub_81719C0;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->wildMonInvisible;
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
UpdateOamPriorityInAllHealthboxes(1);
}
}
-static void sub_8171CAC(struct Sprite *sprite)
+#undef sFrame
+#undef sOffsetY
+
+static void SpriteCB_Ball_Block(struct Sprite *sprite)
{
- int i;
+ s32 i;
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
@@ -1359,29 +1515,40 @@ static void sub_8171CAC(struct Sprite *sprite)
for (i = 0; i < 6; i++)
sprite->data[i] = 0;
- sprite->callback = sub_8171CE8;
+ sprite->callback = SpriteCB_Ball_Block_Step;
}
-static void sub_8171CE8(struct Sprite *sprite)
+#define sDy data[0]
+#define sDx data[1]
+
+#define sFrame data[0] // re-use
+
+// Poké Ball moves down off screen after being blocked. The x-speed oscillates.
+static void SpriteCB_Ball_Block_Step(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;
+ s16 dy = sprite->sDy + 0x800;
+ s16 dx = sprite->sDx + 0x680;
+ sprite->pos2.x -= dx >> 8;
+ sprite->pos2.y += dy >> 8;
+ sprite->sDy = (sprite->sDy + 0x800) & 0xFF;
+ sprite->sDx = (sprite->sDx + 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;
+ sprite->sFrame = 0;
+ sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
UpdateOamPriorityInAllHealthboxes(1);
}
}
-static void sub_8171D60(u8 ballId)
+#undef sDy
+#undef sDx
+
+#undef sFrame
+
+static void LoadBallParticleGfx(u8 ballId)
{
u8 taskId;
@@ -1396,7 +1563,7 @@ u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
{
u8 taskId;
- sub_8171D60(ballId);
+ LoadBallParticleGfx(ballId);
taskId = CreateTask(gBallParticleAnimationFuncs[ballId], 5);
gTasks[taskId].data[1] = x;
gTasks[taskId].data[2] = y;
@@ -1408,10 +1575,10 @@ u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
return taskId;
}
-void sub_8171E20(void)
+static void IncrBallParticleCount(void)
{
if (gMain.inBattle)
- gBattleSpritesDataPtr->animationData->field_A++;
+ gBattleSpritesDataPtr->animationData->numBallParticles++;
}
static void PokeBallOpenParticleAnimation(u8 taskId)
@@ -1433,7 +1600,7 @@ static void PokeBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1492,7 +1659,7 @@ static void TimerBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1526,7 +1693,7 @@ static void DiveBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1561,7 +1728,7 @@ static void SafariBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1596,7 +1763,7 @@ static void UltraBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1637,7 +1804,7 @@ static void GreatBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1687,7 +1854,7 @@ static void RepeatBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1731,7 +1898,7 @@ static void MasterBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1775,7 +1942,7 @@ static void PremierBallOpenParticleAnimation(u8 taskId)
spriteId = CreateSprite(&gBallParticlesSpriteTemplates[ballId], x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
- sub_8171E20();
+ IncrBallParticleCount();
StartSpriteAnim(&gSprites[spriteId], gBallParticleAnimNums[ballId]);
gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
@@ -1802,7 +1969,7 @@ static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite)
static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
{
- int i, j;
+ s32 i, j;
if (!gMain.inBattle)
{
@@ -1813,8 +1980,8 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
}
else
{
- gBattleSpritesDataPtr->animationData->field_A--;
- if (gBattleSpritesDataPtr->animationData->field_A == 0)
+ gBattleSpritesDataPtr->animationData->numBallParticles--;
+ if (gBattleSpritesDataPtr->animationData->numBallParticles == 0)
{
for (i = 0; i < POKEBALL_COUNT; i++)
{
@@ -1840,70 +2007,78 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
}
}
-u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
+#define tCoeff data[0]
+#define tdCoeff data[1]
+#define tTimer data[2]
+#define tPalOffset data[3]
+#define tPaletteLo data[10]
+#define tPaletteHi data[11]
+#define tBallId data[15]
+
+u8 LaunchBallFadeMonTask(bool8 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;
+ taskId = CreateTask(Task_FadeMon_ToBallColor, 5);
+ gTasks[taskId].tBallId = ballId;
+ gTasks[taskId].tPalOffset = battler;
+ gTasks[taskId].tPaletteLo = selectedPalettes;
+ gTasks[taskId].tPaletteHi = selectedPalettes >> 16;
if (!unfadeLater)
{
BlendPalette(battler * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tdCoeff = 1;
}
else
{
BlendPalette(battler * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] = 16;
- gTasks[taskId].data[1] = -1;
- gTasks[taskId].func = sub_8172B40;
+ gTasks[taskId].tCoeff = 16;
+ gTasks[taskId].tdCoeff = -1;
+ gTasks[taskId].func = Task_FadeMon_ToNormal;
}
BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31));
return taskId;
}
-static void sub_8172AB0(u8 taskId)
+static void Task_FadeMon_ToBallColor(u8 taskId)
{
- u8 ballId = gTasks[taskId].data[15];
+ u8 ballId = gTasks[taskId].tBallId;
- if (gTasks[taskId].data[2] <= 16)
+ if (gTasks[taskId].tTimer <= 16)
{
- BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] += gTasks[taskId].data[1];
- gTasks[taskId].data[2]++;
+ BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]);
+ gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff;
+ gTasks[taskId].tTimer++;
}
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));
+ u32 selectedPalettes = (u16)gTasks[taskId].tPaletteLo | ((u16)gTasks[taskId].tPaletteHi << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB_WHITE);
DestroyTask(taskId);
}
}
-static void sub_8172B40(u8 taskId)
+static void Task_FadeMon_ToNormal(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;
+ u32 selectedPalettes = (u16)gTasks[taskId].tPaletteLo | ((u16)gTasks[taskId].tPaletteHi << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB_WHITE);
+ gTasks[taskId].func = Task_FadeMon_ToNormal_Step;
}
}
-static void sub_8172B90(u8 taskId)
+static void Task_FadeMon_ToNormal_Step(u8 taskId)
{
- u8 ballId = gTasks[taskId].data[15];
+ u8 ballId = gTasks[taskId].tBallId;
- if (gTasks[taskId].data[2] <= 16)
+ if (gTasks[taskId].tTimer <= 16)
{
- BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gBallOpenFadeColors[ballId]);
- gTasks[taskId].data[0] += gTasks[taskId].data[1];
- gTasks[taskId].data[2]++;
+ BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]);
+ gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff;
+ gTasks[taskId].tTimer++;
}
else
{
@@ -1911,6 +2086,14 @@ static void sub_8172B90(u8 taskId)
}
}
+#undef tCoeff
+#undef tdCoeff
+#undef tTimer
+#undef tPalOffset
+#undef tPaletteLo
+#undef tPaletteHi
+#undef tBallId
+
// arg0: TRUE to swap to mon, FALSE to swap to substitute
void AnimTask_SwapMonSpriteToFromSubstitute(u8 taskId)
{
@@ -2016,14 +2199,25 @@ void AnimTask_SetTargetToEffectBattler(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8172EF0(u8 battler, struct Pokemon *mon)
+#define tBattler data[0]
+#define tStarMove data[1]
+#define tStarTimer data[10]
+#define tStarIdx data[11]
+#define tNumStars data[12]
+#define tTimer data[13]
+
+#define sTaskId data[0]
+#define sPhase data[1] // For encircling stars
+#define sTimer data[1] // For diagnoal stars
+
+void TryShinyAnimation(u8 battler, struct Pokemon *mon)
{
- int isShiny;
+ bool8 isShiny;
u32 otId, personality;
u32 shinyValue;
- u8 taskId1, taskId2;
+ u8 taskCirc, taskDgnl;
- isShiny = 0;
+ isShiny = FALSE;
gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1;
otId = GetMonData(mon, MON_DATA_OT_ID);
personality = GetMonData(mon, MON_DATA_PERSONALITY);
@@ -2042,12 +2236,12 @@ void sub_8172EF0(u8 battler, struct Pokemon *mon)
LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_GOLD_STARS - ANIM_SPRITES_START]);
}
- 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;
+ taskCirc = CreateTask(Task_ShinyStars, 10);
+ taskDgnl = CreateTask(Task_ShinyStars, 10);
+ gTasks[taskCirc].tBattler = battler;
+ gTasks[taskDgnl].tBattler = battler;
+ gTasks[taskCirc].tStarMove = SHINY_STAR_ENCIRCLE;
+ gTasks[taskDgnl].tStarMove = SHINY_STAR_DIAGONAL;
return;
}
}
@@ -2055,58 +2249,60 @@ void sub_8172EF0(u8 battler, struct Pokemon *mon)
gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
}
-static void sub_8172FEC(u8 taskId)
+static void Task_ShinyStars(u8 taskId)
{
u8 battler;
u8 x, y;
u8 spriteId;
- u16 counter;
- s16 state;
+ u16 timer;
+ s16 starIdx;
u8 pan;
- if (gTasks[taskId].data[13] < 60)
+ if (gTasks[taskId].tTimer < 60)
{
- gTasks[taskId].data[13]++;
+ gTasks[taskId].tTimer++;
return;
}
- if (gBattleSpritesDataPtr->animationData->field_A)
+ // Wait until the ball particles have despawned
+ if (gBattleSpritesDataPtr->animationData->numBallParticles)
return;
- counter = gTasks[taskId].data[10]++;
- if (counter & 3)
+ timer = gTasks[taskId].tStarTimer++;
+ if (timer % 4) // Create sprite 1 of every 4 frames
return;
- battler = gTasks[taskId].data[0];
- x = GetBattlerSpriteCoord(battler, 0);
- y = GetBattlerSpriteCoord(battler, 1);
- state = gTasks[taskId].data[11];
- if (state == 0)
+ battler = gTasks[taskId].tBattler;
+ x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
+
+ starIdx = gTasks[taskId].tStarIdx;
+ if (starIdx == 0) // Big star
{
spriteId = CreateSprite(&gWishStarSpriteTemplate, x, y, 5);
}
- else if (state >= 0 && gTasks[taskId].data[11] < 4)
+ else if (starIdx >= 0 && gTasks[taskId].tStarIdx < 4) // Medium star
{
spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 4;
}
- else
+ else // Small star
{
spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5);
gSprites[spriteId].oam.tileNum += 5;
}
- if (gTasks[taskId].data[1] == 0)
+ if (gTasks[taskId].tStarMove == SHINY_STAR_ENCIRCLE)
{
- gSprites[spriteId].callback = sub_81731FC;
+ gSprites[spriteId].callback = SpriteCB_ShinyStars_Encircle;
}
else
{
- gSprites[spriteId].callback = sub_8173250;
+ gSprites[spriteId].callback = SpriteCB_ShinyStars_Diagonal;
gSprites[spriteId].pos2.x = -32;
gSprites[spriteId].pos2.y = 32;
gSprites[spriteId].invisible = TRUE;
- if (gTasks[taskId].data[11] == 0)
+ if (gTasks[taskId].tStarIdx == 0)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
pan = -64;
@@ -2117,24 +2313,24 @@ static void sub_8172FEC(u8 taskId)
}
}
- gSprites[spriteId].data[0] = taskId;
- gTasks[taskId].data[11]++;
+ gSprites[spriteId].sTaskId = taskId;
+ gTasks[taskId].tStarIdx++;
if (spriteId != MAX_SPRITES)
- gTasks[taskId].data[12]++;
+ gTasks[taskId].tNumStars++;
- if (gTasks[taskId].data[11] == 5)
- gTasks[taskId].func = sub_81731B0;
+ if (gTasks[taskId].tStarIdx == 5)
+ gTasks[taskId].func = Task_ShinyStars_Wait;
}
-static void sub_81731B0(u8 taskId)
+static void Task_ShinyStars_Wait(u8 taskId)
{
u8 battler;
- if (gTasks[taskId].data[12] == 0)
+ if (gTasks[taskId].tNumStars == 0)
{
- if (gTasks[taskId].data[1] == 1)
+ if (gTasks[taskId].tStarMove == SHINY_STAR_DIAGONAL)
{
- battler = gTasks[taskId].data[0];
+ battler = gTasks[taskId].tBattler;
gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
}
@@ -2142,25 +2338,24 @@ static void sub_81731B0(u8 taskId)
}
}
-static void sub_81731FC(struct Sprite *sprite)
+static void SpriteCB_ShinyStars_Encircle(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)
+ sprite->pos2.x = Sin(sprite->sPhase, 24);
+ sprite->pos2.y = Cos(sprite->sPhase, 24);
+ sprite->sPhase += 12;
+ if (sprite->sPhase > 255)
{
- gTasks[sprite->data[0]].data[12]--;
+ gTasks[sprite->sTaskId].tNumStars--;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
-static void sub_8173250(struct Sprite *sprite)
+static void SpriteCB_ShinyStars_Diagonal(struct Sprite *sprite)
{
- if (sprite->data[1] < 4)
- {
- sprite->data[1]++;
- }
+ // Delayed four frames to de-sync from encircling stars
+ if (sprite->sTimer < 4)
+ sprite->sTimer++;
else
{
sprite->invisible = FALSE;
@@ -2168,13 +2363,24 @@ static void sub_8173250(struct Sprite *sprite)
sprite->pos2.y -= 5;
if (sprite->pos2.x > 32)
{
- gTasks[sprite->data[0]].data[12]--;
+ gTasks[sprite->sTaskId].tNumStars--;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
}
}
+#undef tBattler
+#undef tStarMove
+#undef tStarTimer
+#undef tStarIdx
+#undef tNumStars
+#undef tTimer
+
+#undef sTaskId
+#undef sPhase
+#undef sTimer
+
void AnimTask_LoadPokeblockGfx(u8 taskId)
{
u8 paletteIndex;
@@ -2192,35 +2398,46 @@ void AnimTask_FreePokeblockGfx(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-static void sub_817330C(struct Sprite *sprite)
+#define sDuration data[0]
+#define sTargetX data[2]
+#define sTargetY data[4]
+#define sAmplitude data[5]
+
+static void SpriteCB_PokeBlock_Throw(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(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;
+ sprite->sDuration = 30;
+ sprite->sTargetX = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->sTargetY = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3];
+ sprite->sAmplitude = -32;
InitAnimArcTranslation(sprite);
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84;
- sprite->callback = sub_817339C;
+ sprite->callback = SpriteCB_PokeBlock_LiftArm;
}
-static void sub_817339C(struct Sprite *sprite)
+#undef sDuration
+#undef sTargetX
+#undef sTargetY
+#undef sAmplitude
+
+static void SpriteCB_PokeBlock_LiftArm(struct Sprite *sprite)
{
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
- sprite->callback = sub_81733D4;
+ sprite->callback = SpriteCB_PokeBlock_Arc;
}
-static void sub_81733D4(struct Sprite *sprite)
+static void SpriteCB_PokeBlock_Arc(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
sprite->data[0] = 0;
sprite->invisible = TRUE;
- sprite->callback = sub_8173400;
+ sprite->callback = SpriteCB_ThrowPokeBlock_Free;
}
}
-static void sub_8173400(struct Sprite *sprite)
+// Destroy after end of player animation
+static void SpriteCB_ThrowPokeBlock_Free(struct Sprite *sprite)
{
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded)
{
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 9bc4713cd..3461e9754 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -281,14 +281,14 @@ static void sub_8064734(void)
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].field_1_x1)
{
- sub_8172EF0(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]);
+ TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]);
}
@@ -369,7 +369,7 @@ static void sub_8064B04(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
else
{
@@ -497,7 +497,7 @@ static void sub_8064F40(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 79f56aaed..63aa6eaea 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -383,7 +383,7 @@ static void sub_814B69C(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index a82351ed7..858201b4b 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -290,9 +290,9 @@ static void sub_805F560(void)
bool32 r10 = FALSE;
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle() && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x80)
@@ -369,7 +369,7 @@ static void sub_805F560(void)
static void sub_805F994(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
{
@@ -481,7 +481,7 @@ static void sub_805FD00(void)
static void sub_805FDF0(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 259b20035..c9a3bc2e0 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -977,9 +977,9 @@ static void sub_8058B40(void)
bool32 r8 = FALSE;
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
@@ -1082,7 +1082,7 @@ static void sub_805902C(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index fd6616746..7796bef09 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -568,7 +568,7 @@ static void sub_81BBAE8(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 92e8d2386..76e84da41 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -263,9 +263,9 @@ static void sub_818686C(void)
bool32 r8 = FALSE;
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
@@ -350,7 +350,7 @@ static void sub_8186C48(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
else
{
@@ -479,7 +479,7 @@ static void sub_8187084(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
{
- sub_8172EF0(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 2362e3c84..387586f88 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -280,12 +280,12 @@ static void sub_8189D40(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
{
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
}
}
@@ -463,7 +463,7 @@ static void sub_818A470(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gUnknown_03005D7C[gActiveBattler]].callback == SpriteCallbackDummy
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index a5b1ae2f7..a26694a8e 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -286,9 +286,9 @@ static void CompleteOnChosenItem(void)
static void sub_816864C(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
- sub_8172EF0(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
- sub_8172EF0(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index a41d52845..8f7013e45 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -9893,6 +9893,7 @@ static void Cmd_handleballthrow(void)
else // not caught
{
gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+ // Maybe inject SpriteCB_TestBallThrow here
gBattlescriptCurrInstr = BattleScript_ShakeBallThrow;
}
}
diff --git a/src/m4a.c b/src/m4a.c
index 11a4525ea..b8f9e21c1 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -22,8 +22,7 @@ u8 gMPlayMemAccArea[0x10];
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
{
- u32 val1;
- u32 val2;
+ u32 val1, val2;
u32 fineAdjustShifted = fineAdjust << 24;
if (key > 178)
@@ -315,7 +314,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
void MusicPlayerJumpTableCopy(void)
{
- asm("swi 0x2A");
+ asm("svc 0x2A");
}
void ClearChain(void *x)
@@ -352,25 +351,25 @@ void SoundInit(struct SoundInfo *soundInfo)
| SOUND_ALL_MIX_FULL;
REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
- REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
- REG_DMA1DAD = (s32)&REG_FIFO_A;
- REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
- REG_DMA2DAD = (s32)&REG_FIFO_B;
+ REG_DMA1SAD = (u32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (u32)&REG_FIFO_A;
+ REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (u32)&REG_FIFO_B;
SOUND_INFO_PTR = soundInfo;
CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
soundInfo->maxChans = 8;
soundInfo->masterVolume = 15;
- soundInfo->plynote = (u32)ply_note;
+ soundInfo->plynote = ply_note;
soundInfo->CgbSound = DummyFunc;
soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
- soundInfo->ExtVolPit = (u32)DummyFunc;
+ soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc;
MPlayJumpTableCopy(gMPlayJumpTable);
- soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+ soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable;
SampleFreqSet(SOUND_MODE_FREQ_13379);
@@ -381,7 +380,7 @@ void SampleFreqSet(u32 freq)
{
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- freq = (freq & 0xF0000) >> 16;
+ freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT;
soundInfo->freq = freq;
soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
@@ -432,14 +431,9 @@ void m4aSoundMode(u32 mode)
soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
- temp = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (temp != 0)
+ for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++)
{
chan->status = 0;
- temp--;
- chan++;
}
}
@@ -469,37 +463,28 @@ void m4aSoundMode(u32 mode)
void SoundClear(void)
{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
s32 i;
- void *chan;
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ struct SoundChannel *chan;
if (soundInfo->ident != ID_NUMBER)
return;
soundInfo->ident++;
- i = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (i > 0)
+ for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++)
{
- ((struct SoundChannel *)chan)->status = 0;
- i--;
- chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ chan->status = 0;
}
- chan = soundInfo->cgbChans;
+ chan = (struct SoundChannel *)soundInfo->cgbChans;
if (chan)
{
- i = 1;
-
- while (i <= 4)
+ for (i=1; i<=4; i++,chan++)
{
soundInfo->CgbOscOff(i);
- ((struct CgbChannel *)chan)->sf = 0;
- i++;
- chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ chan->status = 0;
}
}
@@ -510,21 +495,20 @@ void m4aSoundVSyncOff(void)
{
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
- {
- soundInfo->ident += 10;
+ if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1)
+ return;
+ soundInfo->ident += 10;
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
- CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
- }
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
}
void m4aSoundVSyncOn(void)
@@ -580,7 +564,7 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
}
soundInfo->intp = (u32)mplayInfo;
- soundInfo->func = (u32)MPlayMain;
+ soundInfo->func = MPlayMain;
soundInfo->ident = ID_NUMBER;
mplayInfo->ident = ID_NUMBER;
}
@@ -614,28 +598,21 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader
mplayInfo->tempoC = 0;
mplayInfo->fadeOI = 0;
- i = 0;
- track = mplayInfo->tracks;
-
- while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++)
{
TrackStop(mplayInfo, track);
track->flags = MPT_FLG_EXIST | MPT_FLG_START;
track->chan = 0;
track->cmdPtr = songHeader->part[i];
- i++;
- track++;
}
- while (i < mplayInfo->trackCount)
+ for (; i < mplayInfo->trackCount; i++, track++)
{
TrackStop(mplayInfo, track);
track->flags = 0;
- i++;
- track++;
}
- if (songHeader->reverb & 0x80)
+ if (songHeader->reverb & SOUND_MODE_REVERB_SET)
m4aSoundMode(songHeader->reverb);
mplayInfo->ident = ID_NUMBER;
@@ -653,14 +630,9 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
mplayInfo->ident++;
mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
TrackStop(mplayInfo, track);
- i--;
- track++;
}
mplayInfo->ident = ID_NUMBER;
@@ -704,10 +676,8 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
{
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
u32 val;
@@ -719,9 +689,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
if (!val)
track->flags = 0;
-
- i--;
- track++;
}
if (mplayInfo->fadeOV & TEMPORARY_FADE)
@@ -734,10 +701,7 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
}
}
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
+ for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
{
if (track->flags & MPT_FLG_EXIST)
{
@@ -746,9 +710,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
track->volX = (fadeOV >> FADE_VOL_SHIFT);
track->flags |= MPT_FLG_VOLCHG;
}
-
- i--;
- track++;
}
}
@@ -756,7 +717,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr
{
if (track->flags & MPT_FLG_VOLSET)
{
- s32 x;
+ u32 x;
s32 y;
x = (u32)(track->vol * track->volX) >> 5;
diff --git a/src/m4a_1.s b/src/m4a_1.s
index cab4ed174..eace09b05 100644
--- a/src/m4a_1.s
+++ b/src/m4a_1.s
@@ -22,13 +22,13 @@ SoundMain:
ldr r0, lt_SOUND_INFO_PTR
ldr r0, [r0]
ldr r2, lt_ID_NUMBER
- ldr r3, [r0, o_SoundInfo_ident]
+ ldr r3, [r0, #o_SoundInfo_ident]
cmp r2, r3
beq SoundMain_1
bx lr @ Exit the function if ident doesn't match ID_NUMBER.
SoundMain_1:
adds r3, 1
- str r3, [r0, o_SoundInfo_ident]
+ str r3, [r0, #o_SoundInfo_ident]
push {r4-r7,lr}
mov r1, r8
mov r2, r9
@@ -36,7 +36,7 @@ SoundMain_1:
mov r4, r11
push {r0-r4}
sub sp, 0x18
- ldrb r1, [r0, o_SoundInfo_maxLines]
+ ldrb r1, [r0, #o_SoundInfo_maxLines]
cmp r1, 0 @ if maxLines is 0, there is no maximum
beq SoundMain_3
ldr r2, lt_REG_VCOUNT
@@ -48,24 +48,24 @@ SoundMain_2:
adds r1, r2
SoundMain_3:
str r1, [sp, 0x14]
- ldr r3, [r0, o_SoundInfo_func]
+ ldr r3, [r0, #o_SoundInfo_func]
cmp r3, 0
beq SoundMain_4
- ldr r0, [r0, o_SoundInfo_intp]
+ ldr r0, [r0, #o_SoundInfo_intp]
bl _081DD25E
ldr r0, [sp, 0x18]
SoundMain_4:
- ldr r3, [r0, o_SoundInfo_CgbSound]
+ ldr r3, [r0, #o_SoundInfo_CgbSound]
bl _081DD25E
ldr r0, [sp, 0x18]
- ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank]
+ ldr r3, [r0, #o_SoundInfo_pcmSamplesPerVBlank]
mov r8, r3
ldr r5, lt_o_SoundInfo_pcmBuffer
adds r5, r0
- ldrb r4, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r4, [r0, #o_SoundInfo_pcmDmaCounter]
subs r7, r4, 1
bls SoundMain_5
- ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod]
subs r1, r7
mov r2, r8
muls r2, r1
@@ -87,7 +87,7 @@ lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
thumb_func_start SoundMainRAM
SoundMainRAM:
- ldrb r3, [r0, o_SoundInfo_reverb]
+ ldrb r3, [r0, #o_SoundInfo_reverb]
cmp r3, 0
beq SoundMainRAM_NoReverb
adr r1, SoundMainRAM_Reverb
@@ -95,7 +95,7 @@ SoundMainRAM:
.arm
SoundMainRAM_Reverb:
cmp r4, 0x2
- addeq r7, r0, o_SoundInfo_pcmBuffer
+ addeq r7, r0, #o_SoundInfo_pcmBuffer
addne r7, r5, r8
mov r4, r8
_081DCEC4:
@@ -145,14 +145,14 @@ SoundMainRAM_NoReverb_Loop:
bgt SoundMainRAM_NoReverb_Loop
_081DCF36:
ldr r4, [sp, 0x18]
- ldr r0, [r4, o_SoundInfo_divFreq]
+ ldr r0, [r4, #o_SoundInfo_divFreq]
mov r12, r0
- ldrb r0, [r4, o_SoundInfo_maxChans]
- adds r4, o_SoundInfo_chans
+ ldrb r0, [r4, #o_SoundInfo_maxChans]
+ adds r4, #o_SoundInfo_chans
SoundMainRAM_ChanLoop:
str r0, [sp, 0x4]
- ldr r3, [r4, o_SoundChannel_wav]
+ ldr r3, [r4, #o_SoundChannel_wav]
ldr r0, [sp, 0x14]
cmp r0, 0
beq _081DCF60
@@ -169,7 +169,7 @@ _081DCF54:
.pool
_081DCF60:
- ldrb r6, [r4, o_SoundChannel_status]
+ ldrb r6, [r4, #o_SoundChannel_status]
movs r0, 0xC7
tst r0, r6
bne _081DCF6A
@@ -182,99 +182,99 @@ _081DCF6A:
tst r0, r6
bne _081DCFB0
movs r6, 0x3
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
adds r0, r3, 0
adds r0, 0x10
- ldr r1, [r4, o_SoundChannel_ct]
+ ldr r1, [r4, #o_SoundChannel_ct]
adds r0, r1
- str r0, [r4, o_SoundChannel_cp]
+ str r0, [r4, #o_SoundChannel_cp]
ldr r0, [r3, 0xC]
subs r0, r1
- str r0, [r4, o_SoundChannel_ct]
+ str r0, [r4, #o_SoundChannel_ct]
movs r5, 0
- strb r5, [r4, o_SoundChannel_ev]
- str r5, [r4, o_SoundChannel_fw]
+ strb r5, [r4, #o_SoundChannel_ev]
+ str r5, [r4, #o_SoundChannel_fw]
ldrb r2, [r3, 0x3]
movs r0, 0xC0
tst r0, r2
beq _081DCFF8
movs r0, 0x10
orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DCFF8
_081DCFA0:
- ldrb r5, [r4, o_SoundChannel_ev]
+ ldrb r5, [r4, #o_SoundChannel_ev]
movs r0, 0x4
tst r0, r6
beq _081DCFB6
- ldrb r0, [r4, o_SoundChannel_iel]
+ ldrb r0, [r4, #o_SoundChannel_iel]
subs r0, 1
- strb r0, [r4, o_SoundChannel_iel]
+ strb r0, [r4, #o_SoundChannel_iel]
bhi _081DD006
_081DCFB0:
movs r0, 0
- strb r0, [r4, o_SoundChannel_status]
+ strb r0, [r4, #o_SoundChannel_status]
b _081DD240
_081DCFB6:
movs r0, 0x40
tst r0, r6
beq _081DCFD6
- ldrb r0, [r4, o_SoundChannel_release]
+ ldrb r0, [r4, #o_SoundChannel_release]
muls r5, r0
lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_iev]
+ ldrb r0, [r4, #o_SoundChannel_iev]
cmp r5, r0
bhi _081DD006
_081DCFC8:
- ldrb r5, [r4, o_SoundChannel_iev]
+ ldrb r5, [r4, #o_SoundChannel_iev]
cmp r5, 0
beq _081DCFB0
movs r0, 0x4
orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DD006
_081DCFD6:
movs r2, 0x3
ands r2, r6
cmp r2, 0x2
bne _081DCFF4
- ldrb r0, [r4, o_SoundChannel_decay]
+ ldrb r0, [r4, #o_SoundChannel_decay]
muls r5, r0
lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_sustain]
+ ldrb r0, [r4, #o_SoundChannel_sustain]
cmp r5, r0
bhi _081DD006
adds r5, r0, 0
beq _081DCFC8
subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
b _081DD006
_081DCFF4:
cmp r2, 0x3
bne _081DD006
_081DCFF8:
- ldrb r0, [r4, o_SoundChannel_attack]
+ ldrb r0, [r4, #o_SoundChannel_attack]
adds r5, r0
cmp r5, 0xFF
bcc _081DD006
movs r5, 0xFF
subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
_081DD006:
- strb r5, [r4, o_SoundChannel_ev]
+ strb r5, [r4, #o_SoundChannel_ev]
ldr r0, [sp, 0x18]
- ldrb r0, [r0, o_SoundChannel_release]
+ ldrb r0, [r0, #o_SoundChannel_release]
adds r0, 0x1
muls r0, r5
lsrs r5, r0, 4
- ldrb r0, [r4, o_SoundChannel_rightVolume]
+ ldrb r0, [r4, #o_SoundChannel_rightVolume]
muls r0, r5
lsrs r0, 8
- strb r0, [r4, o_SoundChannel_er]
- ldrb r0, [r4, o_SoundChannel_leftVolume]
+ strb r0, [r4, #o_SoundChannel_er]
+ ldrb r0, [r4, #o_SoundChannel_leftVolume]
muls r0, r5
lsrs r0, 8
- strb r0, [r4, o_SoundChannel_el]
+ strb r0, [r4, #o_SoundChannel_el]
movs r0, 0x10
ands r0, r6
str r0, [sp, 0x10]
@@ -289,17 +289,17 @@ _081DD006:
str r0, [sp, 0x10]
_081DD03A:
ldr r5, [sp, 0x8]
- ldr r2, [r4, o_SoundChannel_ct]
- ldr r3, [r4, o_SoundChannel_cp]
+ ldr r2, [r4, #o_SoundChannel_ct]
+ ldr r3, [r4, #o_SoundChannel_cp]
adr r0, _081DD044
bx r0
.arm
_081DD044:
str r8, [sp]
- ldr r9, [r4, o_SoundChannel_fw]
- ldrb r10, [r4, o_SoundChannel_er]
- ldrb r11, [r4, o_SoundChannel_el]
- ldrb r0, [r4, o_SoundChannel_type]
+ ldr r9, [r4, #o_SoundChannel_fw]
+ ldrb r10, [r4, #o_SoundChannel_er]
+ ldrb r11, [r4, #o_SoundChannel_el]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x30
beq _081DD068
bl sub_82DF49C
@@ -307,7 +307,7 @@ _081DD044:
_081DD068:
mov r10, r10, lsl 16
mov r11, r11, lsl 16
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x8
beq _081DD19C
_081DD07C:
@@ -383,7 +383,7 @@ _081DD164:
ldrne r3, [sp, 0xC]
bne _081DD118
_081DD174:
- strb r2, [r4, o_SoundChannel_status]
+ strb r2, [r4, #o_SoundChannel_status]
mov r0, r5, lsr 30
bic r5, r5, 0xC0000000
rsb r0, r0, 0x3
@@ -395,7 +395,7 @@ _081DD174:
b _081DD234
_081DD19C:
push {r4,r12}
- ldr r1, [r4, o_SoundChannel_freq]
+ ldr r1, [r4, #o_SoundChannel_freq]
mul r4, r12, r1
ldrsb r0, [r3]
ldrsb r1, [r3, 0x1]!
@@ -434,10 +434,10 @@ _081DD208:
sub r3, r3, 0x1
pop {r4,r12}
_081DD228:
- str r9, [r4, o_SoundChannel_fw]
+ str r9, [r4, #o_SoundChannel_fw]
_081DD22C:
- str r2, [r4, o_SoundChannel_ct]
- str r3, [r4, o_SoundChannel_cp]
+ str r2, [r4, #o_SoundChannel_ct]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD234:
ldr r8, [sp]
add r0, pc, 0x1
@@ -467,33 +467,33 @@ _081DD25E:
arm_func_start sub_82DF49C
sub_82DF49C:
- ldr r6, [r4, o_SoundChannel_wav]
- ldrb r0, [r4, o_SoundChannel_status]
+ ldr r6, [r4, #o_SoundChannel_wav]
+ ldrb r0, [r4, #o_SoundChannel_status]
tst r0, 0x20
bne _081DD2B4
orr r0, r0, 0x20
- strb r0, [r4, o_SoundChannel_status]
- ldrb r0, [r4, o_SoundChannel_type]
+ strb r0, [r4, #o_SoundChannel_status]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
beq _081DD29C
ldr r1, [r6, 0xC]
add r1, r1, r6, lsl 1
add r1, r1, 0x20
sub r3, r1, r3
- str r3, [r4, o_SoundChannel_cp]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD29C:
ldrh r0, [r6]
cmp r0, 0
beq _081DD2B4
sub r3, r3, r6
sub r3, r3, 0x10
- str r3, [r4, o_SoundChannel_cp]
+ str r3, [r4, #o_SoundChannel_cp]
_081DD2B4:
push {r8,r12,lr}
mov r10, r10, lsl 16
mov r11, r11, lsl 16
- ldr r1, [r4, o_SoundChannel_freq]
- ldrb r0, [r4, o_SoundChannel_type]
+ ldr r1, [r4, #o_SoundChannel_freq]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x8
movne r8, 0x800000
muleq r8, r12, r1
@@ -501,8 +501,8 @@ _081DD2B4:
cmp r0, 0
beq _081DD468
mov r0, 0xFF000000
- str r0, [r4, o_SoundChannel_xpi]
- ldrb r0, [r4, o_SoundChannel_type]
+ str r0, [r4, #o_SoundChannel_xpi]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
bne _081DD3C0
bl sub_82DF758
@@ -555,7 +555,7 @@ _081DD398:
ldr r0, [sp, 0x1C]
cmp r0, 0
beq _081DD4F4
- ldr r3, [r4, o_SoundChannel_wav]
+ ldr r3, [r4, #o_SoundChannel_wav]
ldr r3, [r3, 0x8]
rsb lr, r2, 0
_081DD3B0:
@@ -612,7 +612,7 @@ _081DD440:
add r3, r3, 0x2
b _081DD4F0
_081DD468:
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
tst r0, 0x10
beq _081DD4F0
ldrsb r0, [r3, -0x1]!
@@ -653,7 +653,7 @@ _081DD4F0:
pop {r8,r12,pc}
_081DD4F4:
mov r2, 0
- strb r2, [r4, o_SoundChannel_status]
+ strb r2, [r4, #o_SoundChannel_status]
mov r0, r5, lsr 30
bic r5, r5, 0xC0000000
rsb r0, r0, 0x3
@@ -669,13 +669,13 @@ _081DD4F4:
sub_82DF758:
push {r0,r2,r5-r7,lr}
mov r0, r3, lsr 6
- ldr r1, [r4, o_SoundChannel_xpi]
+ ldr r1, [r4, #o_SoundChannel_xpi]
cmp r0, r1
beq _081DD594
- str r0, [r4, o_SoundChannel_xpi]
+ str r0, [r4, #o_SoundChannel_xpi]
mov r1, 0x21
mul r2, r1, r0
- ldr r1, [r4, o_SoundChannel_wav]
+ ldr r1, [r4, #o_SoundChannel_wav]
add r2, r2, r1
add r2, r2, 0x10
ldr r5, =gUnknown_03001300
@@ -749,7 +749,7 @@ _081DD5E2:
ply_fine:
push {r4,r5,lr}
adds r5, r1, 0
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq ply_fine_done
ply_fine_loop:
@@ -830,7 +830,7 @@ _081DD64A:
ply_goto:
push {lr}
ply_goto_1:
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r0, [r2, 0x3]
lsls r0, 8
ldrb r3, [r2, 0x2]
@@ -841,24 +841,24 @@ ply_goto_1:
lsls r0, 8
bl ldrb_r3_r2
orrs r0, r3
- str r0, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r0, [r1, #o_MusicPlayerTrack_cmdPtr]
pop {r0}
bx r0
thumb_func_end ply_goto
thumb_func_start ply_patt
ply_patt:
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
cmp r2, 3
bhs ply_patt_done
lsls r2, 2
adds r3, r1, r2
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
adds r2, 0x4
- str r2, [r3, o_MusicPlayerTrack_patternStack]
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ str r2, [r3, #o_MusicPlayerTrack_patternStack]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
adds r2, 1
- strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ strb r2, [r1, #o_MusicPlayerTrack_patternLevel]
b ply_goto
ply_patt_done:
b ply_fine
@@ -866,15 +866,15 @@ ply_patt_done:
thumb_func_start ply_pend
ply_pend:
- ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel]
cmp r2, 0
beq ply_pend_done
subs r2, 1
- strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ strb r2, [r1, #o_MusicPlayerTrack_patternLevel]
lsls r2, 2
adds r3, r1, r2
- ldr r2, [r3, o_MusicPlayerTrack_patternStack]
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r3, #o_MusicPlayerTrack_patternStack]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ply_pend_done:
bx lr
thumb_func_end ply_pend
@@ -882,17 +882,17 @@ ply_pend_done:
thumb_func_start ply_rept
ply_rept:
push {lr}
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
cmp r3, 0
bne ply_rept_1
adds r2, 1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
b ply_goto_1
ply_rept_1:
- ldrb r3, [r1, o_MusicPlayerTrack_repN]
+ ldrb r3, [r1, #o_MusicPlayerTrack_repN]
adds r3, 1
- strb r3, [r1, o_MusicPlayerTrack_repN]
+ strb r3, [r1, #o_MusicPlayerTrack_repN]
mov r12, r3
bl ld_r3_tp_adr_i
cmp r12, r3
@@ -900,9 +900,9 @@ ply_rept_1:
b ply_goto_1
ply_rept_2:
movs r3, 0
- strb r3, [r1, o_MusicPlayerTrack_repN]
+ strb r3, [r1, #o_MusicPlayerTrack_repN]
adds r2, 5
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
pop {r0}
bx r0
thumb_func_end ply_rept
@@ -911,7 +911,7 @@ ply_rept_2:
ply_prio:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_priority]
+ strb r3, [r1, #o_MusicPlayerTrack_priority]
bx r12
thumb_func_end ply_prio
@@ -920,11 +920,11 @@ ply_tempo:
mov r12, lr
bl ld_r3_tp_adr_i
lsls r3, 1
- strh r3, [r0, o_MusicPlayerInfo_tempoD]
- ldrh r2, [r0, o_MusicPlayerInfo_tempoU]
+ strh r3, [r0, #o_MusicPlayerInfo_tempoD]
+ ldrh r2, [r0, #o_MusicPlayerInfo_tempoU]
muls r3, r2
lsrs r3, 8
- strh r3, [r0, o_MusicPlayerInfo_tempoI]
+ strh r3, [r0, #o_MusicPlayerInfo_tempoI]
bx r12
thumb_func_end ply_tempo
@@ -932,35 +932,35 @@ ply_tempo:
ply_keysh:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_keyShift]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_keyShift]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_keysh
thumb_func_start ply_voice
ply_voice:
mov r12, lr
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
adds r2, 1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
lsls r2, r3, 1
adds r2, r3
lsls r2, 2
- ldr r3, [r0, o_MusicPlayerInfo_tone]
+ ldr r3, [r0, #o_MusicPlayerInfo_tone]
adds r2, r3
ldr r3, [r2]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_type]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_type]
ldr r3, [r2, 0x4]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_wav]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_wav]
ldr r3, [r2, 0x8]
bl chk_adr_r2
- str r3, [r1, o_MusicPlayerTrack_ToneData_attack]
+ str r3, [r1, #o_MusicPlayerTrack_ToneData_attack]
bx r12
thumb_func_end ply_voice
@@ -968,11 +968,11 @@ ply_voice:
ply_vol:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_vol]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_vol]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0x3
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_vol
@@ -981,11 +981,11 @@ ply_pan:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_pan]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_pan]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0x3
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_pan
@@ -994,11 +994,11 @@ ply_bend:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_bend]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_bend]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_bend
@@ -1006,11 +1006,11 @@ ply_bend:
ply_bendr:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_bendRange]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_bendRange]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_bendr
@@ -1018,7 +1018,7 @@ ply_bendr:
ply_lfodl:
mov r12, lr
bl ld_r3_tp_adr_i
- strb r3, [r1, o_MusicPlayerTrack_lfoDelay]
+ strb r3, [r1, #o_MusicPlayerTrack_lfoDelay]
bx r12
thumb_func_end ply_lfodl
@@ -1026,14 +1026,14 @@ ply_lfodl:
ply_modt:
mov r12, lr
bl ld_r3_tp_adr_i
- ldrb r0, [r1, o_MusicPlayerTrack_modT]
+ ldrb r0, [r1, #o_MusicPlayerTrack_modT]
cmp r0, r3
beq _081DD7AA
- strb r3, [r1, o_MusicPlayerTrack_modT]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_modT]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xF
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
_081DD7AA:
bx r12
thumb_func_end ply_modt
@@ -1043,18 +1043,18 @@ ply_tune:
mov r12, lr
bl ld_r3_tp_adr_i
subs r3, 0x40
- strb r3, [r1, o_MusicPlayerTrack_tune]
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_tune]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
movs r2, 0xC
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx r12
thumb_func_end ply_tune
thumb_func_start ply_port
ply_port:
mov r12, lr
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
adds r2, 1
ldr r0, =REG_SOUND1CNT_L @ sound register base address
@@ -1072,20 +1072,20 @@ m4aSoundVSync:
@ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1.
ldr r2, lt2_ID_NUMBER
- ldr r3, [r0, o_SoundInfo_ident]
+ ldr r3, [r0, #o_SoundInfo_ident]
subs r3, r2
cmp r3, 1
bhi m4aSoundVSync_Done
@ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA.
- ldrb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaCounter]
subs r1, 1
- strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ strb r1, [r0, #o_SoundInfo_pcmDmaCounter]
bgt m4aSoundVSync_Done
@ Reload the PCM DMA counter.
- ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
- strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod]
+ strb r1, [r0, #o_SoundInfo_pcmDmaCounter]
ldr r2, =REG_DMA1
@@ -1127,18 +1127,18 @@ m4aSoundVSync_Done:
thumb_func_start MPlayMain
MPlayMain:
ldr r2, lt2_ID_NUMBER
- ldr r3, [r0, o_MusicPlayerInfo_ident]
+ ldr r3, [r0, #o_MusicPlayerInfo_ident]
cmp r2, r3
beq _081DD82E
bx lr
_081DD82E:
adds r3, 0x1
- str r3, [r0, o_MusicPlayerInfo_ident]
+ str r3, [r0, #o_MusicPlayerInfo_ident]
push {r0,lr}
- ldr r3, [r0, o_MusicPlayerInfo_func]
+ ldr r3, [r0, #o_MusicPlayerInfo_func]
cmp r3, 0
beq _081DD840
- ldr r0, [r0, o_MusicPlayerInfo_intp]
+ ldr r0, [r0, #o_MusicPlayerInfo_intp]
bl call_r3
_081DD840:
pop {r0}
@@ -1149,7 +1149,7 @@ _081DD840:
mov r7, r11
push {r4-r7}
adds r7, r0, 0
- ldr r0, [r7, o_MusicPlayerInfo_status]
+ ldr r0, [r7, #o_MusicPlayerInfo_status]
cmp r0, 0
bge _081DD858
b _081DDA6C
@@ -1159,18 +1159,18 @@ _081DD858:
mov r8, r0
adds r0, r7, 0
bl FadeOutBody
- ldr r0, [r7, o_MusicPlayerInfo_status]
+ ldr r0, [r7, #o_MusicPlayerInfo_status]
cmp r0, 0
bge _081DD86C
b _081DDA6C
_081DD86C:
- ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
- ldrh r1, [r7, o_MusicPlayerInfo_tempoI]
+ ldrh r0, [r7, #o_MusicPlayerInfo_tempoC]
+ ldrh r1, [r7, #o_MusicPlayerInfo_tempoI]
adds r0, r1
b _081DD9BC
_081DD874:
- ldrb r6, [r7, o_MusicPlayerInfo_trackCount]
- ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ ldrb r6, [r7, #o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, #o_MusicPlayerInfo_tracks]
movs r3, 0x1
movs r4, 0
_081DD87C:
@@ -1183,7 +1183,7 @@ _081DD886:
mov r10, r3
orrs r4, r3
mov r11, r4
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq _081DD8BA
_081DD892:
@@ -1209,7 +1209,7 @@ _081DD8B4:
cmp r4, 0
bne _081DD892
_081DD8BA:
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x40
tst r0, r3
beq _081DD938
@@ -1218,33 +1218,33 @@ _081DD8BA:
movs r0, 0x80
strb r0, [r5]
movs r0, 0x2
- strb r0, [r5, o_MusicPlayerTrack_bendRange]
+ strb r0, [r5, #o_MusicPlayerTrack_bendRange]
movs r0, 0x40
- strb r0, [r5, o_MusicPlayerTrack_volX]
+ strb r0, [r5, #o_MusicPlayerTrack_volX]
movs r0, 0x16
- strb r0, [r5, o_MusicPlayerTrack_lfoSpeed]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoSpeed]
movs r0, 0x1
adds r1, r5, 0x6
- strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6]
+ strb r0, [r1, #o_MusicPlayerTrack_ToneData_type - 0x6]
b _081DD938
_081DD8E0:
- ldr r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r5, #o_MusicPlayerTrack_cmdPtr]
ldrb r1, [r2]
cmp r1, 0x80
bhs _081DD8EC
- ldrb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ ldrb r1, [r5, #o_MusicPlayerTrack_runningStatus]
b _081DD8F6
_081DD8EC:
adds r2, 0x1
- str r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r5, #o_MusicPlayerTrack_cmdPtr]
cmp r1, 0xBD
bcc _081DD8F6
- strb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ strb r1, [r5, #o_MusicPlayerTrack_runningStatus]
_081DD8F6:
cmp r1, 0xCF
bcc _081DD90C
mov r0, r8
- ldr r3, [r0, o_SoundInfo_plynote]
+ ldr r3, [r0, #o_SoundInfo_plynote]
adds r0, r1, 0
subs r0, 0xCF
adds r1, r7, 0
@@ -1256,15 +1256,15 @@ _081DD90C:
bls _081DD92E
adds r0, r1, 0
subs r0, 0xB1
- strb r0, [r7, o_MusicPlayerInfo_cmd]
+ strb r0, [r7, #o_MusicPlayerInfo_cmd]
mov r3, r8
- ldr r3, [r3, o_SoundInfo_MPlayJumpTable]
+ ldr r3, [r3, #o_SoundInfo_MPlayJumpTable]
lsls r0, 2
ldr r3, [r3, r0]
adds r0, r7, 0
adds r1, r5, 0
bl call_r3
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
cmp r0, 0
beq _081DD994
b _081DD938
@@ -1273,29 +1273,29 @@ _081DD92E:
subs r1, 0x80
adds r1, r0
ldrb r0, [r1]
- strb r0, [r5, o_MusicPlayerTrack_wait]
+ strb r0, [r5, #o_MusicPlayerTrack_wait]
_081DD938:
- ldrb r0, [r5, o_MusicPlayerTrack_wait]
+ ldrb r0, [r5, #o_MusicPlayerTrack_wait]
cmp r0, 0
beq _081DD8E0
subs r0, 0x1
- strb r0, [r5, o_MusicPlayerTrack_wait]
- ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed]
+ strb r0, [r5, #o_MusicPlayerTrack_wait]
+ ldrb r1, [r5, #o_MusicPlayerTrack_lfoSpeed]
cmp r1, 0
beq _081DD994
- ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ ldrb r0, [r5, #o_MusicPlayerTrack_mod]
cmp r0, 0
beq _081DD994
- ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ ldrb r0, [r5, #o_MusicPlayerTrack_lfoDelayC]
cmp r0, 0
beq _081DD95A
subs r0, 0x1
- strb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoDelayC]
b _081DD994
_081DD95A:
- ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC]
adds r0, r1
- strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ strb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC]
adds r1, r0, 0
subs r0, 0x40
lsls r0, 24
@@ -1307,16 +1307,16 @@ _081DD96E:
movs r0, 0x80
subs r2, r0, r1
_081DD972:
- ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ ldrb r0, [r5, #o_MusicPlayerTrack_mod]
muls r0, r2
asrs r2, r0, 6
- ldrb r0, [r5, o_MusicPlayerTrack_modM]
+ ldrb r0, [r5, #o_MusicPlayerTrack_modM]
eors r0, r2
lsls r0, 24
beq _081DD994
- strb r2, [r5, o_MusicPlayerTrack_modM]
+ strb r2, [r5, #o_MusicPlayerTrack_modM]
ldrb r0, [r5]
- ldrb r1, [r5, o_MusicPlayerTrack_modT]
+ ldrb r1, [r5, #o_MusicPlayerTrack_modT]
cmp r1, 0
bne _081DD98E
movs r1, 0xC
@@ -1325,7 +1325,7 @@ _081DD98E:
movs r1, 0x3
_081DD990:
orrs r0, r1
- strb r0, [r5, o_MusicPlayerTrack_flags]
+ strb r0, [r5, #o_MusicPlayerTrack_flags]
_081DD994:
mov r3, r10
mov r4, r11
@@ -1337,29 +1337,29 @@ _081DD998:
lsls r3, 1
b _081DD87C
_081DD9A4:
- ldr r0, [r7, o_MusicPlayerInfo_clock]
+ ldr r0, [r7, #o_MusicPlayerInfo_clock]
adds r0, 0x1
- str r0, [r7, o_MusicPlayerInfo_clock]
+ str r0, [r7, #o_MusicPlayerInfo_clock]
cmp r4, 0
bne _081DD9B6
movs r0, 0x80
lsls r0, 24
- str r0, [r7, o_MusicPlayerInfo_status]
+ str r0, [r7, #o_MusicPlayerInfo_status]
b _081DDA6C
_081DD9B6:
- str r4, [r7, o_MusicPlayerInfo_status]
- ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ str r4, [r7, #o_MusicPlayerInfo_status]
+ ldrh r0, [r7, #o_MusicPlayerInfo_tempoC]
subs r0, 0x96
_081DD9BC:
- strh r0, [r7, o_MusicPlayerInfo_tempoC]
+ strh r0, [r7, #o_MusicPlayerInfo_tempoC]
cmp r0, 0x96
bcc _081DD9C4
b _081DD874
_081DD9C4:
- ldrb r2, [r7, o_MusicPlayerInfo_trackCount]
- ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ ldrb r2, [r7, #o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, #o_MusicPlayerInfo_tracks]
_081DD9C8:
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
movs r1, 0x80
tst r1, r0
beq _081DDA62
@@ -1370,11 +1370,11 @@ _081DD9C8:
adds r0, r7, 0
adds r1, r5, 0
bl TrkVolPitSet
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq _081DDA58
_081DD9E6:
- ldrb r1, [r4, o_SoundChannel_status]
+ ldrb r1, [r4, #o_SoundChannel_status]
movs r0, 0xC7
tst r0, r1
bne _081DD9F6
@@ -1382,10 +1382,10 @@ _081DD9E6:
bl ClearChain
b _081DDA52
_081DD9F6:
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
movs r6, 0x7
ands r6, r0
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x3
tst r0, r3
beq _081DDA14
@@ -1397,11 +1397,11 @@ _081DD9F6:
orrs r0, r1
strb r0, [r4, o_CgbChannel_mo]
_081DDA14:
- ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ ldrb r3, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0xC
tst r0, r3
beq _081DDA52
- ldrb r1, [r4, o_SoundChannel_ky]
+ ldrb r1, [r4, #o_SoundChannel_ky]
movs r0, 0x8
ldrsb r0, [r5, r0]
adds r2, r1, r0
@@ -1411,9 +1411,9 @@ _081DDA28:
cmp r6, 0
beq _081DDA46
mov r0, r8
- ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq]
+ ldr r3, [r0, #o_SoundInfo_MidiKeyToCgbFreq]
adds r1, r2, 0
- ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ ldrb r2, [r5, #o_MusicPlayerTrack_pitM]
adds r0, r6, 0
bl call_r3
str r0, [r4, o_CgbChannel_fr]
@@ -1424,19 +1424,19 @@ _081DDA28:
b _081DDA52
_081DDA46:
adds r1, r2, 0
- ldrb r2, [r5, o_MusicPlayerTrack_pitM]
- ldr r0, [r4, o_SoundChannel_wav]
+ ldrb r2, [r5, #o_MusicPlayerTrack_pitM]
+ ldr r0, [r4, #o_SoundChannel_wav]
bl MidiKeyToFreq
- str r0, [r4, o_SoundChannel_freq]
+ str r0, [r4, #o_SoundChannel_freq]
_081DDA52:
- ldr r4, [r4, o_SoundChannel_np]
+ ldr r4, [r4, #o_SoundChannel_np]
cmp r4, 0
bne _081DD9E6
_081DDA58:
- ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ ldrb r0, [r5, #o_MusicPlayerTrack_flags]
movs r1, 0xF0
ands r0, r1
- strb r0, [r5, o_MusicPlayerTrack_flags]
+ strb r0, [r5, #o_MusicPlayerTrack_flags]
mov r2, r9
_081DDA62:
subs r2, 0x1
@@ -1446,7 +1446,7 @@ _081DDA62:
bgt _081DD9C8
_081DDA6C:
ldr r0, lt2_ID_NUMBER
- str r0, [r7, o_MusicPlayerInfo_ident]
+ str r0, [r7, #o_MusicPlayerInfo_ident]
pop {r0-r7}
mov r8, r0
mov r9, r1
@@ -1467,35 +1467,35 @@ lt2_ID_NUMBER: .word ID_NUMBER
TrackStop:
push {r4-r6,lr}
adds r5, r1, 0
- ldrb r1, [r5, o_MusicPlayerTrack_flags]
+ ldrb r1, [r5, #o_MusicPlayerTrack_flags]
movs r0, 0x80
tst r0, r1
beq TrackStop_Done
- ldr r4, [r5, o_MusicPlayerTrack_chan]
+ ldr r4, [r5, #o_MusicPlayerTrack_chan]
cmp r4, 0
beq TrackStop_3
movs r6, 0
TrackStop_Loop:
- ldrb r0, [r4, o_SoundChannel_status]
+ ldrb r0, [r4, #o_SoundChannel_status]
cmp r0, 0
beq TrackStop_2
- ldrb r0, [r4, o_SoundChannel_type]
+ ldrb r0, [r4, #o_SoundChannel_type]
movs r3, 0x7
ands r0, r3
beq TrackStop_1
ldr r3, =SOUND_INFO_PTR
ldr r3, [r3]
- ldr r3, [r3, o_SoundInfo_CgbOscOff]
+ ldr r3, [r3, #o_SoundInfo_CgbOscOff]
bl call_r3
TrackStop_1:
- strb r6, [r4, o_SoundChannel_status]
+ strb r6, [r4, #o_SoundChannel_status]
TrackStop_2:
- str r6, [r4, o_SoundChannel_track]
- ldr r4, [r4, o_SoundChannel_np]
+ str r6, [r4, #o_SoundChannel_track]
+ ldr r4, [r4, #o_SoundChannel_np]
cmp r4, 0
bne TrackStop_Loop
TrackStop_3:
- str r4, [r5, o_MusicPlayerTrack_chan]
+ str r4, [r5, #o_MusicPlayerTrack_chan]
TrackStop_Done:
pop {r4-r6}
pop {r0}
@@ -1550,41 +1550,41 @@ ply_note:
ldr r1, =gClockTable
adds r0, r1
ldrb r0, [r0]
- strb r0, [r5, o_MusicPlayerTrack_gateTime]
- ldr r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ strb r0, [r5, #o_MusicPlayerTrack_gateTime]
+ ldr r3, [r5, #o_MusicPlayerTrack_cmdPtr]
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB46
- strb r0, [r5, o_MusicPlayerTrack_key]
+ strb r0, [r5, #o_MusicPlayerTrack_key]
adds r3, 0x1
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB44
- strb r0, [r5, o_MusicPlayerTrack_velocity]
+ strb r0, [r5, #o_MusicPlayerTrack_velocity]
adds r3, 0x1
ldrb r0, [r3]
cmp r0, 0x80
bhs _081DDB44
- ldrb r1, [r5, o_MusicPlayerTrack_gateTime]
+ ldrb r1, [r5, #o_MusicPlayerTrack_gateTime]
adds r1, r0
- strb r1, [r5, o_MusicPlayerTrack_gateTime]
+ strb r1, [r5, #o_MusicPlayerTrack_gateTime]
adds r3, 0x1
_081DDB44:
- str r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ str r3, [r5, #o_MusicPlayerTrack_cmdPtr]
_081DDB46:
movs r0, 0
str r0, [sp, 0x14]
adds r4, r5, 0
- adds r4, o_MusicPlayerTrack_ToneData_type
+ adds r4, #o_MusicPlayerTrack_ToneData_type
ldrb r2, [r4]
movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL
tst r0, r2
beq _081DDB98
- ldrb r3, [r5, o_MusicPlayerTrack_key]
+ ldrb r3, [r5, #o_MusicPlayerTrack_key]
movs r0, TONEDATA_TYPE_SPL
tst r0, r2
beq _081DDB66
- ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable]
+ ldr r1, [r5, #o_MusicPlayerTrack_ToneData_keySplitTable]
adds r1, r3
ldrb r0, [r1]
b _081DDB68
@@ -1594,7 +1594,7 @@ _081DDB68:
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
- ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav]
+ ldr r0, [r5, #o_MusicPlayerTrack_ToneData_wav]
adds r1, r0
mov r9, r1
mov r6, r9
@@ -1787,7 +1787,7 @@ _081DDCBC:
bl call_r3
b _081DDCDC
_081DDCCE:
- ldr r0, [r5, o_MusicPlayerTrack_unk_3C]
+ ldr r0, [r5, #o_MusicPlayerTrack_unk_3C]
str r0, [r4, 0x18]
ldrb r2, [r5, 0x9]
adds r1, r3, 0
@@ -1816,37 +1816,37 @@ _081DDCEA:
thumb_func_start ply_endtie
ply_endtie:
push {r4,r5}
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
cmp r3, 0x80
bhs _081DDD16
- strb r3, [r1, o_MusicPlayerTrack_key]
+ strb r3, [r1, #o_MusicPlayerTrack_key]
adds r2, 0x1
- str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r2, [r1, #o_MusicPlayerTrack_cmdPtr]
b _081DDD18
_081DDD16:
- ldrb r3, [r1, o_MusicPlayerTrack_key]
+ ldrb r3, [r1, #o_MusicPlayerTrack_key]
_081DDD18:
- ldr r1, [r1, o_MusicPlayerTrack_chan]
+ ldr r1, [r1, #o_MusicPlayerTrack_chan]
cmp r1, 0
beq _081DDD40
movs r4, 0x83
movs r5, 0x40
_081DDD22:
- ldrb r2, [r1, o_SoundChannel_status]
+ ldrb r2, [r1, #o_SoundChannel_status]
tst r2, r4
beq _081DDD3A
tst r2, r5
bne _081DDD3A
- ldrb r0, [r1, o_SoundChannel_mk]
+ ldrb r0, [r1, #o_SoundChannel_mk]
cmp r0, r3
bne _081DDD3A
movs r0, 0x40
orrs r2, r0
- strb r2, [r1, o_SoundChannel_status]
+ strb r2, [r1, #o_SoundChannel_status]
b _081DDD40
_081DDD3A:
- ldr r1, [r1, o_SoundChannel_np]
+ ldr r1, [r1, #o_SoundChannel_np]
cmp r1, 0
bne _081DDD22
_081DDD40:
@@ -1857,9 +1857,9 @@ _081DDD40:
thumb_func_start clear_modM
clear_modM:
movs r2, 0
- strb r2, [r1, o_MusicPlayerTrack_modM]
- strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC]
- ldrb r2, [r1, o_MusicPlayerTrack_modT]
+ strb r2, [r1, #o_MusicPlayerTrack_modM]
+ strb r2, [r1, #o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r2, [r1, #o_MusicPlayerTrack_modT]
cmp r2, 0
bne _081DDD54
movs r2, 0xC
@@ -1867,17 +1867,17 @@ clear_modM:
_081DDD54:
movs r2, 0x3
_081DDD56:
- ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ ldrb r3, [r1, #o_MusicPlayerTrack_flags]
orrs r3, r2
- strb r3, [r1, o_MusicPlayerTrack_flags]
+ strb r3, [r1, #o_MusicPlayerTrack_flags]
bx lr
thumb_func_end clear_modM
thumb_func_start ld_r3_tp_adr_i
ld_r3_tp_adr_i_unchecked:
- ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr]
adds r3, r2, 1
- str r3, [r1, o_MusicPlayerTrack_cmdPtr]
+ str r3, [r1, #o_MusicPlayerTrack_cmdPtr]
ldrb r3, [r2]
bx lr
thumb_func_end ld_r3_tp_adr_i
@@ -1886,7 +1886,7 @@ ld_r3_tp_adr_i_unchecked:
ply_lfos:
mov r12, lr
bl ld_r3_tp_adr_i_unchecked
- strb r3, [r1, o_MusicPlayerTrack_lfoSpeed]
+ strb r3, [r1, #o_MusicPlayerTrack_lfoSpeed]
cmp r3, 0
bne _081DDD7C
bl clear_modM
@@ -1898,7 +1898,7 @@ _081DDD7C:
ply_mod:
mov r12, lr
bl ld_r3_tp_adr_i_unchecked
- strb r3, [r1, o_MusicPlayerTrack_mod]
+ strb r3, [r1, #o_MusicPlayerTrack_mod]
cmp r3, 0
bne _081DDD90
bl clear_modM
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 5f2123362..3e7caf133 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -150,20 +150,22 @@
#define JAM_HEART_EMPTY 2
#define JAM_HEART_FULL 3
+#define MAX_RELEARNER_MOVES (MAX_LEVEL_UP_MOVES > 25 ? MAX_LEVEL_UP_MOVES : 25)
+
static EWRAM_DATA struct
{
u8 state;
- u8 heartSpriteIds[16]; /*0x001*/
- u16 movesToLearn[25]; /*0x01A*/
- u8 partyMon; /*0x044*/
- u8 moveSlot; /*0x045*/
- struct ListMenuItem menuItems[25]; /*0x0E8*/
- u8 numMenuChoices; /*0x110*/
- u8 numToShowAtOnce; /*0x111*/
- u8 moveListMenuTask; /*0x112*/
- u8 moveListScrollArrowTask; /*0x113*/
- u8 moveDisplayArrowTask; /*0x114*/
- u16 scrollOffset; /*0x116*/
+ u8 heartSpriteIds[16]; /*0x001*/
+ u16 movesToLearn[MAX_RELEARNER_MOVES]; /*0x01A*/
+ u8 partyMon; /*0x044*/
+ u8 moveSlot; /*0x045*/
+ struct ListMenuItem menuItems[MAX_RELEARNER_MOVES]; /*0x0E8*/
+ u8 numMenuChoices; /*0x110*/
+ u8 numToShowAtOnce; /*0x111*/
+ u8 moveListMenuTask; /*0x112*/
+ u8 moveListScrollArrowTask; /*0x113*/
+ u8 moveDisplayArrowTask; /*0x114*/
+ u16 scrollOffset; /*0x116*/
} *sMoveRelearnerStruct = {0};
static EWRAM_DATA struct {
diff --git a/src/pokeball.c b/src/pokeball.c
index 829d22863..b176677bd 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -166,43 +166,43 @@ static const union AnimCmd *const sBallAnimSequences[] =
sBallAnimSeq6,
};
-static const union AffineAnimCmd sBallAffineAnimSeq0[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_0[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq1[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_Right[] =
{
AFFINEANIMCMD_FRAME(0, 0, -3, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq2[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_Left[] =
{
AFFINEANIMCMD_FRAME(0, 0, 3, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sBallAffineAnimSeq3[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_3[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd sBallAffineAnimSeq4[] =
+static const union AffineAnimCmd sAffineAnim_BallRotate_4[] =
{
AFFINEANIMCMD_FRAME(0, 0, 25, 1),
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const sBallAffineAnimSequences[] =
+static const union AffineAnimCmd *const sAffineAnim_BallRotate[] =
{
- sBallAffineAnimSeq0,
- sBallAffineAnimSeq1,
- sBallAffineAnimSeq2,
- sBallAffineAnimSeq3,
- sBallAffineAnimSeq4,
+ [BALL_AFFINE_ANIM_0] = sAffineAnim_BallRotate_0,
+ [BALL_ROTATE_RIGHT] = sAffineAnim_BallRotate_Right,
+ [BALL_ROTATE_LEFT] = sAffineAnim_BallRotate_Left,
+ [BALL_AFFINE_ANIM_3] = sAffineAnim_BallRotate_3,
+ [BALL_AFFINE_ANIM_4] = sAffineAnim_BallRotate_4,
};
const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
@@ -213,7 +213,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -222,7 +222,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -231,7 +231,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -240,7 +240,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -249,7 +249,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -258,7 +258,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -267,7 +267,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -276,7 +276,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -285,7 +285,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -294,7 +294,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -303,7 +303,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
{
@@ -312,7 +312,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
- .affineAnims = sBallAffineAnimSequences,
+ .affineAnims = sAffineAnim_BallRotate,
.callback = SpriteCB_TestBallThrow,
},
};
@@ -446,6 +446,7 @@ static void sub_80756D4(struct Sprite *sprite)
sprite->callback = sub_80756E0;
}
+// Start something for battler
static void sub_80756E0(struct Sprite *sprite)
{
if (++sprite->data[5] == 10)
@@ -458,6 +459,7 @@ static void sub_80756E0(struct Sprite *sprite)
}
}
+// Shrink player
static void sub_807574C(struct Sprite *sprite)
{
sprite->data[5]++;
@@ -738,7 +740,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
+ sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
if (gMain.inBattle)
diff --git a/src/pokemon.c b/src/pokemon.c
index 7cde8e0a6..188624d6a 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -6138,7 +6138,7 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
for (i = 0; i < MAX_MON_MOVES; i++)
learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
- for (i = 0; i < 20; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES; i++)
{
u16 moveLevel;
@@ -6171,7 +6171,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 numMoves = 0;
int i;
- for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
return numMoves;
@@ -6180,7 +6180,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
{
u16 learnedMoves[MAX_MON_MOVES];
- u16 moves[20];
+ u16 moves[MAX_LEVEL_UP_MOVES];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
@@ -6192,7 +6192,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
for (i = 0; i < MAX_MON_MOVES; i++)
learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
- for (i = 0; i < 20; i++)
+ for (i = 0; i < MAX_LEVEL_UP_MOVES; i++)
{
u16 moveLevel;