Sync battle anim - ice

This commit is contained in:
GriffinR
2022-08-16 15:53:59 -04:00
parent 3a0cd4180d
commit 9552ea6330
3 changed files with 71 additions and 70 deletions
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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
+65 -64
View File
@@ -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);