Sync battle anim - dark

This commit is contained in:
GriffinR
2022-08-14 18:30:55 -04:00
parent e4aec1b6d1
commit 92a193aa71
4 changed files with 60 additions and 56 deletions
+1 -1
View File
@@ -3600,7 +3600,7 @@ Move_MEMENTO::
delay 48 delay 48
playsewithpan SE_M_PSYBEAM2, 192 playsewithpan SE_M_PSYBEAM2, 192
waitforvisualfinish waitforvisualfinish
createvisualtask sub_80B8664, 2, createvisualtask AnimTask_MementoHandleBg, 2,
delay 12 delay 12
setalpha 0, 16 setalpha 0, 16
delay 1 delay 1
+1 -1
View File
@@ -530,7 +530,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 taskId);
void AnimTask_MoveAttackerMementoShadow(u8 taskId); void AnimTask_MoveAttackerMementoShadow(u8 taskId);
void AnimTask_MoveTargetMementoShadow(u8 taskId); void AnimTask_MoveTargetMementoShadow(u8 taskId);
void AnimTask_InitMementoShadow(u8 taskId); void AnimTask_InitMementoShadow(u8 taskId);
void sub_80B8664(u8 taskId); void AnimTask_MementoHandleBg(u8 taskId);
void AnimTask_MetallicShine(u8 taskId); void AnimTask_MetallicShine(u8 taskId);
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId); void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId);
void GetIsDoomDesireHitTurn(u8 taskId); void GetIsDoomDesireHitTurn(u8 taskId);
+1
View File
@@ -4,6 +4,7 @@
#include "global.h" #include "global.h"
#define MAX_SPRITES 64 #define MAX_SPRITES 64
#define SPRITE_NONE 0xFF
#define TAG_NONE 0xFFFF #define TAG_NONE 0xFFFF
struct SpriteSheet struct SpriteSheet
+57 -54
View File
@@ -6,23 +6,24 @@
#include "trig.h" #include "trig.h"
#include "util.h" #include "util.h"
static void sub_80B7ACC(struct Sprite *sprite); static void AnimUnusedBagSteal(struct Sprite *sprite);
static void AnimUnusedBagSteal_Step(struct Sprite *sprite);
static void AnimBite(struct Sprite *sprite); static void AnimBite(struct Sprite *sprite);
static void AnimTearDrop(struct Sprite *sprite); static void AnimTearDrop(struct Sprite *sprite);
static void AnimClawSlash(struct Sprite *sprite); static void AnimClawSlash(struct Sprite *sprite);
static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId); static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId);
static void AnimTask_AttackerFadeFromInvisible_Step(u8 taskId); static void AnimTask_AttackerFadeFromInvisible_Step(u8 taskId);
static void sub_80B7B48(struct Sprite *sprite); static void AnimBite_Step1(struct Sprite *sprite);
static void sub_80B7C10(struct Sprite *sprite); static void AnimBite_Step2(struct Sprite *sprite);
static void sub_80B7C50(struct Sprite *sprite); static void AnimTearDrop_Step(struct Sprite *sprite);
static void sub_80B7D88(struct Sprite *sprite); static void SetAllBattlersSpritePriority(u8 priority);
static void sub_80B856C(u8 priority); static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId);
static void sub_80B7F58(u8 taskId); static void DoMementoShadowEffect(struct Task *task);
static void sub_80B843C(struct Task *task); static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId);
static void sub_80B82C0(u8 taskId); static void AnimTask_MetallicShine_Step(u8 taskId);
static void sub_80B8920(u8 taskId);
const struct SpriteTemplate gUnknown_83E7878 = // Unused
const struct SpriteTemplate sUnusedBagStealSpriteTemplate =
{ {
.tileTag = ANIM_TAG_TIED_BAG, .tileTag = ANIM_TAG_TIED_BAG,
.paletteTag = ANIM_TAG_TIED_BAG, .paletteTag = ANIM_TAG_TIED_BAG,
@@ -30,7 +31,7 @@ const struct SpriteTemplate gUnknown_83E7878 =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7ACC, .callback = AnimUnusedBagSteal,
}; };
static const union AffineAnimCmd sAffineAnim_Bite_0[] = static const union AffineAnimCmd sAffineAnim_Bite_0[] =
@@ -265,7 +266,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
static void sub_80B7ACC(struct Sprite *sprite) static void AnimUnusedBagSteal(struct Sprite *sprite)
{ {
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
@@ -276,11 +277,11 @@ static void sub_80B7ACC(struct Sprite *sprite)
sprite->data[3] = -sprite->data[1]; sprite->data[3] = -sprite->data[1];
sprite->data[4] = -sprite->data[2]; sprite->data[4] = -sprite->data[2];
sprite->data[6] = 0xFFD8; sprite->data[6] = 0xFFD8;
sprite->callback = sub_80B7B48; sprite->callback = AnimUnusedBagSteal_Step;
sprite->callback(sprite); sprite->callback(sprite);
} }
static void sub_80B7B48(struct Sprite *sprite) static void AnimUnusedBagSteal_Step(struct Sprite *sprite)
{ {
sprite->data[3] += sprite->data[1]; sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2]; sprite->data[4] += sprite->data[2];
@@ -306,6 +307,7 @@ static void sub_80B7B48(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
// Move sprite inward for Bite/Crunch and Clamp
static void AnimBite(struct Sprite *sprite) static void AnimBite(struct Sprite *sprite)
{ {
sprite->x += gBattleAnimArgs[0]; sprite->x += gBattleAnimArgs[0];
@@ -314,20 +316,20 @@ static void AnimBite(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[3]; sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[4]; sprite->data[1] = gBattleAnimArgs[4];
sprite->data[2] = gBattleAnimArgs[5]; sprite->data[2] = gBattleAnimArgs[5];
sprite->callback = sub_80B7C10; sprite->callback = AnimBite_Step1;
} }
static void sub_80B7C10(struct Sprite *sprite) static void AnimBite_Step1(struct Sprite *sprite)
{ {
sprite->data[4] += sprite->data[0]; sprite->data[4] += sprite->data[0];
sprite->data[5] += sprite->data[1]; sprite->data[5] += sprite->data[1];
sprite->x2 = sprite->data[4] >> 8; sprite->x2 = sprite->data[4] >> 8;
sprite->y2 = sprite->data[5] >> 8; sprite->y2 = sprite->data[5] >> 8;
if (++sprite->data[3] == sprite->data[2]) if (++sprite->data[3] == sprite->data[2])
sprite->callback = sub_80B7C50; sprite->callback = AnimBite_Step2;
} }
static void sub_80B7C50(struct Sprite *sprite) static void AnimBite_Step2(struct Sprite *sprite)
{ {
sprite->data[4] -= sprite->data[0]; sprite->data[4] -= sprite->data[0];
sprite->data[5] -= sprite->data[1]; sprite->data[5] -= sprite->data[1];
@@ -337,12 +339,13 @@ static void sub_80B7C50(struct Sprite *sprite)
DestroySpriteAndMatrix(sprite); DestroySpriteAndMatrix(sprite);
} }
// Launches a tear drop away from the battler. Used by Fake Tears
static void AnimTearDrop(struct Sprite *sprite) static void AnimTearDrop(struct Sprite *sprite)
{ {
u8 battler; u8 battler;
s8 xOffset; s8 xOffset;
if (gBattleAnimArgs[0] == 0) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battler = gBattleAnimAttacker; battler = gBattleAnimAttacker;
else else
battler = gBattleAnimTarget; battler = gBattleAnimTarget;
@@ -376,10 +379,10 @@ static void AnimTearDrop(struct Sprite *sprite)
sprite->data[4] = sprite->y + 12; sprite->data[4] = sprite->y + 12;
sprite->data[5] = -12; sprite->data[5] = -12;
InitAnimArcTranslation(sprite); InitAnimArcTranslation(sprite);
sprite->callback = sub_80B7D88; sprite->callback = AnimTearDrop_Step;
} }
static void sub_80B7D88(struct Sprite *sprite) static void AnimTearDrop_Step(struct Sprite *sprite)
{ {
if (TranslateAnimHorizontalArc(sprite)) if (TranslateAnimHorizontalArc(sprite))
DestroySpriteAndMatrix(sprite); DestroySpriteAndMatrix(sprite);
@@ -416,7 +419,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
scanlineParams.dmaDest = &REG_BG1VOFS; scanlineParams.dmaDest = &REG_BG1VOFS;
var0 = WINOUT_WIN01_BG1; var0 = WINOUT_WIN01_BG1;
if (!IsContest()) if (!IsContest())
gBattle_BG2_X += 240; gBattle_BG2_X += DISPLAY_WIDTH;
} }
else else
{ {
@@ -426,7 +429,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
scanlineParams.dmaDest = &REG_BG2VOFS; scanlineParams.dmaDest = &REG_BG2VOFS;
var0 = WINOUT_WIN01_BG2; var0 = WINOUT_WIN01_BG2;
if (!IsContest()) if (!IsContest())
gBattle_BG1_X += 240; gBattle_BG1_X += DISPLAY_WIDTH;
} }
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1; scanlineParams.initState = 1;
@@ -436,7 +439,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
task->data[0] = 0; task->data[0] = 0;
task->data[1] = 0; task->data[1] = 0;
task->data[2] = 0; task->data[2] = 0;
sub_80B856C(3); SetAllBattlersSpritePriority(3);
for (i = 0; i < 112; ++i) for (i = 0; i < 112; ++i)
{ {
gScanlineEffectRegBuffers[0][i] = task->data[10]; gScanlineEffectRegBuffers[0][i] = task->data[10];
@@ -446,12 +449,12 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR))); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR)));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160; gBattle_WIN0V = DISPLAY_HEIGHT;
task->func = sub_80B7F58; task->func = AnimTask_MoveAttackerMementoShadow_Step;
} }
static void sub_80B7F58(u8 taskId) static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -477,13 +480,13 @@ static void sub_80B7F58(u8 taskId)
break; break;
case 1: case 1:
task->data[4] -= 8; task->data[4] -= 8;
sub_80B843C(task); DoMementoShadowEffect(task);
if (task->data[4] < task->data[8]) if (task->data[4] < task->data[8])
++task->data[0]; ++task->data[0];
break; break;
case 2: case 2:
task->data[4] -= 8; task->data[4] -= 8;
sub_80B843C(task); DoMementoShadowEffect(task);
task->data[14] += 4; task->data[14] += 4;
task->data[15] -= 4; task->data[15] -= 4;
if (task->data[14] >= task->data[15]) if (task->data[14] >= task->data[15])
@@ -527,12 +530,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
if (task->data[3] == 1) if (task->data[3] == 1)
{ {
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
gBattle_BG2_X += 240; gBattle_BG2_X += DISPLAY_WIDTH;
} }
else else
{ {
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
gBattle_BG1_X += 240; gBattle_BG1_X += DISPLAY_WIDTH;
} }
++task->data[0]; ++task->data[0];
} }
@@ -549,7 +552,7 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
task->data[10] = gBattle_BG2_Y; task->data[10] = gBattle_BG2_Y;
FillPalette(RGB_BLACK, 9 * 16, 32); FillPalette(RGB_BLACK, 9 * 16, 32);
} }
sub_80B856C(3); SetAllBattlersSpritePriority(3);
++task->data[0]; ++task->data[0];
break; break;
case 2: case 2:
@@ -592,17 +595,17 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160; gBattle_WIN0V = DISPLAY_HEIGHT;
task->data[0] = 0; task->data[0] = 0;
task->data[1] = 0; task->data[1] = 0;
task->data[2] = 0; task->data[2] = 0;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
task->func = sub_80B82C0; task->func = AnimTask_MoveTargetMementoShadow_Step;
break; break;
} }
} }
static void sub_80B82C0(u8 taskId) static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId)
{ {
u8 pos; u8 pos;
u16 i; u16 i;
@@ -614,7 +617,7 @@ static void sub_80B82C0(u8 taskId)
task->data[5] += 8; task->data[5] += 8;
if (task->data[5] >= task->data[7]) if (task->data[5] >= task->data[7])
task->data[5] = task->data[7]; task->data[5] = task->data[7];
sub_80B843C(task); DoMementoShadowEffect(task);
if (task->data[5] == task->data[7]) if (task->data[5] == task->data[7])
++task->data[0]; ++task->data[0];
break; break;
@@ -632,7 +635,7 @@ static void sub_80B82C0(u8 taskId)
task->data[4] += 8; task->data[4] += 8;
if (task->data[4] >= task->data[6]) if (task->data[4] >= task->data[6])
task->data[4] = task->data[6]; task->data[4] = task->data[6];
sub_80B843C(task); DoMementoShadowEffect(task);
if (task->data[4] == task->data[6] && task->data[1]) if (task->data[4] == task->data[6] && task->data[1])
{ {
task->data[1] = 0; task->data[1] = 0;
@@ -672,7 +675,7 @@ static void sub_80B82C0(u8 taskId)
} }
} }
static void sub_80B843C(struct Task *task) static void DoMementoShadowEffect(struct Task *task)
{ {
s32 var0, var1, var4; s32 var0, var1, var4;
s16 var2, i; s16 var2, i;
@@ -711,15 +714,14 @@ static void sub_80B843C(struct Task *task)
} }
} }
static void sub_80B856C(u8 priority) static void SetAllBattlersSpritePriority(u8 priority)
{ {
u16 i; u16 i;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i) for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
{ {
u8 spriteId = GetAnimBattlerSpriteId(i); u8 spriteId = GetAnimBattlerSpriteId(i);
if (spriteId != SPRITE_NONE)
if (spriteId != 0xFF)
gSprites[spriteId].oam.priority = priority; gSprites[spriteId].oam.priority = priority;
} }
} }
@@ -738,7 +740,7 @@ void AnimTask_InitMementoShadow(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
void sub_80B8664(u8 taskId) void AnimTask_MementoHandleBg(u8 taskId)
{ {
bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE;
@@ -748,6 +750,7 @@ void sub_80B8664(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
// Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw
static void AnimClawSlash(struct Sprite *sprite) static void AnimClawSlash(struct Sprite *sprite)
{ {
sprite->x += gBattleAnimArgs[0]; sprite->x += gBattleAnimArgs[0];
@@ -816,10 +819,10 @@ void AnimTask_MetallicShine(u8 taskId)
gTasks[taskId].data[2] = gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[1];
gTasks[taskId].data[3] = gBattleAnimArgs[2]; gTasks[taskId].data[3] = gBattleAnimArgs[2];
gTasks[taskId].data[6] = priorityChanged; gTasks[taskId].data[6] = priorityChanged;
gTasks[taskId].func = sub_80B8920; gTasks[taskId].func = AnimTask_MetallicShine_Step;
} }
static void sub_80B8920(u8 taskId) static void AnimTask_MetallicShine_Step(u8 taskId)
{ {
struct BattleAnimBgData animBg; struct BattleAnimBgData animBg;
u16 paletteNum; u16 paletteNum;
@@ -871,10 +874,10 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
switch (gBattleAnimArgs[0]) switch (gBattleAnimArgs[0])
{ {
case 0: case ANIM_ATTACKER:
case 1: case ANIM_TARGET:
case 2: case ANIM_ATK_PARTNER:
case 3: case ANIM_DEF_PARTNER:
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
break; break;
case 4: case 4:
@@ -894,7 +897,7 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
calcSpriteId = TRUE; calcSpriteId = TRUE;
break; break;
default: default:
spriteId = 0xFF; spriteId = SPRITE_NONE;
break; break;
} }
if (calcSpriteId) if (calcSpriteId)
@@ -903,9 +906,9 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
if (IsBattlerSpriteVisible(battler)) if (IsBattlerSpriteVisible(battler))
spriteId = gBattlerSpriteIds[battler]; spriteId = gBattlerSpriteIds[battler];
else else
spriteId = 0xFF; spriteId = SPRITE_NONE;
} }
if (spriteId != 0xFF) if (spriteId != SPRITE_NONE)
SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]); SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]);
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
@@ -913,8 +916,8 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
void GetIsDoomDesireHitTurn(u8 taskId) void GetIsDoomDesireHitTurn(u8 taskId)
{ {
if (gAnimMoveTurn < 2) if (gAnimMoveTurn < 2)
gBattleAnimArgs[7] = 0; gBattleAnimArgs[ARG_RET_ID] = FALSE;
if (gAnimMoveTurn == 2) if (gAnimMoveTurn == 2)
gBattleAnimArgs[7] = 1; gBattleAnimArgs[ARG_RET_ID] = TRUE;
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }