diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/AgbRfu_LinkManager.c | 4 | ||||
-rwxr-xr-x | src/battle_anim_throw.c (renamed from src/battle_anim_special.c) | 1027 | ||||
-rw-r--r-- | src/battle_controller_link_opponent.c | 8 | ||||
-rw-r--r-- | src/battle_controller_link_partner.c | 2 | ||||
-rw-r--r-- | src/battle_controller_opponent.c | 8 | ||||
-rw-r--r-- | src/battle_controller_player.c | 6 | ||||
-rw-r--r-- | src/battle_controller_player_partner.c | 2 | ||||
-rw-r--r-- | src/battle_controller_recorded_opponent.c | 8 | ||||
-rw-r--r-- | src/battle_controller_recorded_player.c | 6 | ||||
-rw-r--r-- | src/battle_controller_wally.c | 4 | ||||
-rw-r--r-- | src/battle_script_commands.c | 1 | ||||
-rw-r--r-- | src/m4a.c | 111 | ||||
-rw-r--r-- | src/m4a_1.s | 456 | ||||
-rw-r--r-- | src/move_relearner.c | 24 | ||||
-rw-r--r-- | src/pokeball.c | 50 | ||||
-rw-r--r-- | src/pokemon.c | 8 |
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; } } @@ -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)®_FIFO_A; - REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (s32)®_FIFO_B; + REG_DMA1SAD = (u32)soundInfo->pcmBuffer; + REG_DMA1DAD = (u32)®_FIFO_A; + REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (u32)®_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; |