Sync battle anim - ghost

This commit is contained in:
GriffinR
2022-08-16 15:27:42 -04:00
parent 796d307ffb
commit ba890e57a4
5 changed files with 109 additions and 107 deletions
+1 -1
View File
@@ -60,7 +60,7 @@ extern u8 gBattleAnimTarget;
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
extern s32 gAnimMoveDmg; extern s32 gAnimMoveDmg;
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gUnknown_2037F24; extern u8 gAnimCustomPanning;
// battle_anim.c // battle_anim.c
extern const struct OamData gOamData_AffineOff_ObjNormal_8x8; extern const struct OamData gOamData_AffineOff_ObjNormal_8x8;
+2 -2
View File
@@ -36,7 +36,7 @@ EWRAM_DATA static u16 sAnimMoveIndex = 0;
EWRAM_DATA u8 gBattleAnimAttacker = 0; EWRAM_DATA u8 gBattleAnimAttacker = 0;
EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u8 gBattleAnimTarget = 0;
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnknown_2037F24 = 0; EWRAM_DATA u8 gAnimCustomPanning = 0;
// Function Declarations // Function Declarations
static void AddSpriteIndex(u16 index); static void AddSpriteIndex(u16 index);
@@ -1809,7 +1809,7 @@ void ClearBattleAnimationVars(void)
sAnimMoveIndex = 0; sAnimMoveIndex = 0;
gBattleAnimAttacker = 0; gBattleAnimAttacker = 0;
gBattleAnimTarget = 0; gBattleAnimTarget = 0;
gUnknown_2037F24 = 0; gAnimCustomPanning = 0;
} }
void DoMoveAnim(u16 move) void DoMoveAnim(u16 move)
+1 -1
View File
@@ -1113,7 +1113,7 @@ static void AnimWillOWispOrb_Step(struct Sprite *sprite)
sprite->data[5] = (sprite->data[5] + 4) & 0xFF; sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
newData5 = sprite->data[5]; newData5 = sprite->data[5];
if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0) if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
PlaySE12WithPanning(SE_M_FLAME_WHEEL, gUnknown_2037F24); PlaySE12WithPanning(SE_M_FLAME_WHEEL, gAnimCustomPanning);
} }
else else
{ {
+104 -102
View File
@@ -9,39 +9,39 @@
#include "constants/songs.h" #include "constants/songs.h"
static void AnimConfuseRayBallBounce(struct Sprite *sprite); static void AnimConfuseRayBallBounce(struct Sprite *sprite);
static void sub_80B52D0(struct Sprite *sprite); static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite);
static void sub_80B5344(struct Sprite *sprite); static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite);
static void sub_80B53C0(struct Sprite *sprite); static void UpdateConfuseRayBallBlend(struct Sprite *sprite);
static void AnimConfuseRayBallSpiral(struct Sprite *sprite); static void AnimConfuseRayBallSpiral(struct Sprite *sprite);
static void sub_80B5470(struct Sprite *sprite); static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite);
static void sub_80B5570(u8 taskId); static void AnimTask_NightShadeClone_Step1(u8 taskId);
static void sub_80B55C8(u8 taskId); static void AnimTask_NightShadeClone_Step2(u8 taskId);
static void AnimShadowBall(struct Sprite *sprite); static void AnimShadowBall(struct Sprite *sprite);
static void AnimShadowBallStep(struct Sprite *sprite); static void AnimShadowBall_Step(struct Sprite *sprite);
static void AnimLick(struct Sprite *sprite); static void AnimLick(struct Sprite *sprite);
static void sub_80B5810(struct Sprite *sprite); static void AnimLick_Step(struct Sprite *sprite);
static void sub_80B59D4(u8 taskId); static void AnimTask_NightmareClone_Step(u8 taskId);
static void sub_80B5AD4(u8 taskId); static void AnimTask_SpiteTargetShadow_Step1(u8 taskId);
static void sub_80B5D38(u8 taskId); static void AnimTask_SpiteTargetShadow_Step2(u8 taskId);
static void sub_80B5DCC(u8 taskId); static void AnimTask_SpiteTargetShadow_Step3(u8 taskId);
static void AnimDestinyBondWhiteShadow(struct Sprite *sprite); static void AnimDestinyBondWhiteShadow(struct Sprite *sprite);
static void sub_80B5FE0(struct Sprite *sprite); static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite);
static void sub_80B623C(u8 taskId); static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId);
static void sub_80B6468(u8 taskId); static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId);
static void sub_80B65F0(u8 taskId); static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId);
static void AnimCurseNail(struct Sprite *sprite); static void AnimCurseNail(struct Sprite *sprite);
static void sub_80B66A8(struct Sprite *sprite); static void AnimCurseNail_Step1(struct Sprite *sprite);
static void sub_80B6728(struct Sprite *sprite); static void AnimCurseNail_Step2(struct Sprite *sprite);
static void sub_80B67A0(struct Sprite *sprite); static void AnimCurseNail_End(struct Sprite *sprite);
static void AnimGhostStatusSprite(struct Sprite *sprite); static void AnimGhostStatusSprite(struct Sprite *sprite);
static void sub_80B68A8(struct Sprite *sprite); static void AnimGhostStatusSprite_End(struct Sprite *sprite);
static void sub_80B696C(u8 taskId); static void AnimTask_GrudgeFlames_Step(u8 taskId);
static void AnimGrudgeFlame(struct Sprite *sprite); static void AnimGrudgeFlame(struct Sprite *sprite);
static void sub_80B7158(struct Sprite *sprite); static void AnimMonMoveCircular(struct Sprite *sprite);
static void sub_80B6BE4(u8 taskId); static void sub_80B6BE4(u8 taskId);
static void sub_80B6F30(u8 taskId); static void sub_80B6F30(u8 taskId);
static void sub_80B6FC4(u8 taskId); static void sub_80B6FC4(u8 taskId);
static void sub_80B71B0(struct Sprite *sprite); static void AnimMonMoveCircular_Step(struct Sprite *sprite);
static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] = static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] =
{ {
@@ -125,17 +125,15 @@ const struct SpriteTemplate gLickSpriteTemplate =
.callback = AnimLick, .callback = AnimLick,
}; };
// not used static const union AffineAnimCmd sAffineAnim_Unused[] =
static const union AffineAnimCmd gUnknown_83E7654[] =
{ {
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
AFFINEANIMCMD_END, AFFINEANIMCMD_END,
}; };
// not used static const union AffineAnimCmd *const sAffineAnims_Unused[] =
static const union AffineAnimCmd *const gUnknown_83E7664[] =
{ {
gUnknown_83E7654, sAffineAnim_Unused,
}; };
const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate = const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate =
@@ -207,7 +205,8 @@ const struct SpriteTemplate gGrudgeFlameSpriteTemplate =
.callback = AnimGrudgeFlame, .callback = AnimGrudgeFlame,
}; };
const struct SpriteTemplate gUnknown_83E76F8 = // Unused
static const struct SpriteTemplate sMonMoveCircularSpriteTemplate =
{ {
.tileTag = 0, .tileTag = 0,
.paletteTag = 0, .paletteTag = 0,
@@ -215,7 +214,7 @@ const struct SpriteTemplate gUnknown_83E76F8 =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7158, .callback = AnimMonMoveCircular,
}; };
static void AnimConfuseRayBallBounce(struct Sprite *sprite) static void AnimConfuseRayBallBounce(struct Sprite *sprite)
@@ -223,24 +222,24 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1); InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->x; sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y; sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite); InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = sub_80B52D0; sprite->callback = AnimConfuseRayBallBounce_Step1;
sprite->data[6] = 16; sprite->data[6] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]); SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]);
} }
static void sub_80B52D0(struct Sprite *sprite) static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite)
{ {
s16 r0, r2; s16 r0, r2;
sub_80B53C0(sprite); UpdateConfuseRayBallBlend(sprite);
if (AnimTranslateLinear(sprite)) if (AnimTranslateLinear(sprite))
{ {
sprite->callback = sub_80B5344; sprite->callback = AnimConfuseRayBallBounce_Step2;
return; return;
} }
sprite->x2 += Sin(sprite->data[5], 10); sprite->x2 += Sin(sprite->data[5], 10);
@@ -252,10 +251,10 @@ static void sub_80B52D0(struct Sprite *sprite)
return; return;
if (r0 <= 0) if (r0 <= 0)
return; return;
PlaySE12WithPanning(SE_M_CONFUSE_RAY, gUnknown_2037F24); PlaySE12WithPanning(SE_M_CONFUSE_RAY, gAnimCustomPanning);
} }
static void sub_80B5344(struct Sprite *sprite) static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
{ {
s16 r2, r0; s16 r2, r0;
@@ -275,11 +274,11 @@ static void sub_80B5344(struct Sprite *sprite)
} }
else else
{ {
sub_80B53C0(sprite); UpdateConfuseRayBallBlend(sprite);
} }
} }
static void sub_80B53C0(struct Sprite *sprite) static void UpdateConfuseRayBallBlend(struct Sprite *sprite)
{ {
s16 r0; s16 r0;
@@ -309,11 +308,11 @@ static void sub_80B53C0(struct Sprite *sprite)
static void AnimConfuseRayBallSpiral(struct Sprite *sprite) static void AnimConfuseRayBallSpiral(struct Sprite *sprite)
{ {
InitSpritePosToAnimTarget(sprite, TRUE); InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80B5470; sprite->callback = AnimConfuseRayBallSpiral_Step;
sprite->callback(sprite); sprite->callback(sprite);
} }
static void sub_80B5470(struct Sprite *sprite) static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite)
{ {
u16 temp1; u16 temp1;
@@ -332,6 +331,7 @@ static void sub_80B5470(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
// Creates a large transparent clone of the attacker centered on their position which shrinks to original size
void AnimTask_NightShadeClone(u8 taskId) void AnimTask_NightShadeClone(u8 taskId)
{ {
u8 spriteId; u8 spriteId;
@@ -346,10 +346,10 @@ void AnimTask_NightShadeClone(u8 taskId)
gTasks[taskId].data[1] = *gBattleAnimArgs; gTasks[taskId].data[1] = *gBattleAnimArgs;
gTasks[taskId].data[2] = 0; gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 16; gTasks[taskId].data[3] = 16;
gTasks[taskId].func = sub_80B5570; gTasks[taskId].func = AnimTask_NightShadeClone_Step1;
} }
static void sub_80B5570(u8 taskId) static void AnimTask_NightShadeClone_Step1(u8 taskId)
{ {
gTasks[taskId].data[10] += 1; gTasks[taskId].data[10] += 1;
if (gTasks[taskId].data[10] == 3) if (gTasks[taskId].data[10] == 3)
@@ -360,11 +360,11 @@ static void sub_80B5570(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3])); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3]));
if (gTasks[taskId].data[2] != 9) if (gTasks[taskId].data[2] != 9)
return; return;
gTasks[taskId].func = sub_80B55C8; gTasks[taskId].func = AnimTask_NightShadeClone_Step2;
} }
} }
static void sub_80B55C8(u8 taskId) static void AnimTask_NightShadeClone_Step2(u8 taskId)
{ {
u8 spriteId; u8 spriteId;
@@ -398,8 +398,8 @@ static void AnimShadowBall(struct Sprite *sprite)
s16 oldPosX = sprite->x; s16 oldPosX = sprite->x;
s16 oldPosY = sprite->y; s16 oldPosY = sprite->y;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 0; sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[0]; sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[1];
@@ -408,10 +408,10 @@ static void AnimShadowBall(struct Sprite *sprite)
sprite->data[5] = sprite->y << 4; sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1); sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1);
sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1); sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1);
sprite->callback = AnimShadowBallStep; sprite->callback = AnimShadowBall_Step;
} }
static void AnimShadowBallStep(struct Sprite *sprite) static void AnimShadowBall_Step(struct Sprite *sprite)
{ {
switch (sprite->data[0]) switch (sprite->data[0])
{ {
@@ -429,8 +429,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
sprite->data[2] -= 1; sprite->data[2] -= 1;
if (sprite->data[2] > 0) if (sprite->data[2] > 0)
break; break;
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4; sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4; sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3]; sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
@@ -445,8 +445,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
sprite->data[3] -= 1; sprite->data[3] -= 1;
if (sprite->data[3] > 0) if (sprite->data[3] > 0)
break; break;
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[0] += 1; sprite->data[0] += 1;
break; break;
case 3: case 3:
@@ -458,10 +458,10 @@ static void AnimShadowBallStep(struct Sprite *sprite)
static void AnimLick(struct Sprite *sprite) static void AnimLick(struct Sprite *sprite)
{ {
InitSpritePosToAnimTarget(sprite, TRUE); InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80B5810; sprite->callback = AnimLick_Step;
} }
static void sub_80B5810(struct Sprite *sprite) static void AnimLick_Step(struct Sprite *sprite)
{ {
bool8 r5 = FALSE; bool8 r5 = FALSE;
bool8 r6 = FALSE; bool8 r6 = FALSE;
@@ -507,12 +507,13 @@ static void sub_80B5810(struct Sprite *sprite)
} }
} }
// Creates a transparent clone of the target which drifts up and away to the side
void AnimTask_NightmareClone(u8 taskId) void AnimTask_NightmareClone(u8 taskId)
{ {
struct Task *task; struct Task *task;
task = &gTasks[taskId]; task = &gTasks[taskId];
task->data[0] = CloneBattlerSpriteWithBlend(1); task->data[0] = CloneBattlerSpriteWithBlend(ANIM_TARGET);
if (task->data[0] < 0) if (task->data[0] < 0)
{ {
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
@@ -539,10 +540,10 @@ void AnimTask_NightmareClone(u8 taskId)
gSprites[task->data[0]].data[4] = 0; gSprites[task->data[0]].data[4] = 0;
StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy); StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy);
gSprites[task->data[0]].callback = TranslateSpriteLinearFixedPoint; gSprites[task->data[0]].callback = TranslateSpriteLinearFixedPoint;
task->func = sub_80B59D4; task->func = AnimTask_NightmareClone_Step;
} }
static void sub_80B59D4(u8 taskId) static void AnimTask_NightmareClone_Step(u8 taskId)
{ {
struct Task *task; struct Task *task;
@@ -579,17 +580,18 @@ static void sub_80B59D4(u8 taskId)
} }
} }
// Creates a blended copy of the target that wavers in front of them
void AnimTask_SpiteTargetShadow(u8 taskId) void AnimTask_SpiteTargetShadow(u8 taskId)
{ {
struct Task *task; struct Task *task;
task = &gTasks[taskId]; task = &gTasks[taskId];
task->data[15] = 0; task->data[15] = 0;
task->func = sub_80B5AD4; task->func = AnimTask_SpiteTargetShadow_Step1;
task->func(taskId); task->func(taskId);
} }
static void sub_80B5AD4(u8 taskId) static void AnimTask_SpiteTargetShadow_Step1(u8 taskId)
{ {
s16 startLine; s16 startLine;
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -670,7 +672,7 @@ static void sub_80B5AD4(u8 taskId)
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else else
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
task->func = sub_80B5D38; task->func = AnimTask_SpiteTargetShadow_Step2;
++task->data[15]; ++task->data[15];
break; break;
default: default:
@@ -679,7 +681,7 @@ static void sub_80B5AD4(u8 taskId)
} }
} }
static void sub_80B5D38(u8 taskId) static void AnimTask_SpiteTargetShadow_Step2(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -693,12 +695,12 @@ static void sub_80B5D38(u8 taskId)
if (task->data[1] == 128) if (task->data[1] == 128)
{ {
task->data[15] = 0; task->data[15] = 0;
task->func = sub_80B5DCC; task->func = AnimTask_SpiteTargetShadow_Step3;
task->func(taskId); task->func(taskId);
} }
} }
static void sub_80B5DCC(u8 taskId) static void AnimTask_SpiteTargetShadow_Step3(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
@@ -740,17 +742,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == 0)
{ {
battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
} }
else else
{ {
battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
} }
yDiff = battler2Y - battler1Y; yDiff = battler2Y - battler1Y;
sprite->data[0] = battler1X * 16; sprite->data[0] = battler1X * 16;
@@ -764,11 +766,11 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
sprite->oam.priority = 2; sprite->oam.priority = 2;
sprite->x = battler1X; sprite->x = battler1X;
sprite->y = battler1Y; sprite->y = battler1Y;
sprite->callback = sub_80B5FE0; sprite->callback = AnimDestinyBondWhiteShadow_Step;
sprite->invisible = TRUE; sprite->invisible = TRUE;
} }
static void sub_80B5FE0(struct Sprite *sprite) static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite)
{ {
if (sprite->data[4]) if (sprite->data[4])
{ {
@@ -798,11 +800,11 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
task->data[8] = 0; task->data[8] = 0;
task->data[9] = 16; task->data[9] = 16;
task->data[10] = gBattleAnimArgs[0]; task->data[10] = gBattleAnimArgs[0];
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
if (!IsContest()) if (!IsContest())
{ {
for (battler = 0; battler < 4; ++battler) for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
{ {
if (battler != gBattleAnimAttacker if (battler != gBattleAnimAttacker
&& battler != (gBattleAnimAttacker ^ 2) && battler != (gBattleAnimAttacker ^ 2)
@@ -811,7 +813,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
x = GetBattlerSpriteCoord(battler, 2); x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM); y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM);
gSprites[spriteId].data[0] = baseX << 4; gSprites[spriteId].data[0] = baseX << 4;
gSprites[spriteId].data[1] = baseY << 4; gSprites[spriteId].data[1] = baseY << 4;
@@ -820,7 +822,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
gSprites[spriteId].data[4] = gBattleAnimArgs[1]; gSprites[spriteId].data[4] = gBattleAnimArgs[1];
gSprites[spriteId].data[5] = x; gSprites[spriteId].data[5] = x;
gSprites[spriteId].data[6] = y; gSprites[spriteId].data[6] = y;
gSprites[spriteId].callback = sub_80B5FE0; gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
task->data[task->data[12] + 13] = spriteId; task->data[task->data[12] + 13] = spriteId;
++task->data[12]; ++task->data[12];
} }
@@ -841,15 +843,15 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
gSprites[spriteId].data[4] = gBattleAnimArgs[1]; gSprites[spriteId].data[4] = gBattleAnimArgs[1];
gSprites[spriteId].data[5] = x; gSprites[spriteId].data[5] = x;
gSprites[spriteId].data[6] = y; gSprites[spriteId].data[6] = y;
gSprites[spriteId].callback = sub_80B5FE0; gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
task->data[13] = spriteId; task->data[13] = spriteId;
task->data[12] = 1; task->data[12] = 1;
} }
} }
task->func = sub_80B623C; task->func = AnimTask_DestinyBondWhiteShadow_Step;
} }
static void sub_80B623C(u8 taskId) static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId)
{ {
u16 i; u16 i;
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -933,7 +935,7 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) | SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) |
(WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR))); (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)));
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN)); SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN));
SetGpuReg(REG_OFFSET_BLDY, 0x10); SetGpuReg(REG_OFFSET_BLDY, 16);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest()) if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest())
startX = 40; startX = 40;
else else
@@ -951,10 +953,10 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
gTasks[taskId].data[4] = bottomDistance; gTasks[taskId].data[4] = bottomDistance;
gTasks[taskId].data[5] = startX; gTasks[taskId].data[5] = startX;
gTasks[taskId].data[6] = startY; gTasks[taskId].data[6] = startY;
gTasks[taskId].func = sub_80B6468; gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step1;
} }
static void sub_80B6468(u8 taskId) static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId)
{ {
s16 step, leftDistance, rightDistance, topDistance, bottomDistance, startX, startY; s16 step, leftDistance, rightDistance, topDistance, bottomDistance, startX, startY;
u16 left, right, top, bottom, selectedPalettes; u16 left, right, top, bottom, selectedPalettes;
@@ -980,15 +982,15 @@ static void sub_80B6468(u8 taskId)
right = 240; right = 240;
top = 0; top = 0;
bottom = 112; bottom = 112;
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0); selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0));
gTasks[taskId].func = sub_80B65F0; gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2;
} }
gBattle_WIN0H = WIN_RANGE(left, right); gBattle_WIN0H = WIN_RANGE(left, right);
gBattle_WIN0V = WIN_RANGE(top, bottom); gBattle_WIN0V = WIN_RANGE(top, bottom);
} }
static void sub_80B65F0(u8 taskId) static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
@@ -1023,10 +1025,10 @@ static void AnimCurseNail(struct Sprite *sprite)
sprite->x += xDelta; sprite->x += xDelta;
sprite->data[1] = xDelta2; sprite->data[1] = xDelta2;
sprite->data[0] = 60; sprite->data[0] = 60;
sprite->callback = sub_80B66A8; sprite->callback = AnimCurseNail_Step1;
} }
static void sub_80B66A8(struct Sprite *sprite) static void AnimCurseNail_Step1(struct Sprite *sprite)
{ {
u16 var0; u16 var0;
@@ -1047,7 +1049,7 @@ static void sub_80B66A8(struct Sprite *sprite)
{ {
sprite->data[0] = 30; sprite->data[0] = 30;
sprite->callback = WaitAnimForDuration; sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, sub_80B6728); StoreSpriteCallbackInData6(sprite, AnimCurseNail_Step2);
} }
else else
{ {
@@ -1057,7 +1059,7 @@ static void sub_80B66A8(struct Sprite *sprite)
} }
} }
static void sub_80B6728(struct Sprite *sprite) static void AnimCurseNail_Step2(struct Sprite *sprite)
{ {
if (sprite->data[0] == 0) if (sprite->data[0] == 0)
{ {
@@ -1079,12 +1081,12 @@ static void sub_80B6728(struct Sprite *sprite)
if (sprite->data[2] == 16) if (sprite->data[2] == 16)
{ {
sprite->invisible = TRUE; sprite->invisible = TRUE;
sprite->callback = sub_80B67A0; sprite->callback = AnimCurseNail_End;
} }
} }
} }
static void sub_80B67A0(struct Sprite *sprite) static void AnimCurseNail_End(struct Sprite *sprite)
{ {
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -1125,12 +1127,12 @@ static void AnimGhostStatusSprite(struct Sprite *sprite)
if (coeffB == 16 && coeffA == 0) if (coeffB == 16 && coeffA == 0)
{ {
sprite->invisible = TRUE; sprite->invisible = TRUE;
sprite->callback = sub_80B68A8; sprite->callback = AnimGhostStatusSprite_End;
} }
} }
} }
static void sub_80B68A8(struct Sprite *sprite) static void AnimGhostStatusSprite_End(struct Sprite *sprite)
{ {
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -1143,7 +1145,7 @@ void AnimTask_GrudgeFlames(u8 taskId)
task->data[0] = 0; task->data[0] = 0;
task->data[1] = 16; task->data[1] = 16;
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker); task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8; task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
task->data[7] = 0; task->data[7] = 0;
@@ -1154,10 +1156,10 @@ void AnimTask_GrudgeFlames(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
task->data[8] = 0; task->data[8] = 0;
task->func = sub_80B696C; task->func = AnimTask_GrudgeFlames_Step;
} }
static void sub_80B696C(u8 taskId) static void AnimTask_GrudgeFlames_Step(u8 taskId)
{ {
u16 i; u16 i;
u8 spriteId; u8 spriteId;
@@ -1447,7 +1449,7 @@ static void sub_80B6FC4(u8 taskId)
++task->data[15]; ++task->data[15];
} }
static void sub_80B7158(struct Sprite *sprite) static void AnimMonMoveCircular(struct Sprite *sprite)
{ {
sprite->invisible = TRUE; sprite->invisible = TRUE;
sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker]; sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker];
@@ -1455,11 +1457,11 @@ static void sub_80B7158(struct Sprite *sprite)
sprite->data[1] = 10; sprite->data[1] = 10;
sprite->data[2] = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[1]; sprite->data[3] = gBattleAnimArgs[1];
sprite->callback = sub_80B71B0; sprite->callback = AnimMonMoveCircular_Step;
gSprites[sprite->data[5]].y += 8; gSprites[sprite->data[5]].y += 8;
} }
static void sub_80B71B0(struct Sprite *sprite) static void AnimMonMoveCircular_Step(struct Sprite *sprite)
{ {
if (sprite->data[3]) if (sprite->data[3])
{ {
+1 -1
View File
@@ -307,7 +307,7 @@ static void sub_80DD4D4(u8 taskId)
gTasks[taskId].data[11] = panIncrement + oldPan; gTasks[taskId].data[11] = panIncrement + oldPan;
gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan); gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
} }
gUnknown_2037F24 = gTasks[taskId].data[11]; gAnimCustomPanning = gTasks[taskId].data[11];
if (gTasks[taskId].data[11] == gTasks[taskId].data[2]) if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }