From 92a193aa7151a795ab16a85ac9f0b8d0be3bf930 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 14 Aug 2022 18:30:55 -0400 Subject: [PATCH] Sync battle anim - dark --- data/battle_anim_scripts.s | 2 +- include/battle_anim.h | 2 +- include/sprite.h | 1 + src/battle_anim_dark.c | 111 +++++++++++++++++++------------------ 4 files changed, 60 insertions(+), 56 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 936e58a35..85d7201f1 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -3600,7 +3600,7 @@ Move_MEMENTO:: delay 48 playsewithpan SE_M_PSYBEAM2, 192 waitforvisualfinish - createvisualtask sub_80B8664, 2, + createvisualtask AnimTask_MementoHandleBg, 2, delay 12 setalpha 0, 16 delay 1 diff --git a/include/battle_anim.h b/include/battle_anim.h index fc40e1373..80963c10d 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -530,7 +530,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 taskId); void AnimTask_MoveAttackerMementoShadow(u8 taskId); void AnimTask_MoveTargetMementoShadow(u8 taskId); void AnimTask_InitMementoShadow(u8 taskId); -void sub_80B8664(u8 taskId); +void AnimTask_MementoHandleBg(u8 taskId); void AnimTask_MetallicShine(u8 taskId); void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId); void GetIsDoomDesireHitTurn(u8 taskId); diff --git a/include/sprite.h b/include/sprite.h index 9fa6280dc..eed582775 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -4,6 +4,7 @@ #include "global.h" #define MAX_SPRITES 64 +#define SPRITE_NONE 0xFF #define TAG_NONE 0xFFFF struct SpriteSheet diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index 9b12555d9..1923a9dea 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -6,23 +6,24 @@ #include "trig.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 AnimTearDrop(struct Sprite *sprite); static void AnimClawSlash(struct Sprite *sprite); static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId); static void AnimTask_AttackerFadeFromInvisible_Step(u8 taskId); -static void sub_80B7B48(struct Sprite *sprite); -static void sub_80B7C10(struct Sprite *sprite); -static void sub_80B7C50(struct Sprite *sprite); -static void sub_80B7D88(struct Sprite *sprite); -static void sub_80B856C(u8 priority); -static void sub_80B7F58(u8 taskId); -static void sub_80B843C(struct Task *task); -static void sub_80B82C0(u8 taskId); -static void sub_80B8920(u8 taskId); +static void AnimBite_Step1(struct Sprite *sprite); +static void AnimBite_Step2(struct Sprite *sprite); +static void AnimTearDrop_Step(struct Sprite *sprite); +static void SetAllBattlersSpritePriority(u8 priority); +static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId); +static void DoMementoShadowEffect(struct Task *task); +static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId); +static void AnimTask_MetallicShine_Step(u8 taskId); -const struct SpriteTemplate gUnknown_83E7878 = +// Unused +const struct SpriteTemplate sUnusedBagStealSpriteTemplate = { .tileTag = ANIM_TAG_TIED_BAG, .paletteTag = ANIM_TAG_TIED_BAG, @@ -30,7 +31,7 @@ const struct SpriteTemplate gUnknown_83E7878 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80B7ACC, + .callback = AnimUnusedBagSteal, }; static const union AffineAnimCmd sAffineAnim_Bite_0[] = @@ -265,7 +266,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 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[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[4] = -sprite->data[2]; sprite->data[6] = 0xFFD8; - sprite->callback = sub_80B7B48; + sprite->callback = AnimUnusedBagSteal_Step; 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[4] += sprite->data[2]; @@ -306,6 +307,7 @@ static void sub_80B7B48(struct Sprite *sprite) DestroyAnimSprite(sprite); } +// Move sprite inward for Bite/Crunch and Clamp static void AnimBite(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; @@ -314,20 +316,20 @@ static void AnimBite(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[4]; 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[5] += sprite->data[1]; sprite->x2 = sprite->data[4] >> 8; sprite->y2 = sprite->data[5] >> 8; 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[5] -= sprite->data[1]; @@ -337,12 +339,13 @@ static void sub_80B7C50(struct Sprite *sprite) DestroySpriteAndMatrix(sprite); } +// Launches a tear drop away from the battler. Used by Fake Tears static void AnimTearDrop(struct Sprite *sprite) { u8 battler; s8 xOffset; - if (gBattleAnimArgs[0] == 0) + if (gBattleAnimArgs[0] == ANIM_ATTACKER) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; @@ -376,10 +379,10 @@ static void AnimTearDrop(struct Sprite *sprite) sprite->data[4] = sprite->y + 12; sprite->data[5] = -12; 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)) DestroySpriteAndMatrix(sprite); @@ -416,7 +419,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) scanlineParams.dmaDest = ®_BG1VOFS; var0 = WINOUT_WIN01_BG1; if (!IsContest()) - gBattle_BG2_X += 240; + gBattle_BG2_X += DISPLAY_WIDTH; } else { @@ -426,7 +429,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) scanlineParams.dmaDest = ®_BG2VOFS; var0 = WINOUT_WIN01_BG2; if (!IsContest()) - gBattle_BG1_X += 240; + gBattle_BG1_X += DISPLAY_WIDTH; } scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; scanlineParams.initState = 1; @@ -436,7 +439,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; - sub_80B856C(3); + SetAllBattlersSpritePriority(3); for (i = 0; i < 112; ++i) { 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_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_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]; @@ -477,13 +480,13 @@ static void sub_80B7F58(u8 taskId) break; case 1: task->data[4] -= 8; - sub_80B843C(task); + DoMementoShadowEffect(task); if (task->data[4] < task->data[8]) ++task->data[0]; break; case 2: task->data[4] -= 8; - sub_80B843C(task); + DoMementoShadowEffect(task); task->data[14] += 4; task->data[15] -= 4; if (task->data[14] >= task->data[15]) @@ -527,12 +530,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) if (task->data[3] == 1) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); - gBattle_BG2_X += 240; + gBattle_BG2_X += DISPLAY_WIDTH; } else { 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]; } @@ -549,7 +552,7 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) task->data[10] = gBattle_BG2_Y; FillPalette(RGB_BLACK, 9 * 16, 32); } - sub_80B856C(3); + SetAllBattlersSpritePriority(3); ++task->data[0]; break; 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_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_WIN0V = 160; + gBattle_WIN0V = DISPLAY_HEIGHT; task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8)); - task->func = sub_80B82C0; + task->func = AnimTask_MoveTargetMementoShadow_Step; break; } } -static void sub_80B82C0(u8 taskId) +static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId) { u8 pos; u16 i; @@ -614,7 +617,7 @@ static void sub_80B82C0(u8 taskId) task->data[5] += 8; if (task->data[5] >= task->data[7]) task->data[5] = task->data[7]; - sub_80B843C(task); + DoMementoShadowEffect(task); if (task->data[5] == task->data[7]) ++task->data[0]; break; @@ -632,7 +635,7 @@ static void sub_80B82C0(u8 taskId) task->data[4] += 8; if (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]) { 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; 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; for (i = 0; i < MAX_BATTLERS_COUNT; ++i) { u8 spriteId = GetAnimBattlerSpriteId(i); - - if (spriteId != 0xFF) + if (spriteId != SPRITE_NONE) gSprites[spriteId].oam.priority = priority; } } @@ -738,7 +740,7 @@ void AnimTask_InitMementoShadow(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_80B8664(u8 taskId) +void AnimTask_MementoHandleBg(u8 taskId) { bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; @@ -748,6 +750,7 @@ void sub_80B8664(u8 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) { sprite->x += gBattleAnimArgs[0]; @@ -816,10 +819,10 @@ void AnimTask_MetallicShine(u8 taskId) gTasks[taskId].data[2] = gBattleAnimArgs[1]; gTasks[taskId].data[3] = gBattleAnimArgs[2]; 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; u16 paletteNum; @@ -871,10 +874,10 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) switch (gBattleAnimArgs[0]) { - case 0: - case 1: - case 2: - case 3: + case ANIM_ATTACKER: + case ANIM_TARGET: + case ANIM_ATK_PARTNER: + case ANIM_DEF_PARTNER: spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); break; case 4: @@ -894,7 +897,7 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) calcSpriteId = TRUE; break; default: - spriteId = 0xFF; + spriteId = SPRITE_NONE; break; } if (calcSpriteId) @@ -903,9 +906,9 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) if (IsBattlerSpriteVisible(battler)) spriteId = gBattlerSpriteIds[battler]; else - spriteId = 0xFF; + spriteId = SPRITE_NONE; } - if (spriteId != 0xFF) + if (spriteId != SPRITE_NONE) SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]); DestroyAnimVisualTask(taskId); } @@ -913,8 +916,8 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) void GetIsDoomDesireHitTurn(u8 taskId) { if (gAnimMoveTurn < 2) - gBattleAnimArgs[7] = 0; + gBattleAnimArgs[ARG_RET_ID] = FALSE; if (gAnimMoveTurn == 2) - gBattleAnimArgs[7] = 1; + gBattleAnimArgs[ARG_RET_ID] = TRUE; DestroyAnimVisualTask(taskId); }