Sync battle anim - fight

This commit is contained in:
GriffinR
2022-08-16 14:51:48 -04:00
parent ba6bb34226
commit b598507a2e
5 changed files with 104 additions and 106 deletions
+2 -2
View File
@@ -404,7 +404,7 @@ void InitAnimLinearTranslation(struct Sprite *sprite);
void StartAnimLinearTranslation(struct Sprite *sprite); void StartAnimLinearTranslation(struct Sprite *sprite);
void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite); void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite);
bool8 AnimTranslateLinear(struct Sprite *sprite); bool8 AnimTranslateLinear(struct Sprite *sprite);
void RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite); void AnimTranslateLinear_WithFollowup(struct Sprite *sprite);
void BattleAnim_InitLinearTranslationWithDuration(struct Sprite *sprite); void BattleAnim_InitLinearTranslationWithDuration(struct Sprite *sprite);
void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite); void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite);
void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite); void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite);
@@ -425,7 +425,7 @@ u8 GetSpritePalIdxByBattler(u8 a1);
void AnimSpriteOnMonPos(struct Sprite *sprite); void AnimSpriteOnMonPos(struct Sprite *sprite);
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
void AnimThrowProjectile(struct Sprite *sprite); void AnimThrowProjectile(struct Sprite *sprite);
void AnimSnoreZ(struct Sprite *sprite); void AnimTravelDiagonally(struct Sprite *sprite);
s16 CloneBattlerSpriteWithBlend(u8 animBattler); s16 CloneBattlerSpriteWithBlend(u8 animBattler);
void DestroySpriteWithActiveSheet(struct Sprite *sprite); void DestroySpriteWithActiveSheet(struct Sprite *sprite);
void AnimTask_AlphaFadeIn(u8 taskId); void AnimTask_AlphaFadeIn(u8 taskId);
+1 -1
View File
@@ -585,7 +585,7 @@ const struct SpriteTemplate gSnoreZSpriteTemplate =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSnoreZ, .callback = AnimTravelDiagonally,
}; };
static const union AnimCmd sExplosionAnimCmds[] = static const union AnimCmd sExplosionAnimCmds[] =
+92 -94
View File
@@ -5,7 +5,7 @@
#include "task.h" #include "task.h"
#include "trig.h" #include "trig.h"
static void unc_080B08A0(struct Sprite *sprite); static void AnimUnusedHumanoidFoot(struct Sprite *sprite);
static void AnimSlideHandOrFootToTarget(struct Sprite *sprite); static void AnimSlideHandOrFootToTarget(struct Sprite *sprite);
static void AnimJumpKick(struct Sprite *sprite); static void AnimJumpKick(struct Sprite *sprite);
static void AnimBasicFistOrFoot(struct Sprite *sprite); static void AnimBasicFistOrFoot(struct Sprite *sprite);
@@ -23,19 +23,19 @@ static void AnimSuperpowerFireball(struct Sprite *sprite);
static void AnimArmThrustHit(struct Sprite *sprite); static void AnimArmThrustHit(struct Sprite *sprite);
static void AnimRevengeScratch(struct Sprite *sprite); static void AnimRevengeScratch(struct Sprite *sprite);
static void AnimFocusPunchFist(struct Sprite *sprite); static void AnimFocusPunchFist(struct Sprite *sprite);
static void sub_80B0B2C(struct Sprite *sprite); static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite);
static void sub_80B0BD8(struct Sprite *sprite); static void AnimCrossChopHand_Step(struct Sprite *sprite);
static void sub_80B0CB4(struct Sprite *sprite); static void AnimSlidingKick_Step(struct Sprite *sprite);
static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
static void AnimStompFootStep(struct Sprite *sprite); static void AnimStompFootStep(struct Sprite *sprite);
static void AnimStompFootEnd(struct Sprite *sprite); static void AnimStompFootEnd(struct Sprite *sprite);
static void sub_80B0EF0(struct Sprite *sprite); static void AnimBrickBreakWall_Step(struct Sprite *sprite);
static void sub_80B1050(struct Sprite *sprite); static void AnimBrickBreakWallShard_Step(struct Sprite *sprite);
static void sub_80B111C(struct Sprite *sprite); static void AnimSuperpowerOrb_Step(struct Sprite *sprite);
static void sub_80B11E4(struct Sprite *sprite); static void AnimSuperpowerRock_Step1(struct Sprite *sprite);
static void sub_80B12A4(struct Sprite *sprite); static void AnimSuperpowerRock_Step2(struct Sprite *sprite);
const struct SpriteTemplate gUnknown_83E668C = static const struct SpriteTemplate sUnusedHumanoidFootSpriteTemplate =
{ {
.tileTag = ANIM_TAG_HUMANOID_FOOT, .tileTag = ANIM_TAG_HUMANOID_FOOT,
.paletteTag = ANIM_TAG_HUMANOID_FOOT, .paletteTag = ANIM_TAG_HUMANOID_FOOT,
@@ -43,54 +43,46 @@ const struct SpriteTemplate gUnknown_83E668C =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = unc_080B08A0, .callback = AnimUnusedHumanoidFoot,
}; };
static const union AnimCmd sAnim_HandOrFoot[] = static const union AnimCmd sAnim_Fist[] =
{ {
ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(0, 1),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd sAnim_SlidingKick_0[] = static const union AnimCmd sAnim_FootWide[] =
{ {
ANIMCMD_FRAME(16, 1), ANIMCMD_FRAME(16, 1),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd sAnim_SlidingKick_1[] = static const union AnimCmd sAnim_FootTall[] =
{ {
ANIMCMD_FRAME(32, 1), ANIMCMD_FRAME(32, 1),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd sAnim_CrossChopHand_0[] = static const union AnimCmd sAnim_HandLeft[] =
{ {
ANIMCMD_FRAME(48, 1), ANIMCMD_FRAME(48, 1),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd sAnim_CrossChopHand_1[] = static const union AnimCmd sAnim_HandRight[] =
{ {
ANIMCMD_FRAME(48, 1, .hFlip = TRUE), ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd *const sAnims_HandOrFoot[] = static const union AnimCmd *const sAnims_HandsAndFeet[] =
{ {
sAnim_HandOrFoot, sAnim_Fist,
}; sAnim_FootWide,
sAnim_FootTall,
static const union AnimCmd *const sAnims_SlidingKick[] = sAnim_HandLeft,
{ sAnim_HandRight,
sAnim_SlidingKick_0,
sAnim_SlidingKick_1,
};
static const union AnimCmd *const sAnims_CrossChopHand[] =
{
sAnim_CrossChopHand_0,
sAnim_CrossChopHand_1,
}; };
const struct SpriteTemplate gKarateChopSpriteTemplate = const struct SpriteTemplate gKarateChopSpriteTemplate =
@@ -98,7 +90,7 @@ const struct SpriteTemplate gKarateChopSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlideHandOrFootToTarget, .callback = AnimSlideHandOrFootToTarget,
@@ -109,7 +101,7 @@ const struct SpriteTemplate gJumpKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick, .callback = AnimJumpKick,
@@ -120,7 +112,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBasicFistOrFoot, .callback = AnimBasicFistOrFoot,
@@ -131,7 +123,7 @@ const struct SpriteTemplate gFistFootRandomPosSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFistOrFootRandomPos, .callback = AnimFistOrFootRandomPos,
@@ -142,7 +134,7 @@ const struct SpriteTemplate gCrossChopHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_CrossChopHand, .anims = &sAnims_HandsAndFeet[3],
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossChopHand, .callback = AnimCrossChopHand,
@@ -153,7 +145,7 @@ const struct SpriteTemplate gSlidingKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SlidingKick, .anims = &sAnims_HandsAndFeet[1],
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlidingKick, .callback = AnimSlidingKick,
@@ -171,12 +163,13 @@ static const union AffineAnimCmd *const sAffineAnims_SpinningHandOrFoot[] =
sAffineAnim_SpinningHandOrFoot, sAffineAnim_SpinningHandOrFoot,
}; };
// Blaze Kick / Meteor Mash
const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate = const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate =
{ {
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32, .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = sAffineAnims_SpinningHandOrFoot, .affineAnims = sAffineAnims_SpinningHandOrFoot,
.callback = AnimSpinningKickOrPunch, .callback = AnimSpinningKickOrPunch,
@@ -199,7 +192,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32, .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = sAffineAnims_MegaPunchKick, .affineAnims = sAffineAnims_MegaPunchKick,
.callback = AnimSpinningKickOrPunch, .callback = AnimSpinningKickOrPunch,
@@ -210,7 +203,7 @@ const struct SpriteTemplate gStompFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SlidingKick, .anims = &sAnims_HandsAndFeet[1],
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot, .callback = AnimStompFoot,
@@ -301,7 +294,7 @@ const struct SpriteTemplate gArmThrustHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimArmThrustHit, .callback = AnimArmThrustHit,
@@ -405,13 +398,13 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32, .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot, .anims = sAnims_HandsAndFeet,
.images = NULL, .images = NULL,
.affineAnims = sAffineAnims_FocusPunchFist, .affineAnims = sAffineAnims_FocusPunchFist,
.callback = AnimFocusPunchFist, .callback = AnimFocusPunchFist,
}; };
static void unc_080B08A0(struct Sprite *sprite) static void AnimUnusedHumanoidFoot(struct Sprite *sprite)
{ {
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y += gBattleAnimArgs[1]; sprite->y += gBattleAnimArgs[1];
@@ -429,7 +422,7 @@ static void AnimSlideHandOrFootToTarget(struct Sprite *sprite)
} }
StartSpriteAnim(sprite, gBattleAnimArgs[6]); StartSpriteAnim(sprite, gBattleAnimArgs[6]);
gBattleAnimArgs[6] = 0; gBattleAnimArgs[6] = 0;
AnimSnoreZ(sprite); AnimTravelDiagonally(sprite);
} }
static void AnimJumpKick(struct Sprite *sprite) static void AnimJumpKick(struct Sprite *sprite)
@@ -475,8 +468,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
if (gBattleAnimArgs[2] < 0) if (gBattleAnimArgs[2] < 0)
gBattleAnimArgs[2] = Random() % 5; gBattleAnimArgs[2] = Random() % 5;
StartSpriteAnim(sprite, gBattleAnimArgs[2]); StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->x = GetBattlerSpriteCoord(battler, 2); sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(battler, 3); sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2; xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
x = Random() % xMod; x = Random() % xMod;
@@ -491,19 +484,19 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
sprite->y += y; sprite->y += y;
sprite->data[0] = gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[1];
sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->x, sprite->y, sprite->subpriority + 1); sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->x, sprite->y, sprite->subpriority + 1);
if (sprite->data[7] != 64) if (sprite->data[7] != MAX_SPRITES)
{ {
StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0); StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
gSprites[sprite->data[7]].callback = SpriteCallbackDummy; gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
} }
sprite->callback = sub_80B0B2C; sprite->callback = AnimFistOrFootRandomPos_Step;
} }
static void sub_80B0B2C(struct Sprite *sprite) static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite)
{ {
if (sprite->data[0] == 0) if (sprite->data[0] == 0)
{ {
if (sprite->data[7] != 64) if (sprite->data[7] != MAX_SPRITES)
{ {
FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum); FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
DestroySprite(&gSprites[sprite->data[7]]); DestroySprite(&gSprites[sprite->data[7]]);
@@ -531,10 +524,10 @@ static void AnimCrossChopHand(struct Sprite *sprite)
} }
sprite->data[4] = sprite->y - 20; sprite->data[4] = sprite->y - 20;
sprite->callback = StartAnimLinearTranslation; sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, sub_80B0BD8); StoreSpriteCallbackInData6(sprite, AnimCrossChopHand_Step);
} }
static void sub_80B0BD8(struct Sprite *sprite) static void AnimCrossChopHand_Step(struct Sprite *sprite)
{ {
if (++sprite->data[5] == 11) if (++sprite->data[5] == 11)
{ {
@@ -550,6 +543,7 @@ static void sub_80B0BD8(struct Sprite *sprite)
} }
} }
// Rolling Kick / Low Kick
static void AnimSlidingKick(struct Sprite *sprite) static void AnimSlidingKick(struct Sprite *sprite)
{ {
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
@@ -566,10 +560,10 @@ static void AnimSlidingKick(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[5]; sprite->data[5] = gBattleAnimArgs[5];
sprite->data[6] = gBattleAnimArgs[4]; sprite->data[6] = gBattleAnimArgs[4];
sprite->data[7] = 0; sprite->data[7] = 0;
sprite->callback = sub_80B0CB4; sprite->callback = AnimSlidingKick_Step;
} }
static void sub_80B0CB4(struct Sprite *sprite) static void AnimSlidingKick_Step(struct Sprite *sprite)
{ {
if (!AnimTranslateLinear(sprite)) if (!AnimTranslateLinear(sprite))
{ {
@@ -622,8 +616,8 @@ static void AnimStompFootStep(struct Sprite *sprite)
if (--sprite->data[0] == -1) if (--sprite->data[0] == -1)
{ {
sprite->data[0] = 6; sprite->data[0] = 6;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation; sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, AnimStompFootEnd); StoreSpriteCallbackInData6(sprite, AnimStompFootEnd);
} }
@@ -658,17 +652,18 @@ static void AnimDizzyPunchDuck(struct Sprite *sprite)
} }
} }
// The wall that appears when Brick Break is going to shatter the target's defensive wall
static void AnimBrickBreakWall(struct Sprite *sprite) static void AnimBrickBreakWall(struct Sprite *sprite)
{ {
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == 0)
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
} }
else else
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
} }
sprite->x += gBattleAnimArgs[1]; sprite->x += gBattleAnimArgs[1];
sprite->y += gBattleAnimArgs[2]; sprite->y += gBattleAnimArgs[2];
@@ -676,10 +671,10 @@ static void AnimBrickBreakWall(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4]; sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = 0; sprite->data[3] = 0;
sprite->callback = sub_80B0EF0; sprite->callback = AnimBrickBreakWall_Step;
} }
static void sub_80B0EF0(struct Sprite *sprite) static void AnimBrickBreakWall_Step(struct Sprite *sprite)
{ {
switch (sprite->data[0]) switch (sprite->data[0])
{ {
@@ -709,17 +704,18 @@ static void sub_80B0EF0(struct Sprite *sprite)
} }
} }
// Piece of shattered defensive wall flies off. Used by Brick Break when the target has a defensive wall
static void AnimBrickBreakWallShard(struct Sprite *sprite) static void AnimBrickBreakWallShard(struct Sprite *sprite)
{ {
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
} }
else else
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2]; sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3]; sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
} }
sprite->oam.tileNum += gBattleAnimArgs[1] * 16; sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
sprite->data[0] = 0; sprite->data[0] = 0;
@@ -745,10 +741,10 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
return; return;
} }
sprite->callback = sub_80B1050; sprite->callback = AnimBrickBreakWallShard_Step;
} }
static void sub_80B1050(struct Sprite *sprite) static void AnimBrickBreakWallShard_Step(struct Sprite *sprite)
{ {
sprite->x += sprite->data[6]; sprite->x += sprite->data[6];
sprite->y += sprite->data[7]; sprite->y += sprite->data[7];
@@ -760,8 +756,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
{ {
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == 0)
{ {
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[7] = gBattleAnimTarget; sprite->data[7] = gBattleAnimTarget;
} }
@@ -773,25 +769,26 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
sprite->data[0] = 0; sprite->data[0] = 0;
sprite->data[1] = 12; sprite->data[1] = 12;
sprite->data[2] = 8; sprite->data[2] = 8;
sprite->callback = sub_80B111C; sprite->callback = AnimSuperpowerOrb_Step;
} }
static void sub_80B111C(struct Sprite *sprite) static void AnimSuperpowerOrb_Step(struct Sprite *sprite)
{ {
if (++sprite->data[0] == 180) if (++sprite->data[0] == 180)
{ {
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
sprite->data[0] = 16; sprite->data[0] = 16;
sprite->data[1] = sprite->x; sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2); sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2);
sprite->data[3] = sprite->y; sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback = AnimTranslateLinear_WithFollowup;
} }
} }
// Floating rock that flies off to hit the target. Used by Superpower
static void AnimSuperpowerRock(struct Sprite *sprite) static void AnimSuperpowerRock(struct Sprite *sprite)
{ {
sprite->x = gBattleAnimArgs[0]; sprite->x = gBattleAnimArgs[0];
@@ -800,10 +797,10 @@ static void AnimSuperpowerRock(struct Sprite *sprite)
StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->y << 8)); StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->y << 8));
sprite->data[6] = gBattleAnimArgs[1]; sprite->data[6] = gBattleAnimArgs[1];
sprite->oam.tileNum += gBattleAnimArgs[2] * 4; sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
sprite->callback = sub_80B11E4; sprite->callback = AnimSuperpowerRock_Step1;
} }
static void sub_80B11E4(struct Sprite *sprite) static void AnimSuperpowerRock_Step1(struct Sprite *sprite)
{ {
void *var0; void *var0;
@@ -821,20 +818,20 @@ static void sub_80B11E4(struct Sprite *sprite)
} }
else else
{ {
s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3); s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = pos2 - pos0; sprite->data[0] = pos2 - pos0;
sprite->data[1] = pos3 - pos1; sprite->data[1] = pos3 - pos1;
sprite->data[2] = sprite->x << 4; sprite->data[2] = sprite->x << 4;
sprite->data[3] = sprite->y << 4; sprite->data[3] = sprite->y << 4;
sprite->callback = sub_80B12A4; sprite->callback = AnimSuperpowerRock_Step2;
} }
} }
static void sub_80B12A4(struct Sprite *sprite) static void AnimSuperpowerRock_Step2(struct Sprite *sprite)
{ {
u16 edgeX; u16 edgeX;
@@ -851,10 +848,10 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
{ {
u8 battler; u8 battler;
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{ {
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2); sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3); sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
battler = gBattleAnimTarget; battler = gBattleAnimTarget;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
} }
@@ -869,15 +866,15 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP); sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
sprite->data[0] = 16; sprite->data[0] = 16;
sprite->data[1] = sprite->x; sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(battler, 2); sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y; sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(battler, 3); sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback = AnimTranslateLinear_WithFollowup;
} }
static void sub_80B13D4(struct Sprite *sprite) static void AnimArmThrustHit_Step(struct Sprite *sprite)
{ {
if (sprite->data[0] == sprite->data[4]) if (sprite->data[0] == sprite->data[4])
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
@@ -888,8 +885,8 @@ static void AnimArmThrustHit(struct Sprite *sprite)
{ {
u8 turn; u8 turn;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[1] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[1]; sprite->data[3] = gBattleAnimArgs[1];
@@ -905,12 +902,12 @@ static void AnimArmThrustHit(struct Sprite *sprite)
StartSpriteAnim(sprite, sprite->data[1]); StartSpriteAnim(sprite, sprite->data[1]);
sprite->x2 = sprite->data[2]; sprite->x2 = sprite->data[2];
sprite->y2 = sprite->data[3]; sprite->y2 = sprite->data[3];
sprite->callback = sub_80B13D4; sprite->callback = AnimArmThrustHit_Step;
} }
static void AnimRevengeScratch(struct Sprite *sprite) static void AnimRevengeScratch(struct Sprite *sprite)
{ {
if (gBattleAnimArgs[2] == 0) if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, 0); InitSpritePosToAnimAttacker(sprite, 0);
else else
InitSpritePosToAnimTarget(sprite, FALSE); InitSpritePosToAnimTarget(sprite, FALSE);
@@ -922,6 +919,7 @@ static void AnimRevengeScratch(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
} }
// Fist shrinks toward target and shakes
static void AnimFocusPunchFist(struct Sprite *sprite) static void AnimFocusPunchFist(struct Sprite *sprite)
{ {
if (sprite->affineAnimEnded) if (sprite->affineAnimEnded)
+2 -2
View File
@@ -605,7 +605,7 @@ static void AnimEmberFlare(struct Sprite *sprite)
&& (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) && (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)
|| gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) || gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = AnimSnoreZ; sprite->callback = AnimTravelDiagonally;
sprite->callback(sprite); sprite->callback(sprite);
} }
@@ -613,7 +613,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
{ {
gBattleAnimArgs[0] = -gBattleAnimArgs[0]; gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = AnimSnoreZ; sprite->callback = AnimTravelDiagonally;
} }
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST // Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
+7 -7
View File
@@ -19,7 +19,7 @@
#define IS_DOUBLE_BATTLE() (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) #define IS_DOUBLE_BATTLE() (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3); static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3);
static void PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite); static void PlayerThrowBall_AnimTranslateLinear_WithFollowup(struct Sprite *sprite);
static void SpriteCB_RunAnimFastLinearTranslation(struct Sprite *sprite); static void SpriteCB_RunAnimFastLinearTranslation(struct Sprite *sprite);
static bool8 Dummy_ReturnFalse(void); static bool8 Dummy_ReturnFalse(void);
static void AnimThrowProjectile_Step(struct Sprite *sprite); static void AnimThrowProjectile_Step(struct Sprite *sprite);
@@ -958,7 +958,7 @@ void StartAnimLinearTranslation(struct Sprite *sprite)
sprite->sTransl_InitX = sprite->x; sprite->sTransl_InitX = sprite->x;
sprite->sTransl_InitY = sprite->y; sprite->sTransl_InitY = sprite->y;
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback = AnimTranslateLinear_WithFollowup;
sprite->callback(sprite); sprite->callback(sprite);
} }
@@ -967,7 +967,7 @@ void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite)
sprite->sTransl_InitX = sprite->x; sprite->sTransl_InitX = sprite->x;
sprite->sTransl_InitY = sprite->y; sprite->sTransl_InitY = sprite->y;
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
sprite->callback = PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback = PlayerThrowBall_AnimTranslateLinear_WithFollowup;
sprite->callback(sprite); sprite->callback(sprite);
} }
@@ -998,13 +998,13 @@ bool8 AnimTranslateLinear(struct Sprite *sprite)
return FALSE; return FALSE;
} }
void RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite) void AnimTranslateLinear_WithFollowup(struct Sprite *sprite)
{ {
if (AnimTranslateLinear(sprite)) if (AnimTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite); SetCallbackToStoredInData6(sprite);
} }
static void PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite) static void PlayerThrowBall_AnimTranslateLinear_WithFollowup(struct Sprite *sprite)
{ {
UpdatePlayerPosInThrowAnim(sprite); UpdatePlayerPosInThrowAnim(sprite);
if (AnimTranslateLinear(sprite)) if (AnimTranslateLinear(sprite))
@@ -1024,7 +1024,7 @@ void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite)
sprite->sTransl_InitX = sprite->x; sprite->sTransl_InitX = sprite->x;
sprite->sTransl_InitY = sprite->y; sprite->sTransl_InitY = sprite->y;
BattleAnim_InitLinearTranslationWithDuration(sprite); BattleAnim_InitLinearTranslationWithDuration(sprite);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback = AnimTranslateLinear_WithFollowup;
sprite->callback(sprite); sprite->callback(sprite);
} }
@@ -1411,7 +1411,7 @@ static void AnimThrowProjectile_Step(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
void AnimSnoreZ(struct Sprite *sprite) void AnimTravelDiagonally(struct Sprite *sprite)
{ {
bool8 r4; bool8 r4;
u8 battlerId, coordType; u8 battlerId, coordType;