From 9552ea633061e2eefcebc9b2ccb12fc6e40a94be Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 16 Aug 2022 15:53:59 -0400 Subject: [PATCH] Sync battle anim - ice --- data/battle_anim_scripts.s | 6 +- include/battle_anim.h | 6 +- src/battle_anim_ice.c | 129 +++++++++++++++++++------------------ 3 files changed, 71 insertions(+), 70 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 93904a4fa..8cb6c3502 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -3571,7 +3571,7 @@ Move_HAIL:: loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_BlendSelected, 10, 1, 3, 0, 6, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_Hail1, 5, + createvisualtask AnimTask_Hail, 5, loopsewithpan SE_M_HAIL, 0, 8, 10 waitforvisualfinish createvisualtask AnimTask_BlendSelected, 10, 1, 3, 6, 0, RGB_BLACK @@ -4049,7 +4049,7 @@ Move_MIST_BALL:: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, 32279, 16, RGB_WHITE, 16 delay 0 playsewithpan SE_M_HAZE, 0 - createvisualtask AnimTask_LoadMistTiles, 5, + createvisualtask AnimTask_MistBallFog, 5, createvisualtask AnimTask_BlendSelected, 10, 4, 3, 0, 16, RGB_WHITE delay 8 createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 70, 0 @@ -7067,7 +7067,7 @@ MistCloud:: Move_HAZE:: waitforvisualfinish playsewithpan SE_M_HAZE, 0 - createvisualtask AnimTask_Haze1, 5, + createvisualtask AnimTask_HazeScrollingFog, 5, delay 30 createvisualtask AnimTask_BlendSelected, 10, 0 | (0xF << 7), 2, 0, 16, RGB_BLACK delay 90 diff --git a/include/battle_anim.h b/include/battle_anim.h index f8c9d9c0a..c5c7626f8 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -546,9 +546,9 @@ void AnimTask_MoveSkyUppercutBg(u8 taskId); // ice.c extern const union AnimCmd *const gAnims_SmallBubblePair[]; -void AnimTask_Haze1(u8 taskId); -void AnimTask_LoadMistTiles(u8 taskId); -void AnimTask_Hail1(u8 taskId); +void AnimTask_HazeScrollingFog(u8 taskId); +void AnimTask_MistBallFog(u8 taskId); +void AnimTask_Hail(u8 taskId); void AnimTask_GetRolloutCounter(u8 taskId); // electric.c diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 3e63cdbe9..f5e4a32dc 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -9,21 +9,21 @@ struct HailStruct { - s32 unk0:10; - s32 unk1:10; - s32 unk2:8; + s32 x:10; + s32 y:10; + s32 bPosition:8; s32 unk3:4; }; -static void sub_80AF108(struct Sprite *sprite); -static void sub_80AF28C(struct Sprite *sprite); +static void AnimUnusedIceCrystalThrow(struct Sprite *sprite); +static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite); static void AnimIcePunchSwirlingParticle(struct Sprite *sprite); static void AnimIceBeamParticle(struct Sprite *sprite); static void AnimIceEffectParticle(struct Sprite *sprite); static void AnimFlickerIceEffectParticle(struct Sprite *sprite); +static void AnimSwirlingSnowball(struct Sprite *sprite); static void AnimSwirlingSnowball_Step1(struct Sprite *sprite); static void AnimSwirlingSnowball_Step2(struct Sprite *sprite); -static void AnimSwirlingSnowball_Step3(struct Sprite *sprite); static void AnimSwirlingSnowball_End(struct Sprite *sprite); static void AnimMoveParticleBeyondTarget(struct Sprite *sprite); static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite); @@ -39,25 +39,24 @@ static void InitIceBallAnim(struct Sprite *sprite); static void AnimThrowIceBall(struct Sprite *sprite); static void InitIceBallParticle(struct Sprite *sprite); static void AnimIceBallParticle(struct Sprite *sprite); -static void AnimTask_Haze2(u8 taskId); -static void AnimTask_OverlayFogTiles(u8 taskId); +static void AnimTask_HazeScrollingFog_Step(u8 taskId); +static void AnimTask_MistBallFog_Step(u8 taskId); static void AnimTask_Hail2(u8 taskId); static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c); -static const union AnimCmd gUnknown_83E62C0[] = +static const union AnimCmd sAnim_Unused[] = { ANIMCMD_FRAME(0, 5, .hFlip = TRUE), ANIMCMD_FRAME(1, 5, .hFlip = TRUE), ANIMCMD_JUMP(0), }; -static const union AnimCmd *const gUnknown_83E62CC[] = +static const union AnimCmd *const sAnims_Unused[] = { - gUnknown_83E62C0, + sAnim_Unused, }; -// not used -static const struct SpriteTemplate gUnknown_83E62D0 = +static const struct SpriteTemplate sUnusedIceCrystalThrowSpriteTemplate = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, @@ -65,10 +64,10 @@ static const struct SpriteTemplate gUnknown_83E62D0 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80AF108, + .callback = AnimUnusedIceCrystalThrow, }; -static const union AnimCmd gUnknown_83E62E8[] = +static const union AnimCmd sAnim_IceCrystalLargeChunk[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -105,10 +104,10 @@ static const union AnimCmd sAnim_SmallBubblePair[] = ANIMCMD_JUMP(0), }; -// unused -static const union AnimCmd *const gUnknown_83E631C[] = +// Unused, contains just the top left corner of the large ice crystal +static const union AnimCmd *const sAnims_IceCrystalLargeChunk[] = { - gUnknown_83E62E8, + sAnim_IceCrystalLargeChunk, }; static const union AnimCmd *const sAnims_IceCrystalLarge[] = @@ -245,7 +244,7 @@ const struct SpriteTemplate gSwirlingSnowballSpriteTemplate = .anims = sAnims_Snowball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSwirlingSnowball_Step1, + .callback = AnimSwirlingSnowball, }; const struct SpriteTemplate gBlizzardIceCrystalSpriteTemplate = @@ -332,7 +331,7 @@ const struct SpriteTemplate gSmogCloudSpriteTemplate = .callback = InitSwirlingFogAnim, }; -static const u8 gUnknown_83E64D4[] = +static const u8 sHazeBlendAmounts[] = { 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9, }; @@ -348,7 +347,7 @@ const struct SpriteTemplate gMistBallSpriteTemplate = .callback = AnimThrowMistBall, }; -static const u8 gUnknown_83E6500[] = +static const u8 sMistBlendAmounts[] = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, }; @@ -366,16 +365,16 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate = static const struct HailStruct sHailCoordData[] = { - {100, 120, 0, 2}, - {85, 120, 0, 0}, - {242, 120, 1, 1}, - {66, 120, 2, 1}, - {182, 120, 3, 0}, - {60, 120, 0, 2}, - {214, 120, 1, 0}, - {113, 120, 0, 1}, - {210, 120, 3, 1}, - {38, 120, 2, 0}, + {.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2}, + {.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0}, + {.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1}, + {.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1}, + {.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0}, + {.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2}, + {.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0}, + {.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1}, + {.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1}, + {.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0}, }; static const union AffineAnimCmd sAffineAnim_HailParticle_0[] = @@ -518,8 +517,7 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate = .callback = InitIceBallParticle, }; -// not used -static void sub_80AF108(struct Sprite *sprite) +static void AnimUnusedIceCrystalThrow(struct Sprite *sprite) { s16 targetX, targetY, attackerX, attackerY; @@ -535,11 +533,13 @@ static void sub_80AF108(struct Sprite *sprite) sprite->data[4] = gBattleAnimArgs[3] + targetY; SetupLinearTranslationWithFixedDuration(sprite); // won't match with while loop - for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2]) + for (; (targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32); + targetX += sprite->data[1], targetY += sprite->data[2]) ; sprite->data[1] = -sprite->data[1]; sprite->data[2] = -sprite->data[2]; - for (; (attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192); attackerX += sprite->data[1], attackerY += sprite->data[2]) + for (; (attackerX >= -32 && attackerX <= DISPLAY_WIDTH + 32) && (attackerY >= -32 && attackerY <= DISPLAY_HEIGHT + 32); + attackerX += sprite->data[1], attackerY += sprite->data[2]) ; sprite->x = attackerX; sprite->y = attackerY; @@ -551,11 +551,10 @@ static void sub_80AF108(struct Sprite *sprite) SetupLinearTranslationWithFixedDuration(sprite); sprite->data[3] = gBattleAnimArgs[5]; sprite->data[4] = gBattleAnimArgs[6]; - sprite->callback = sub_80AF28C; + sprite->callback = AnimUnusedIceCrystalThrow_Step; } -// not used -static void sub_80AF28C(struct Sprite *sprite) +static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite) { if (sprite->data[0] != 0) { @@ -645,7 +644,7 @@ static void AnimFlickerIceEffectParticle(struct Sprite *sprite) // arg 3: target y offset // arg 4: particle speed // arg 5: multiple targets? (boolean) -static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) +static void AnimSwirlingSnowball(struct Sprite *sprite) { s32 i; s16 tempDataHolder[8]; @@ -676,8 +675,9 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) { sprite->data[0] = 1; AnimFastTranslateLinear(sprite); - if ((u32)(sprite->x + sprite->x2 + 16) > 272 - || sprite->y + sprite->y2 > 160 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 + || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) break; } @@ -687,10 +687,10 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) for (i = 0; i < 8; ++i) sprite->data[i] = tempDataHolder[i]; sprite->callback = InitAndStartAnimFastLinearTranslationWithSpeed; - StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2); + StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step1); } -static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) { s16 tempVar; @@ -703,11 +703,11 @@ static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) sprite->data[3] = Sin(sprite->data[0], tempVar); sprite->data[4] = Cos(sprite->data[0], 0xF); sprite->data[5] = 0; - sprite->callback = AnimSwirlingSnowball_Step3; + sprite->callback = AnimSwirlingSnowball_Step2; sprite->callback(sprite); } -static void AnimSwirlingSnowball_Step3(struct Sprite *sprite) +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) { s16 tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20; @@ -780,8 +780,9 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) { sprite->data[0] = 1; AnimFastTranslateLinear(sprite); - if ((u32)(sprite->x + sprite->x2 + 16) > 272 - || sprite->y + sprite->y2 > 160 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 + || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) break; } @@ -806,8 +807,9 @@ static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite) sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; if (sprite->data[0] == 1) { - if ((u32)(sprite->x + sprite->x2 + 16) > 272 - || sprite->y + sprite->y2 > 160 + if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16 + || sprite->x + sprite->x2 < -16 + || sprite->y + sprite->y2 > DISPLAY_HEIGHT || sprite->y + sprite->y2 < -16) DestroyAnimSprite(sprite); } @@ -927,7 +929,7 @@ static void AnimSwirlingFogAnim(struct Sprite *sprite) } // Fades mons to black and places foggy overlay in Haze. -void AnimTask_Haze1(u8 taskId) +void AnimTask_HazeScrollingFog(u8 taskId) { struct BattleAnimBgData animBg; @@ -947,10 +949,10 @@ void AnimTask_Haze1(u8 taskId) LoadPalette(&gDefaultWeatherSpritePalette, animBg.paletteId * 16, 32); if (IsContest()) RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0); - gTasks[taskId].func = AnimTask_Haze2; + gTasks[taskId].func = AnimTask_HazeScrollingFog_Step; } -static void AnimTask_Haze2(u8 taskId) +static void AnimTask_HazeScrollingFog_Step(u8 taskId) { struct BattleAnimBgData animBg; @@ -962,7 +964,7 @@ static void AnimTask_Haze2(u8 taskId) { gTasks[taskId].data[10] = 0; ++gTasks[taskId].data[9]; - gTasks[taskId].data[11] = gUnknown_83E64D4[gTasks[taskId].data[9]]; + gTasks[taskId].data[11] = sHazeBlendAmounts[gTasks[taskId].data[9]]; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); if (gTasks[taskId].data[11] == 9) { @@ -1024,8 +1026,7 @@ static void AnimThrowMistBall(struct Sprite *sprite) sprite->callback = TranslateAnimSpriteToTargetMonLocation; } -// Displays misty background in Mist Ball. -void AnimTask_LoadMistTiles(u8 taskId) +void AnimTask_MistBallFog(u8 taskId) { struct BattleAnimBgData animBg; @@ -1046,10 +1047,10 @@ void AnimTask_LoadMistTiles(u8 taskId) if (IsContest()) RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0); gTasks[taskId].data[15] = -1; - gTasks[taskId].func = AnimTask_OverlayFogTiles; + gTasks[taskId].func = AnimTask_MistBallFog_Step; } -static void AnimTask_OverlayFogTiles(u8 taskId) +static void AnimTask_MistBallFog_Step(u8 taskId) { struct BattleAnimBgData animBg; @@ -1058,7 +1059,7 @@ static void AnimTask_OverlayFogTiles(u8 taskId) { case 0: gTasks[taskId].data[9] += 1; - gTasks[taskId].data[11] = gUnknown_83E6500[gTasks[taskId].data[9]]; + gTasks[taskId].data[11] = sMistBlendAmounts[gTasks[taskId].data[9]]; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11])); if (gTasks[taskId].data[11] == 5) { @@ -1249,7 +1250,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite) } // Creates Hail. -void AnimTask_Hail1(u8 taskId) +void AnimTask_Hail(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1310,7 +1311,7 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, if (unk != 2) { - id = GetBattlerAtPosition(sHailCoordData[hailStructId].unk2); + id = GetBattlerAtPosition(sHailCoordData[hailStructId].bPosition); if (IsBattlerSpriteVisible(id)) { possibleBool = TRUE; @@ -1330,14 +1331,14 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, } else { - battlerX = (sHailCoordData[hailStructId].unk0); - battlerY = (sHailCoordData[hailStructId].unk1); + battlerX = sHailCoordData[hailStructId].x; + battlerY = sHailCoordData[hailStructId].y; } } else { - battlerX = (sHailCoordData[hailStructId].unk0); - battlerY = (sHailCoordData[hailStructId].unk1); + battlerX = sHailCoordData[hailStructId].x; + battlerY = sHailCoordData[hailStructId].y; } spriteX = battlerX - ((battlerY + 8) / 2); id = CreateSprite(&sHailParticleSpriteTemplate, spriteX, -8, 18);