summaryrefslogtreecommitdiff
path: root/src/battle/anim
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/anim')
-rw-r--r--src/battle/anim/aurora.c6
-rw-r--r--src/battle/anim/blow_kiss.c6
-rw-r--r--src/battle/anim/bubble.c4
-rw-r--r--src/battle/anim/bug.c22
-rw-r--r--src/battle/anim/bullet.c4
-rw-r--r--src/battle/anim/cutter.c58
-rw-r--r--src/battle/anim/cyclone.c2
-rw-r--r--src/battle/anim/dark.c22
-rw-r--r--src/battle/anim/dragon.c4
-rw-r--r--src/battle/anim/draw.c116
-rw-r--r--src/battle/anim/egg.c2
-rw-r--r--src/battle/anim/energy_wave.c10
-rw-r--r--src/battle/anim/fight.c647
-rw-r--r--src/battle/anim/fire_2.c8
-rw-r--r--src/battle/anim/flying_path.c14
-rw-r--r--src/battle/anim/glitter.c2
-rw-r--r--src/battle/anim/grip.c2
-rw-r--r--src/battle/anim/guard.c4
-rw-r--r--src/battle/anim/guillotine.c6
-rw-r--r--src/battle/anim/heart_1.c2
-rw-r--r--src/battle/anim/heated_rock.c92
-rw-r--r--src/battle/anim/hop.c2
-rw-r--r--src/battle/anim/lunge_1.c14
-rw-r--r--src/battle/anim/lunge_2.c4
-rw-r--r--src/battle/anim/money.c2
-rw-r--r--src/battle/anim/note_rain.c4
-rw-r--r--src/battle/anim/note_scatter_2.c4
-rw-r--r--src/battle/anim/orbit.c12
-rw-r--r--src/battle/anim/orbs.c16
-rw-r--r--src/battle/anim/perceive.c2
-rw-r--r--src/battle/anim/poison.c18
-rw-r--r--src/battle/anim/powder.c17
-rw-r--r--src/battle/anim/psychic.c14
-rw-r--r--src/battle/anim/ring.c22
-rw-r--r--src/battle/anim/rock.c14
-rw-r--r--src/battle/anim/scan.c4
-rw-r--r--src/battle/anim/seed.c4
-rw-r--r--src/battle/anim/shadow_minimize.c13
-rw-r--r--src/battle/anim/sonic.c4
-rw-r--r--src/battle/anim/sonic_task.c2
-rw-r--r--src/battle/anim/sunlight.c2
-rw-r--r--src/battle/anim/sword.c4
-rw-r--r--src/battle/anim/tile_out.c2
-rw-r--r--src/battle/anim/unused_4.c4
-rw-r--r--src/battle/anim/unused_7.c4
-rw-r--r--src/battle/anim/unused_8.c4
-rw-r--r--src/battle/anim/unused_9.c19
-rw-r--r--src/battle/anim/water.c4
-rw-r--r--src/battle/anim/wisp_fire.c4
-rw-r--r--src/battle/anim/wisp_orb.c4
-rw-r--r--src/battle/anim/withdraw.c6
51 files changed, 868 insertions, 394 deletions
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c
index 90fa5c879..b24809264 100644
--- a/src/battle/anim/aurora.c
+++ b/src/battle/anim/aurora.c
@@ -16,7 +16,7 @@ void sub_80D33B4(struct Sprite *sprite)
{
s16 r6;
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
if (GetBankSide(gAnimBankAttacker) != 0)
r6 = -gBattleAnimArgs[2];
else
@@ -26,7 +26,7 @@ void sub_80D33B4(struct Sprite *sprite)
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + r6;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->callback = sub_80D344C;
sprite->affineAnimPaused = TRUE;
sprite->callback(sprite);
@@ -39,7 +39,7 @@ static void sub_80D344C(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
sprite->affineAnimPaused = FALSE;
}
- if (sub_8078B5C(sprite) != 0)
+ if (TranslateAnimSpriteByDeltas(sprite) != 0)
DestroyAnimSprite(sprite);
}
diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c
index e7b49471d..f585b74bc 100644
--- a/src/battle/anim/blow_kiss.c
+++ b/src/battle/anim/blow_kiss.c
@@ -15,19 +15,19 @@ static void sub_80D1FA4(struct Sprite* sprite);
void sub_80D1F58(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = 0x5F;
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->callback = sub_80D1FA4;
}
void sub_80D1FA4(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite) == 0)
+ if (TranslateAnimSpriteByDeltas(sprite) == 0)
{
sprite->pos2.y += Sin(sprite->data[5], 14);
sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c
index 403003ce3..1252c1315 100644
--- a/src/battle/anim/bubble.c
+++ b/src/battle/anim/bubble.c
@@ -43,7 +43,7 @@ void sub_80D31C8(struct Sprite* sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
sprite->data[5] = newSpriteId;
@@ -69,7 +69,7 @@ static void sub_80D32E8(struct Sprite *sprite)
u16 index = gSprites[spriteId].data[3];
sprite->data[0] = 1;
- sub_8078B5C(sprite);
+ TranslateAnimSpriteByDeltas(sprite);
sprite->pos2.x += Sin(index / 256, gSprites[spriteId].data[0]);
sprite->pos2.y += Cos(index / 256, gSprites[spriteId].data[1]);
diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c
index dbc0f75a5..e12f55a8b 100644
--- a/src/battle/anim/bug.c
+++ b/src/battle/anim/bug.c
@@ -40,7 +40,7 @@ void sub_80DC824(struct Sprite *sprite)
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -65,7 +65,7 @@ void sub_80DC8F4(struct Sprite *sprite)
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -76,7 +76,7 @@ void sub_80DC9A0(struct Sprite *sprite)
if (IsContest())
gBattleAnimArgs[2] /= 2;
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -88,7 +88,7 @@ void sub_80DC9A0(struct Sprite *sprite)
}
else
{
- sub_807A3FC(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
}
sub_8078BD4(sprite);
@@ -98,7 +98,7 @@ void sub_80DC9A0(struct Sprite *sprite)
static void sub_80DCA38(struct Sprite *sprite)
{
- if (sub_8078B5C(sprite))
+ if (TranslateAnimSpriteByDeltas(sprite))
{
DestroyAnimSprite(sprite);
return;
@@ -111,7 +111,7 @@ static void sub_80DCA38(struct Sprite *sprite)
// used in Move_STRING_SHOT
void sub_80DCA70(struct Sprite *sprite)
{
- sub_807A3FC(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
if (GetBankSide(gAnimBankAttacker))
sprite->pos1.x -= gBattleAnimArgs[0];
else
@@ -212,7 +212,7 @@ void sub_80DCBCC(struct Sprite *sprite)
}
}
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
lVarX = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
lVarY = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
@@ -224,7 +224,7 @@ void sub_80DCBCC(struct Sprite *sprite)
sprite->data[2] = lVarX;
sprite->data[4] = lVarY;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -232,7 +232,7 @@ void sub_80DCBCC(struct Sprite *sprite)
// Move_PIN_MISSILE, Move_ICICLE_SPEAR
void sub_80DCCFC(struct Sprite *sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
if (GetBankSide(gAnimBankAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -251,7 +251,7 @@ void sub_80DCD78(struct Sprite *sprite)
{
sprite->invisible = FALSE;
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
{
DestroyAnimSprite(sprite);
}
@@ -271,7 +271,7 @@ void sub_80DCD78(struct Sprite *sprite)
x2 += x1;
y2 += y1;
- if (!sub_8078718(sprite))
+ if (!TranslateAnimSpriteLinearAndSine(sprite))
{
u16 rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2,
sprite->pos1.y + sprite->pos2.y - y2);
diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c
index 90b2021f1..1dca0b886 100644
--- a/src/battle/anim/bullet.c
+++ b/src/battle/anim/bullet.c
@@ -17,11 +17,11 @@ static void sub_80D00B4(struct Sprite* sprite);
void sub_80CFFD8(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = 20;
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
sprite->affineAnimPaused = 1;
StoreSpriteCallbackInData(sprite, sub_80D0030);
}
diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c
index 2234ebacb..0f23fed82 100644
--- a/src/battle/anim/cutter.c
+++ b/src/battle/anim/cutter.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle.h"
#include "rom_8077ABC.h"
#include "trig.h"
#include "battle_anim.h"
@@ -7,29 +8,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80CB09C(struct Sprite* sprite);
-static void sub_80CB1A4(struct Sprite* sprite);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
-// cutter (the cresent shaped leaf used in throwing projectiles for the listed moves.)
+// Animates a sprite that moves linearly from one location to another, with a
+// single-cycle sine wave added to the y position along the way.
// Used by Razor Leaf and Magical Leaf.
-
-void sub_80CAFD0(struct Sprite* sprite)
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: translation duration
+// arg 5: wave amplitude
+// arg 6: target between double battle opponents (boolean)
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
- if (GetBankSide(gAnimBankAttacker))
+ InitAnimSpritePos(sprite, 1);
+ if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sprite->data[0] = gBattleAnimArgs[4];
- if (!(gBattleAnimArgs[6]))
+ if (!gBattleAnimArgs[6])
{
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
}
else
{
- sub_807A3FC(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
sprite->data[2] += gBattleAnimArgs[2];
sprite->data[4] += gBattleAnimArgs[3];
}
@@ -45,18 +53,18 @@ void sub_80CAFD0(struct Sprite* sprite)
sprite->data[0] = 0;
}
- sprite->callback = sub_80CB09C;
+ sprite->callback = AnimTranslateLinearSingleSineWaveStep;
}
-void sub_80CB09C(struct Sprite* sprite)
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
{
- bool8 c = FALSE;
+ bool8 destroy = FALSE;
s16 a = sprite->data[0];
s16 b = sprite->data[7];
s16 r0;
sprite->data[0] = 1;
- sub_8078718(sprite);
+ TranslateAnimSpriteLinearAndSine(sprite);
r0 = sprite->data[7];
sprite->data[0] = a;
if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
@@ -67,24 +75,30 @@ void sub_80CB09C(struct Sprite* sprite)
sprite->invisible ^= 1;
sprite->oam.affineParam++;
if (sprite->oam.affineParam == 0x1E)
- c = TRUE;
+ destroy = TRUE;
}
- if (sprite->pos1.x + sprite->pos2.x > 0x100
+ if (sprite->pos1.x + sprite->pos2.x > 256
|| sprite->pos1.x + sprite->pos2.x < -16
- || sprite->pos1.y + sprite->pos2.y > 0xA0
+ || sprite->pos1.y + sprite->pos2.y > 160
|| sprite->pos1.y + sprite->pos2.y < -16)
- c = TRUE;
+ destroy = TRUE;
- if (c)
+ if (destroy)
DestroyAnimSprite(sprite);
}
-void sub_80CB144(struct Sprite* sprite)
+// Animates particles in the Twister move animation.
+// arg 0: duration
+// arg 1: total y delta (the particles rise upward)
+// arg 2: wave period (higher means faster wave)
+// arg 3: wave amplitude
+// arg 4: speedup frame (particles move faster at the end of the animation)
+void AnimMoveTwisterParticle(struct Sprite* sprite)
{
if (!IsContest() && IsDoubleBattle() == TRUE)
{
- sub_807A3FC(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
}
sprite->pos1.y += 32;
@@ -93,10 +107,10 @@ void sub_80CB144(struct Sprite* sprite)
sprite->data[2] = gBattleAnimArgs[2];
sprite->data[3] = gBattleAnimArgs[3];
sprite->data[4] = gBattleAnimArgs[4];
- sprite->callback = sub_80CB1A4;
+ sprite->callback = AnimMoveTwisterParticleStep;
}
-void sub_80CB1A4(struct Sprite* sprite)
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
{
if (sprite->data[1] == 0xFF)
{
diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c
index 0f83df211..b1210bc54 100644
--- a/src/battle/anim/cyclone.c
+++ b/src/battle/anim/cyclone.c
@@ -13,7 +13,7 @@ extern u8 gAnimBankTarget;
void sub_80D0118(struct Sprite* sprite)
{
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
if (GetBankSide(gAnimBankAttacker) == 0)
sprite->pos1.y += 16;
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index 1c88dc23e..aaf8507c6 100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
@@ -14,7 +14,7 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
extern u16 gBattle_BG2_X;
@@ -69,7 +69,7 @@ static void sub_80DFC9C(u8 taskId)
gTasks[taskId].data[2] = 0;
if (r2 == 16)
{
- gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 1;
+ gSprites[gBankSpriteIds[gAnimBankAttacker]].invisible = 1;
DestroyAnimVisualTask(taskId);
}
}
@@ -128,7 +128,7 @@ void sub_80DFE14(struct Sprite *sprite)
sprite->data[3] = GetBankPosition(gAnimBankTarget, 3);
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3);
sprite->data[0] = 0x7E;
- sub_8078A5C(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = -sprite->data[1];
sprite->data[4] = -sprite->data[2];
sprite->data[6] = 0xFFD8;
@@ -244,7 +244,7 @@ void sub_80DFFD0(struct Sprite *sprite)
static void sub_80E00D0(struct Sprite *sprite)
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
move_anim_8074EE0(sprite);
}
@@ -792,13 +792,13 @@ static void sub_80E08CC(u8 priority)
void sub_80E0918(u8 taskId)
{
u8 toBG2 = GetBankIdentity_permutated(gAnimBankAttacker) ^ 1 ? 1 : 0;
- sub_8076034(gAnimBankAttacker, toBG2);
- gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 0;
+ MoveBattlerSpriteToBG(gAnimBankAttacker, toBG2);
+ gSprites[gBankSpriteIds[gAnimBankAttacker]].invisible = 0;
if (IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
{
- sub_8076034(gAnimBankAttacker ^ 2, toBG2 ^ 1);
- gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].invisible = 0;
+ MoveBattlerSpriteToBG(gAnimBankAttacker ^ 2, toBG2 ^ 1);
+ gSprites[gBankSpriteIds[gAnimBankAttacker ^ 2]].invisible = 0;
}
DestroyAnimVisualTask(taskId);
@@ -851,7 +851,7 @@ void sub_80E0A4C(u8 taskId)
{
if (IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2) == TRUE)
{
- gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].oam.priority--;
+ gSprites[gBankSpriteIds[gAnimBankAttacker ^ 2]].oam.priority--;
REG_BG1CNT_BITFIELD.priority = 1;
var0 = 1;
}
@@ -937,7 +937,7 @@ static void sub_80E0CD0(u8 taskId)
if (gTasks[taskIdCopy].data[6] == 1)
{
- gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].oam.priority++;
+ gSprites[gBankSpriteIds[gAnimBankAttacker ^ 2]].oam.priority++;
}
DestroyAnimVisualTask(taskIdCopy);
@@ -985,7 +985,7 @@ void sub_80E0E24(u8 taskId)
{
bank = GetBankByIdentity(identity);
if (IsAnimBankSpriteVisible(bank))
- spriteId = gObjectBankIDs[bank];
+ spriteId = gBankSpriteIds[bank];
else
spriteId = 0xFF;
}
diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c
index bf39e01c0..dc2c0bc50 100644
--- a/src/battle/anim/dragon.c
+++ b/src/battle/anim/dragon.c
@@ -19,7 +19,7 @@ extern u8 gBankAttacker;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u16 gUnknown_03000730[];
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
// Outrage
@@ -68,7 +68,7 @@ void sub_80DF63C(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
}
sprite->data[0] = gBattleAnimArgs[4];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
}
diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c
index f9e505bf2..be3a280af 100644
--- a/src/battle/anim/draw.c
+++ b/src/battle/anim/draw.c
@@ -59,7 +59,6 @@ void sub_80D0C88(u8 taskId)
task->func = sub_80D0D68;
}
-#ifdef NONMATCHING
void sub_80D0D68(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -99,126 +98,13 @@ void sub_80D0D68(u8 taskId)
if (++task->data[3] >= task->data[15])
{
- gScanlineEffect.unk15 = 3;
+ gScanlineEffect.state = 3;
DestroyAnimVisualTask(taskId);
}
}
break;
}
}
-#else
-__attribute__((naked))
-void sub_80D0D68(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- ldr r1, _080D0D88 @ =gTasks\n\
- adds r3, r0, r1\n\
- movs r1, 0x10\n\
- ldrsh r0, [r3, r1]\n\
- cmp r0, 0\n\
- beq _080D0D8C\n\
- cmp r0, 0x1\n\
- beq _080D0DA2\n\
- b _080D0E22\n\
- .align 2, 0\n\
-_080D0D88: .4byte gTasks\n\
-_080D0D8C:\n\
- ldrh r0, [r3, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x14\n\
- ble _080D0E22\n\
- ldrh r0, [r3, 0x10]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x10]\n\
- b _080D0E22\n\
-_080D0DA2:\n\
- ldrh r0, [r3, 0xA]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0xA]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x3\n\
- ble _080D0E22\n\
- movs r0, 0\n\
- strh r0, [r3, 0xA]\n\
- ldrh r1, [r3, 0xE]\n\
- movs r0, 0x3\n\
- ands r0, r1\n\
- strh r0, [r3, 0xC]\n\
- ldrh r0, [r3, 0x8]\n\
- subs r0, r1\n\
- strh r0, [r3, 0x12]\n\
- movs r2, 0xC\n\
- ldrsh r1, [r3, r2]\n\
- cmp r1, 0x1\n\
- beq _080D0DD8\n\
- cmp r1, 0x1\n\
- ble _080D0DE0\n\
- cmp r1, 0x2\n\
- beq _080D0DDC\n\
- cmp r1, 0x3\n\
- beq _080D0DDC\n\
- b _080D0DE0\n\
-_080D0DD8:\n\
- subs r0, 0x2\n\
- b _080D0DDE\n\
-_080D0DDC:\n\
- adds r0, 0x1\n\
-_080D0DDE:\n\
- strh r0, [r3, 0x12]\n\
-_080D0DE0:\n\
- movs r1, 0x12\n\
- ldrsh r0, [r3, r1]\n\
- cmp r0, 0\n\
- blt _080D0E04\n\
- ldr r2, _080D0E28 @ =gScanlineEffectRegBuffers\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- ldrh r1, [r3, 0x14]\n\
- strh r1, [r0]\n\
- movs r1, 0x12\n\
- ldrsh r0, [r3, r1]\n\
- lsls r0, 1\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- adds r2, r1\n\
- adds r0, r2\n\
- ldrh r1, [r3, 0x14]\n\
- strh r1, [r0]\n\
-_080D0E04:\n\
- ldrh r0, [r3, 0xE]\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0xE]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- movs r2, 0x26\n\
- ldrsh r1, [r3, r2]\n\
- cmp r0, r1\n\
- blt _080D0E22\n\
- ldr r1, _080D0E2C @ =gScanlineEffect\n\
- movs r0, 0x3\n\
- strb r0, [r1, 0x15]\n\
- adds r0, r4, 0\n\
- bl DestroyAnimVisualTask\n\
-_080D0E22:\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080D0E28: .4byte gScanlineEffectRegBuffers\n\
-_080D0E2C: .4byte gScanlineEffect\n\
-.syntax divided\n");
-}
-#endif
void sub_80D0E30(struct Sprite* sprite)
{
diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c
index 8004b3bf5..b3de1dbb1 100644
--- a/src/battle/anim/egg.c
+++ b/src/battle/anim/egg.c
@@ -22,7 +22,7 @@ static void sub_80D158C(struct Sprite* sprite);
void sub_80D1368(struct Sprite* sprite)
{
s16 r1;
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
r1 = (GetBankSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
sprite->data[0] = 0x380;
sprite->data[1] = r1;
diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c
index 15045f5bd..8111f70a3 100644
--- a/src/battle/anim/energy_wave.c
+++ b/src/battle/anim/energy_wave.c
@@ -20,7 +20,7 @@ static void sub_80D370C(struct Sprite *);
void sub_80D3554(struct Sprite *sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = 30;
sprite->data[1] = sprite->pos1.x;
@@ -28,7 +28,7 @@ void sub_80D3554(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = 0xD200 / sprite->data[0];
sprite->data[7] = gBattleAnimArgs[3];
@@ -49,7 +49,7 @@ void sub_80D3554(struct Sprite *sprite)
static void sub_80D35DC(struct Sprite *sprite)
{
- if (sub_8078B5C(sprite))
+ if (TranslateAnimSpriteByDeltas(sprite))
{
DestroyAnimSprite(sprite);
}
@@ -147,7 +147,7 @@ void sub_80D3728(struct Sprite *sprite)
else
var2 = 1;
- sub_80787B0(sprite, var1);
+ InitAnimSpritePos(sprite, var1);
if (GetBankSide(gAnimBankAttacker) != 0)
{
@@ -157,6 +157,6 @@ void sub_80D3728(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBankPosition(gAnimBankTarget, var2) + gBattleAnimArgs[3];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c
new file mode 100644
index 000000000..a7c25de49
--- /dev/null
+++ b/src/battle/anim/fight.c
@@ -0,0 +1,647 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "random.h"
+#include "rom_8077ABC.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/battle_constants.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gBankAttacker;
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gBankSpriteIds[];
+extern u8 gBanksBySide[];
+extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+extern u16 gBattle_BG2_X;
+extern u16 gBattle_BG2_Y;
+extern u16 gBattle_BG3_X;
+extern u16 gBattle_BG3_Y;
+extern u16 gBattle_WIN0H;
+extern u16 gBattle_WIN0V;
+extern u16 gBattlePartyID[];
+extern u8 gAnimMoveTurn;
+
+extern struct SpriteTemplate gBasicHitSplatSpriteTemplate;
+
+static void sub_80D927C(struct Sprite *sprite);
+static void sub_80D9328(struct Sprite *sprite);
+static void sub_80D9404(struct Sprite *sprite);
+static void sub_80D9474(struct Sprite *sprite);
+static void sub_80D94CC(struct Sprite *sprite);
+static void sub_80D9524(struct Sprite *sprite);
+static void sub_80D9640(struct Sprite *sprite);
+static void sub_80D97A0(struct Sprite *sprite);
+static void sub_80D986C(struct Sprite *sprite);
+static void sub_80D9934(struct Sprite *sprite);
+static void sub_80D99F4(struct Sprite *sprite);
+
+
+void sub_080B08A0(struct Sprite *sprite)
+{
+ sub_807867C(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = 15;
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+void sub_80D902C(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[7] == 1 && GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[6]);
+ gBattleAnimArgs[6] = 0;
+ sub_8079534(sprite);
+}
+
+void sub_80D9078(struct Sprite *sprite)
+{
+ if (IsContest())
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ sub_80D902C(sprite);
+}
+
+void sub_80D90A4(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+
+ if (gBattleAnimArgs[3] == 0)
+ InitAnimSpritePos(sprite, 1);
+ else
+ sub_8078764(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+void sub_80D90F4(struct Sprite *sprite)
+{
+ u8 bank;
+ s16 xMod, yMod;
+ s16 x, y;
+
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ if (gBattleAnimArgs[2] < 0)
+ gBattleAnimArgs[2] = Random() % 5;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->pos1.x = GetBankPosition(bank, 2);
+ sprite->pos1.y = GetBankPosition(bank, 3);
+
+ xMod = sub_807A100(bank, 1) / 2;
+ yMod = sub_807A100(bank, 0) / 4;
+
+ x = Random() % xMod;
+ y = Random() % yMod;
+
+ if (Random() & 1)
+ x *= -1;
+ if (Random() & 1)
+ y *= -1;
+
+ if ((gBanksBySide[bank] & 1) == 0)
+ y += 0xFFF0;
+
+ sprite->pos1.x += x;
+ sprite->pos1.y += y;
+
+ sprite->data[0] = gBattleAnimArgs[1];
+ sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ if (sprite->data[7] != 64)
+ {
+ StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
+ gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
+ }
+
+ sprite->callback = sub_80D927C;
+}
+
+static void sub_80D927C(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (sprite->data[7] != 64)
+ {
+ FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
+ DestroySprite(&gSprites[sprite->data[7]]);
+ }
+
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->data[0]--;
+ }
+}
+
+void sub_80D92D0(struct Sprite *sprite)
+{
+ sub_8078764(sprite, 1);
+ sprite->data[0] = 30;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[2] = sprite->pos1.x - 20;
+ }
+ else
+ {
+ sprite->data[2] = sprite->pos1.x + 20;
+ sprite->hFlip = 1;
+ }
+
+ sprite->data[4] = sprite->pos1.y - 20;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, sub_80D9328);
+}
+
+static void sub_80D9328(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 11)
+ {
+ sprite->data[2] = sprite->pos1.x - sprite->pos2.x;
+ sprite->data[4] = sprite->pos1.y - sprite->pos2.y;
+ sprite->data[0] = 8;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ }
+}
+
+void sub_80D9378(struct Sprite *sprite)
+{
+ if ((gAnimBankAttacker ^ 2) == gAnimBankTarget && GetBankIdentity(gAnimBankTarget) < 2)
+ gBattleAnimArgs[0] *= -1;
+
+ sub_8078764(sprite, 1);
+
+ if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y;
+
+ InitAnimSpriteTranslationDeltas(sprite);
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[4];
+ sprite->data[7] = 0;
+
+ sprite->callback = sub_80D9404;
+}
+
+static void sub_80D9404(struct Sprite *sprite)
+{
+ if (!TranslateAnimSpriteByDeltas(sprite))
+ {
+ sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]);
+ sprite->data[7] += sprite->data[6];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80D943C(struct Sprite *sprite)
+{
+ sub_8078764(sprite, 1);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, sub_80D9474);
+}
+
+static void sub_80D9474(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = 20;
+
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+void sub_80D94A8(struct Sprite *sprite)
+{
+ sub_8078764(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+
+ sprite->callback = sub_80D94CC;
+}
+
+static void sub_80D94CC(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == -1)
+ {
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
+ sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
+
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, sub_80D9524);
+ }
+}
+
+static void sub_80D9524(struct Sprite *sprite)
+{
+ sprite->data[0] = 15;
+
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+void sub_80D9540(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sub_8078764(sprite, 1);
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+
+ if (sprite->data[3] > 100)
+ sprite->invisible = sprite->data[3] % 2;
+
+ if (sprite->data[3] > 120)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80D95D0(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0);
+ sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0);
+ sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[1];
+ sprite->pos1.y += gBattleAnimArgs[2];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = 0;
+ sprite->callback = sub_80D9640;
+}
+
+static void sub_80D9640(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (--sprite->data[1] == 0)
+ {
+ if (sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[3]++;
+ if (sprite->data[3] & 1)
+ sprite->pos2.x = 2;
+ else
+ sprite->pos2.x = -2;
+ }
+
+ if (--sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_80D96B8(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1) + gBattleAnimArgs[3];
+ }
+
+ sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
+ sprite->data[0] = 0;
+
+ switch (gBattleAnimArgs[1])
+ {
+ case 0:
+ sprite->data[6] = -3;
+ sprite->data[7] = -3;
+ break;
+ case 1:
+ sprite->data[6] = 3;
+ sprite->data[7] = -3;
+ break;
+ case 2:
+ sprite->data[6] = -3;
+ sprite->data[7] = 3;
+ break;
+ case 3:
+ sprite->data[6] = 3;
+ sprite->data[7] = 3;
+ break;
+ default:
+ DestroyAnimSprite(sprite);
+ return;
+ }
+
+ sprite->callback = sub_80D97A0;
+}
+
+static void sub_80D97A0(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[6];
+ sprite->pos1.y += sprite->data[7];
+
+ if (++sprite->data[0] > 40)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80D97CC(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBankPosition(gBankAttacker, 2);
+ sprite->pos1.y = GetBankPosition(gBankAttacker, 3);
+ sprite->oam.priority = sub_8079ED4(gAnimBankAttacker);
+ sprite->data[7] = gAnimBankTarget;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ sprite->data[7] = gAnimBankAttacker;
+ }
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 12;
+ sprite->data[2] = 8;
+ sprite->callback = sub_80D986C;
+}
+
+static void sub_80D986C(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 180)
+ {
+ REG_BLDCNT = 0;
+
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBankPosition(sprite->data[7], 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBankPosition(sprite->data[7], 3);
+
+ InitAnimSpriteTranslationDeltas(sprite);
+ StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
+ sprite->callback = TranslateAnimSpriteByDeltasUntil;
+ }
+}
+
+void sub_80D98D8(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = 120;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sub_8079BF4(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
+
+ sprite->data[6] = gBattleAnimArgs[1];
+ sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
+
+ sprite->callback = sub_80D9934;
+}
+
+static void sub_80D9934(struct Sprite *sprite)
+{
+ void *var0;
+
+ if (sprite->data[0] != 0)
+ {
+ var0 = sub_8079BFC(sprite->data[4], sprite->data[5]);
+ var0 -= sprite->data[6];
+ sub_8079BF4(&sprite->data[4], &sprite->data[5], var0);
+
+ var0 = (void *)(((intptr_t)var0) >> 8);
+ sprite->pos1.y = (intptr_t)var0;
+ if (sprite->pos1.y < -8)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[0]--;
+ }
+ else
+ {
+ s16 pos0 = GetBankPosition(gAnimBankAttacker, 2);
+ s16 pos1 = GetBankPosition(gAnimBankAttacker, 3);
+ s16 pos2 = GetBankPosition(gAnimBankTarget, 2);
+ s16 pos3 = GetBankPosition(gAnimBankTarget, 3);
+
+ sprite->data[0] = pos2 - pos0;
+ sprite->data[1] = pos3 - pos1;
+ sprite->data[2] = sprite->pos1.x << 4;
+ sprite->data[3] = sprite->pos1.y << 4;
+
+ sprite->callback = sub_80D99F4;
+ }
+}
+
+static void sub_80D99F4(struct Sprite *sprite)
+{
+ u16 edgeX;
+
+ sprite->data[2] += sprite->data[0];
+ sprite->data[3] += sprite->data[1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+
+ edgeX = sprite->pos1.x + 8;
+ if (edgeX > 256 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80D9A38(struct Sprite *sprite)
+{
+ u8 bank;
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBankPosition(gBankAttacker, 2);
+ sprite->pos1.y = GetBankPosition(gBankAttacker, 3);
+ bank = gAnimBankTarget;
+ sprite->oam.priority = sub_8079ED4(gAnimBankAttacker);
+ }
+ else
+ {
+ bank = gAnimBankAttacker;
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ }
+
+ if (IsContest())
+ sprite->oam.matrixNum |= 0x8;
+ else if (GetBankSide(bank) == SIDE_PLAYER)
+ sprite->oam.matrixNum |= 0x18;
+
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBankPosition(bank, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBankPosition(bank, 3);
+
+ InitAnimSpriteTranslationDeltas(sprite);
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = TranslateAnimSpriteByDeltasUntil;
+}
+
+static void sub_80D9B24(struct Sprite *sprite)
+{
+ if (sprite->data[0] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+
+ sprite->data[0]++;
+}
+
+void sub_80D9B48(struct Sprite *sprite)
+{
+ u8 turn;
+
+ sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2);
+ sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3);
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[0];
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->data[4] = gBattleAnimArgs[2];
+
+ turn = gAnimMoveTurn;
+ if (GetBankSide(gAnimBankTarget) == SIDE_PLAYER)
+ turn++;
+
+ if (turn & 1)
+ {
+ sprite->data[2] = -sprite->data[2];
+ sprite->data[1]++;
+ }
+
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->pos2.x = sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+ sprite->callback = sub_80D9B24;
+}
+
+void sub_80D9BD4(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ InitAnimSpritePos(sprite, 0);
+ else
+ sub_8078764(sprite, 0);
+
+ if (IsContest())
+ {
+ StartSpriteAnim(sprite, 2);
+ }
+ else if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->callback = sub_8078600;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+void sub_80D9C40(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sprite->data[1] = (sprite->data[1] + 40) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+
+ if (++sprite->data[0] > 40)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_80D9C80(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80789D4(0);
+ task->data[8] = gBattleAnimArgs[0];
+ task->data[0]++;
+ break;
+ case 1:
+ if (--task->data[8] == -1)
+ task->data[0]++;
+ break;
+ case 2:
+ default:
+ task->data[9] += 1280;
+ break;
+ }
+
+ task->data[10] += 2816;
+
+ if (GetBankSide(gAnimBankTarget) == SIDE_PLAYER)
+ gBattle_BG3_X += task->data[9] >> 8;
+ else
+ gBattle_BG3_X -= task->data[9] >> 8;
+
+ gBattle_BG3_Y += task->data[10] >> 8;
+
+ task->data[9] &= 0xFF;
+ task->data[10] &= 0xFF;
+
+ if (gBattleAnimArgs[7] == -1)
+ {
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ sub_80789D4(1);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c
index 4d577a765..fe63fcff1 100644
--- a/src/battle/anim/fire_2.c
+++ b/src/battle/anim/fire_2.c
@@ -42,7 +42,7 @@ struct Sprite *sub_80D5210(struct Sprite *sprite)
void sub_80D522C(struct Sprite *sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[7] = gBattleAnimArgs[2];
sprite->data[0] = 0;
@@ -62,7 +62,7 @@ void sub_80D5254(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->callback = sub_80D52AC;
}
@@ -70,7 +70,7 @@ void sub_80D5254(struct Sprite *sprite)
void sub_80D52AC(struct Sprite *sprite)
{
- if (sub_8078B5C(sprite))
+ if (TranslateAnimSpriteByDeltas(sprite))
{
sprite->data[0] = 0;
@@ -123,7 +123,7 @@ void sub_80D5374(struct Sprite *sprite)
void sub_80D53B4(struct Sprite *sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[3];
diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c
index 441ac0e6d..559f617c6 100644
--- a/src/battle/anim/flying_path.c
+++ b/src/battle/anim/flying_path.c
@@ -53,7 +53,7 @@ void sub_80CBF5C(u8 taskId)
{
case 4:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
{
break;
}
@@ -65,7 +65,7 @@ void sub_80CBF5C(u8 taskId)
break;
case 8:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
{
break;
}
@@ -77,7 +77,7 @@ void sub_80CBF5C(u8 taskId)
break;
case 0:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
break;
task->data[15] = 1;
@@ -103,7 +103,7 @@ void sub_80CBF5C(u8 taskId)
break;
case 2:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
break;
task->data[15] = 3;
@@ -146,7 +146,7 @@ void sub_80CBF5C(u8 taskId)
break;
case 6:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
break;
task->data[15] = 7;
@@ -189,7 +189,7 @@ void sub_80CBF5C(u8 taskId)
break;
case 10:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) == 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) == 0)
{
break;
}
@@ -221,7 +221,7 @@ void sub_80CBF5C(u8 taskId)
}
case 12:
sub_80CC358(task, taskId);
- if (sub_8078718(sprite) != 0)
+ if (TranslateAnimSpriteLinearAndSine(sprite) != 0)
{
DestroySprite(sprite);
task->data[0]++;
diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c
index e4577f1e1..e6c101de3 100644
--- a/src/battle/anim/glitter.c
+++ b/src/battle/anim/glitter.c
@@ -35,7 +35,7 @@ void sub_80CD190(struct Sprite* sprite)
if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2))
{
- sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y);
sub_807867C(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c
index c4d7b1cef..dbf7a1562 100644
--- a/src/battle/anim/grip.c
+++ b/src/battle/anim/grip.c
@@ -33,7 +33,7 @@ void sub_80D0178(struct Sprite* sprite)
sprite->data[0] = 6;
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + r8;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + r6;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, sub_80D020C);
}
diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c
index 254160109..211e0e841 100644
--- a/src/battle/anim/guard.c
+++ b/src/battle/anim/guard.c
@@ -15,7 +15,7 @@ void sub_80D3014(struct Sprite *sprite)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
{
- sub_807A3FC(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
sprite->pos1.y += 40;
StartSpriteAffineAnim(sprite, 1);
@@ -30,6 +30,6 @@ void sub_80D3014(struct Sprite *sprite)
sprite->data[2] = sprite->pos1.x;
sprite->data[4] = sprite->pos1.y - 72;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c
index b3d842cdf..15279d5e2 100644
--- a/src/battle/anim/guillotine.c
+++ b/src/battle/anim/guillotine.c
@@ -37,7 +37,7 @@ void sub_80D0228(struct Sprite* sprite)
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + r9;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + r6;
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = gBattleAnimArgs[0];
sprite->data[6] = sprite->data[0];
sprite->callback = sub_80D02D0;
@@ -45,7 +45,7 @@ void sub_80D0228(struct Sprite* sprite)
void sub_80D02D0(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite) && sprite->animEnded == 1)
+ if (TranslateAnimSpriteByDeltas(sprite) && sprite->animEnded == 1)
{
SeekSpriteAnim(sprite, 0);
sprite->animPaused = 1;
@@ -85,6 +85,6 @@ void sub_80D0344(struct Sprite* sprite)
void sub_80D03A8(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite) != 0)
+ if (TranslateAnimSpriteByDeltas(sprite) != 0)
DestroyAnimSprite(sprite);
}
diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c
index 5df89f929..857169e62 100644
--- a/src/battle/anim/heart_1.c
+++ b/src/battle/anim/heart_1.c
@@ -14,7 +14,7 @@ extern u8 gAnimBankTarget;
void sub_80D1C80(struct Sprite* sprite)
{
if (++sprite->data[0] == 1)
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
sprite->pos2.x = Sin(sprite->data[1], 8);
sprite->pos2.y = sprite->data[2] >> 8;
diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c
index 51cfbd007..055960f40 100644
--- a/src/battle/anim/heated_rock.c
+++ b/src/battle/anim/heated_rock.c
@@ -50,101 +50,25 @@ void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
sprite->data[5] = y * 8;
}
-#ifdef NONMATCHING
void sub_80D59B0(struct Sprite *sprite)
{
int var1;
- int var2;
-
if (++sprite->data[0] > 2)
{
sprite->data[0] = 0;
++sprite->data[1];
- sprite->data[3] += ((u16)sprite->data[1] * (u16)sprite->data[1]);
+ var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
+ sprite->data[3] += var1;
}
- var1 = (u16)sprite->data[4] + (u16)sprite->data[2];
- sprite->data[2] = var1;
- var1 = (s16)var1 >> 3;
- sprite->pos1.x = var1;
-
- var2 = (u16)sprite->data[5] + (u16)sprite->data[3];
- sprite->data[3] = var2;
- var2 = (s16)var2 >> 3;
- sprite->pos1.y = var2;
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[2] >> 3;
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.y = sprite->data[3] >> 3;
- if ((u32)((var1 + 8) << 16) > 0x1000000 || var2 < -8 || var2 > 120)
- {
- sprite->invisible = 1;
- }
-}
-#else
-__attribute__((naked))
-void sub_80D59B0(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {lr}\n\
- adds r2, r0, 0\n\
- ldrh r0, [r2, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x2E]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x2\n\
- ble _080D59DA\n\
- movs r0, 0\n\
- strh r0, [r2, 0x2E]\n\
- ldrh r0, [r2, 0x30]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x30]\n\
- ldrh r0, [r2, 0x30]\n\
- adds r1, r0, 0\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- ldrh r3, [r2, 0x34]\n\
- adds r0, r3\n\
- strh r0, [r2, 0x34]\n\
-_080D59DA:\n\
- ldrh r0, [r2, 0x36]\n\
- ldrh r1, [r2, 0x32]\n\
- adds r0, r1\n\
- strh r0, [r2, 0x32]\n\
- lsls r0, 16\n\
- asrs r0, 19\n\
- strh r0, [r2, 0x20]\n\
- ldrh r1, [r2, 0x38]\n\
- ldrh r3, [r2, 0x34]\n\
- adds r1, r3\n\
- strh r1, [r2, 0x34]\n\
- lsls r1, 16\n\
- asrs r3, r1, 19\n\
- strh r3, [r2, 0x22]\n\
- adds r0, 0x8\n\
- lsls r0, 16\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- cmp r0, r1\n\
- bhi _080D5A10\n\
- adds r1, r3, 0\n\
- movs r0, 0x8\n\
- negs r0, r0\n\
- cmp r1, r0\n\
- blt _080D5A10\n\
- cmp r1, 0x78\n\
- ble _080D5A1C\n\
-_080D5A10:\n\
- adds r0, r2, 0\n\
- adds r0, 0x3E\n\
- ldrb r1, [r0]\n\
- movs r2, 0x4\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
-_080D5A1C:\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ sprite->invisible = TRUE;
}
-#endif // NONMATCHING
void sub_80D5A20(struct Sprite *sprite)
{
diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c
index 4006e2d43..0697e83a0 100644
--- a/src/battle/anim/hop.c
+++ b/src/battle/anim/hop.c
@@ -91,7 +91,7 @@ void sub_80CB94C(struct Sprite* sprite)
{
s16 e1;
s16 e2;
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
e1 = GetBankPosition(gAnimBankTarget, 0);
e2 = GetBankPosition(gAnimBankTarget, 1);
if ((gAnimBankAttacker ^ 2) == gAnimBankTarget)
diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c
index d379c8f09..a3b5f19c5 100644
--- a/src/battle/anim/lunge_1.c
+++ b/src/battle/anim/lunge_1.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
static void sub_80CD7CC(struct Sprite* sprite);
static void sub_80CD81C(struct Sprite* sprite);
@@ -46,16 +46,16 @@ void sub_80CD7CC(struct Sprite* sprite)
sprite->data[0] = 6;
sprite->data[1] = (GetBankSide(gAnimBankAttacker)) ? 2 : -2;
sprite->data[2] = 0;
- sprite->data[3] = gObjectBankIDs[gAnimBankAttacker];
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
StoreSpriteCallbackInData(sprite, sub_80CD81C);
- sprite->callback = sub_8078458;
+ sprite->callback = TranslateMonBGUntil;
}
void sub_80CD81C(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
- sprite->data[3] = gObjectBankIDs[gAnimBankAttacker];
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
sub_8078E70(sprite->data[3], 0);
sprite->data[4] = (sprite->data[6] = GetBankSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00;
sprite->data[5] = 0;
@@ -76,9 +76,9 @@ void sub_80CD8A8(struct Sprite* sprite)
sprite->data[0] = 4;
sprite->data[1] = (GetBankSide(gAnimBankAttacker)) ? -3 : 3;
sprite->data[2] = 0;
- sprite->data[3] = gObjectBankIDs[gAnimBankAttacker];
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
StoreSpriteCallbackInData(sprite, sub_80CD9B8);
- sprite->callback = sub_8078458;
+ sprite->callback = TranslateMonBGUntil;
}
void sub_80CD8F8(struct Sprite* sprite)
@@ -94,7 +94,7 @@ void sub_80CD91C(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
- sprite->data[3] = gObjectBankIDs[gAnimBankAttacker];
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
sprite->data[6] = GetBankSide(gAnimBankAttacker);
if (GetBankSide(gAnimBankAttacker))
{
diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c
index fe2470567..f222b291d 100644
--- a/src/battle/anim/lunge_2.c
+++ b/src/battle/anim/lunge_2.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
static void sub_80CDB60(u8 taskId);
static void sub_80CDD20(u8 taskId);
@@ -20,7 +20,7 @@ void sub_80CDAC8(u8 taskId)
{
u8 a;
- gTasks[taskId].data[0] = gObjectBankIDs[gAnimBankAttacker];
+ gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker];
a = GetBankSide(gAnimBankAttacker);
gTasks[taskId].data[1] = a;
gTasks[taskId].data[2] = 0;
diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c
index 8358d23db..0ee381e13 100644
--- a/src/battle/anim/money.c
+++ b/src/battle/anim/money.c
@@ -19,7 +19,7 @@ void sub_80CFE9C(struct Sprite* sprite)
s16 r7;
u16 var;
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
r6 = GetBankPosition(gAnimBankTarget, 2);
r7 = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
if (GetBankSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c
index 715462d73..44817b0a0 100644
--- a/src/battle/anim/note_rain.c
+++ b/src/battle/anim/note_rain.c
@@ -24,14 +24,14 @@ void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b)
void sub_80D1C08(struct Sprite* sprite)
{
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
if (GetBankSide(gAnimBankAttacker) != 0)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBankPosition(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
}
diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c
index 524c51c08..262afb8bf 100644
--- a/src/battle/anim/note_scatter_2.c
+++ b/src/battle/anim/note_scatter_2.c
@@ -32,14 +32,14 @@ void sub_80CEE60(struct Sprite* sprite)
sprite->data[2] = a + sprite->data[1];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->data[3] - 40;
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80CEEE8;
}
void sub_80CEEE8(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite) == 0)
+ if (TranslateAnimSpriteByDeltas(sprite) == 0)
{
s16 a;
a = Sin(sprite->data[5], 8);
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index c8cf339d2..e7dd0df49 100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
@@ -79,13 +79,13 @@ void sub_80CACEC(u8 taskId)
void sub_80CAD54(struct Sprite* sprite)
{
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = 0x40;
sprite->callback = sub_80CADA8;
sub_80CADA8(sprite);
@@ -93,7 +93,7 @@ void sub_80CAD54(struct Sprite* sprite)
void sub_80CADA8(struct Sprite* sprite)
{
- if (!sub_8078B5C(sprite))
+ if (!TranslateAnimSpriteByDeltas(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 32);
sprite->pos2.y += Cos(sprite->data[5], -5);
@@ -116,13 +116,13 @@ void sub_80CADA8(struct Sprite* sprite)
void sub_80CAE20(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = 0x40;
sprite->callback = sub_80CAE74;
sub_80CAE74(sprite);
@@ -130,7 +130,7 @@ void sub_80CAE20(struct Sprite* sprite)
void sub_80CAE74(struct Sprite* sprite)
{
- if (!sub_8078B5C(sprite))
+ if (!TranslateAnimSpriteByDeltas(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 8);
if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5)
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index 6ca2fa71c..b965cacb8 100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
@@ -19,34 +19,34 @@ extern struct SpriteTemplate gSpriteTemplate_83D631C;
void sub_80CA7B0(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2);
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3);
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
}
void sub_80CA800(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
void sub_80CA858(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80CA8B4;
sub_80CA8B4(sprite);
@@ -54,7 +54,7 @@ void sub_80CA858(struct Sprite* sprite)
void sub_80CA8B4(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite))
+ if (TranslateAnimSpriteByDeltas(sprite))
{
DestroySprite(sprite);
}
@@ -105,7 +105,7 @@ void sub_80CA9A8(struct Sprite* sprite)
void sub_80CA9F8(struct Sprite* sprite)
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
}
diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c
index 3b3153428..14db096c6 100644
--- a/src/battle/anim/perceive.c
+++ b/src/battle/anim/perceive.c
@@ -19,6 +19,6 @@ void sub_80D2904(struct Sprite* sprite)
void sub_80D2920(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->callback = sub_80D2904;
}
diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c
index f31c441fb..272d99e84 100644
--- a/src/battle/anim/poison.c
+++ b/src/battle/anim/poison.c
@@ -17,7 +17,7 @@ void sub_80D9D70(struct Sprite *sprite)
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2);
@@ -31,7 +31,7 @@ void sub_80D9D70(struct Sprite *sprite)
void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
}
@@ -41,8 +41,8 @@ void sub_80D9DF0(struct Sprite *sprite)
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- sub_80787B0(sprite, 1);
- sub_807A3FC(gAnimBankTarget, 1, &l1, &l2);
+ InitAnimSpritePos(sprite, 1);
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &l1, &l2);
if (GetBankSide(gAnimBankAttacker))
gBattleAnimArgs[4] = -gBattleAnimArgs[4];
@@ -59,7 +59,7 @@ void sub_80D9DF0(struct Sprite *sprite)
void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
}
@@ -71,7 +71,7 @@ void sub_80D9E94(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1];
- sub_8078A5C(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
@@ -92,7 +92,7 @@ void sub_80D9EE8(struct Sprite *sprite)
void sub_80D9F14(struct Sprite *sprite)
{
- sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
if (GetBankSide(gAnimBankAttacker))
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -104,7 +104,7 @@ void sub_80D9F14(struct Sprite *sprite)
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
sprite->data[4] = sprite->pos1.y + sprite->data[0];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -116,7 +116,7 @@ void sub_80D9F88(struct Sprite *sprite)
}
else
{
- sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
if (GetBankSide(gAnimBankAttacker))
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c
index a0be20d6f..5d67311dc 100644
--- a/src/battle/anim/powder.c
+++ b/src/battle/anim/powder.c
@@ -6,12 +6,17 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
-static void sub_80CA768(struct Sprite* sprite);
+static void AnimMovePowderParticleStep(struct Sprite* sprite);
-// powder
+// Animates the falling particles that horizontally wave back and forth.
// Used by Sleep Powder, Stun Spore, and Poison Powder.
-
-void sub_80CA710(struct Sprite* sprite)
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: total duration in frames
+// arg 3: vertical movement speed (sub-pixel value)
+// arg 4: wave amplitude
+// arg 5: wave speed
+void AnimMovePowderParticle(struct Sprite* sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -28,10 +33,10 @@ void sub_80CA710(struct Sprite* sprite)
}
sprite->data[4] = gBattleAnimArgs[5];
- sprite->callback = sub_80CA768;
+ sprite->callback = AnimMovePowderParticleStep;
}
-void sub_80CA768(struct Sprite* sprite)
+static void AnimMovePowderParticleStep(struct Sprite* sprite)
{
if (sprite->data[0] > 0)
{
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 6617183cb..b108c496a 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -14,7 +14,7 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
extern const union AffineAnimCmd *const gUnknown_083DA888[];
extern struct AffineAnimFrameCmd gUnknown_083DA8A4;
@@ -53,11 +53,11 @@ void sub_80DB74C(struct Sprite *sprite)
u8 toBG_2 = (identity ^ var0) != 0;
if (IsAnimBankSpriteVisible(bank))
- sub_8076034(bank, toBG_2);
+ MoveBattlerSpriteToBG(bank, toBG_2);
bank = bankCopy ^ 2;
if (IsAnimBankSpriteVisible(bank))
- sub_8076034(bank, toBG_2 ^ var0);
+ MoveBattlerSpriteToBG(bank, toBG_2 ^ var0);
}
if (!IsContest() && IsDoubleBattle())
@@ -134,11 +134,11 @@ static void sub_80DB92C(struct Sprite *sprite)
u8 bank = bankCopy = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
if (IsAnimBankSpriteVisible(bank))
- gSprites[gObjectBankIDs[bank]].invisible = 0;
+ gSprites[gBankSpriteIds[bank]].invisible = 0;
bank = bankCopy ^ 2;
if (IsAnimBankSpriteVisible(bank))
- gSprites[gObjectBankIDs[bank]].invisible = 0;
+ gSprites[gBankSpriteIds[bank]].invisible = 0;
}
sprite->invisible = 1;
@@ -192,7 +192,7 @@ void sub_80DBA4C(struct Sprite *sprite)
else
{
if (gBattleAnimArgs[2] == 0)
- sub_80787B0(sprite, var0);
+ InitAnimSpritePos(sprite, var0);
else
sub_8078764(sprite, var0);
}
@@ -539,7 +539,7 @@ static void sub_80DC1FC(u8 taskId)
void sub_80DC2B0(struct Sprite *sprite)
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
{
FreeOamMatrix(sprite->oam.matrixNum);
DestroySprite(sprite);
diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c
index 915cadcbc..86b2c4659 100644
--- a/src/battle/anim/ring.c
+++ b/src/battle/anim/ring.c
@@ -10,7 +10,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
static void sub_80D1098(struct Sprite* sprite);
@@ -32,7 +32,7 @@ void sub_80D0FD8(struct Sprite* sprite)
r4 = gBattleAnimArgs[3] ^ 1;
if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2))
{
- sub_807A3FC(bank, r4, &sp0, &sp1);
+ SetAverageBattlerPositions(bank, r4, &sp0, &sp1);
if (r4 == 0)
r4 = GetBankPosition(bank, 0);
else
@@ -50,7 +50,7 @@ void sub_80D0FD8(struct Sprite* sprite)
void sub_80D1098(struct Sprite* sprite)
{
- if (sub_8078B5C(sprite))
+ if (TranslateAnimSpriteByDeltas(sprite))
{
FreeSpriteOamMatrix(sprite);
DestroyAnimSprite(sprite);
@@ -94,23 +94,23 @@ void sub_80D10B8(struct Sprite* sprite)
{
r9 = GetBankPosition(bankr7, r10) + gBattleAnimArgs[0];
if (IsAnimBankSpriteVisible(bankr8 ^ 2))
- sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1;
+ sprite->subpriority = gSprites[gBankSpriteIds[bankr8 ^ 2]].subpriority - 1;
else
- sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1;
+ sprite->subpriority = gSprites[gBankSpriteIds[bankr8]].subpriority - 1;
}
else
{
r9 = GetBankPosition(bankr7, r10) - gBattleAnimArgs[0];
if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2))
{
- if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x)
- sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1;
+ if (gSprites[gBankSpriteIds[bankr7]].pos1.x < gSprites[gBankSpriteIds[bankr7 ^ 2]].pos1.x)
+ sprite->subpriority = gSprites[gBankSpriteIds[bankr7 ^ 2]].subpriority + 1;
else
- sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1;
+ sprite->subpriority = gSprites[gBankSpriteIds[bankr7]].subpriority - 1;
}
else
{
- sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1;
+ sprite->subpriority = gSprites[gBankSpriteIds[bankr7]].subpriority - 1;
}
}
@@ -118,7 +118,7 @@ void sub_80D10B8(struct Sprite* sprite)
r6 = GetBankPosition(bankr7, sp4) + gBattleAnimArgs[1];
if (gMain.inBattle && IsAnimBankSpriteVisible(bankr8 ^ 2))
{
- sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1);
+ SetAverageBattlerPositions(bankr8, gBattleAnimArgs[6], &sp0, &sp1);
}
else
{
@@ -137,7 +137,7 @@ void sub_80D10B8(struct Sprite* sprite)
sprite->data[2] = sp0;
sprite->data[4] = sp1;
sprite->data[0] = gBattleAnimArgs[0];
- obj_translate_based_on_private_1_2_3_4(sprite);
+ InitAnimSpriteTranslationDeltas(sprite);
sprite->callback = sub_80D1098;
sub_80D1098(sprite);
}
diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c
index b113ce040..1d1772b1b 100644
--- a/src/battle/anim/rock.c
+++ b/src/battle/anim/rock.c
@@ -38,7 +38,7 @@ static void sub_80DD9FC(struct Sprite *sprite);
void sub_80DCE9C(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != 0)
- sub_807A3FC(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += 14;
@@ -91,7 +91,7 @@ void sub_80DCF60(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3];
- sub_8078A5C(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
@@ -102,7 +102,7 @@ void sub_80DCF60(struct Sprite *sprite)
void sub_80DCFE4(struct Sprite *sprite)
{
if (gBattleAnimArgs[6] == 0)
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
else
sub_8078764(sprite, 0);
@@ -275,13 +275,13 @@ void sub_80DD3AC(struct Sprite *sprite)
void sub_80DD490(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[2] = sprite->pos1.x;
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -455,7 +455,7 @@ static void sub_80DD774(struct Task *task)
void sub_80DD87C(struct Sprite *sprite)
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
{
u8 taskId = FindTaskIdByFunc(sub_80DD604);
if (taskId != 0xFF)
@@ -517,7 +517,7 @@ void sub_80DD978(struct Sprite *sprite)
if (GetBankSide(gAnimBankAttacker) == SIDE_OPPONENT)
StartSpriteAffineAnim(sprite, 1);
- sub_807941C(sprite);
+ TranslateAnimSpriteToTargetMonLocation(sprite);
}
void sub_80DD9A4(struct Sprite *sprite)
diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c
index 22bb26973..e6b85dd5f 100644
--- a/src/battle/anim/scan.c
+++ b/src/battle/anim/scan.c
@@ -47,7 +47,7 @@ void sub_80CD408(struct Sprite* sprite)
sprite->data[0] = 8;
sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0];
sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, sub_80CD4B8);
sprite->data[5] += 0x100;
PlaySE12WithPanning(0xD2, BattleAnimAdjustPanning(0x3F));
@@ -112,7 +112,7 @@ void sub_80CD4EC(struct Sprite* sprite)
sprite->data[0] = 6;
sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + a;
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + b;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, sub_80CD654);
}
}
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index be8613a74..e3d4bd3fb 100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
@@ -15,7 +15,7 @@ static void sub_80CABC0(struct Sprite* sprite);
void sub_80CAB18(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
if (GetBankSide(gAnimBankAttacker))
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -31,7 +31,7 @@ void sub_80CAB18(struct Sprite* sprite)
void sub_80CAB88(struct Sprite* sprite)
{
- if (sub_8078718(sprite))
+ if (TranslateAnimSpriteLinearAndSine(sprite))
{
sprite->invisible = 1;
sprite->data[0] = 10;
diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c
index 94069374f..61645bc59 100644
--- a/src/battle/anim/shadow_minimize.c
+++ b/src/battle/anim/shadow_minimize.c
@@ -93,7 +93,7 @@ void sub_80D04E0(u8 taskId)
sub_8078F40(task->data[0]);
gSprites[task->data[15]].pos2.y = 0;
DestroyAnimVisualTask(taskId);
- break;
+ break;
}
}
@@ -110,10 +110,11 @@ void sub_80D0614(struct Task* task, u8 taskId)
}
else
{
- gSprites[r8].oam.objMode = 1;
- gSprites[r8].oam.affineMode = 3;
- gSprites[r8].affineAnimPaused = 1;
- gSprites[r8].oam.matrixNum = r6;
+ gSprites[r8].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[r8].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ gSprites[r8].affineAnimPaused = TRUE;
+ r6 &= 0x1f;
+ gSprites[r8].oam.matrixNum = r6; // need to inhibit optimizing out the mov r0, 0x3f / neg r0, r0
gSprites[r8].subpriority = task->data[7] - task->data[3];
task->data[3]++;
task->data[6]++;
@@ -132,7 +133,7 @@ __attribute__((naked))
void sub_80D0614(struct Task* task, u8 taskId)
{
asm(".syntax unified\n\
- push {r4-r7,lr}\n\
+ push {r4-r7,lr}\n\
mov r7, r9\n\
mov r6, r8\n\
push {r6,r7}\n\
diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c
index 0897ec6e3..2808c86c2 100644
--- a/src/battle/anim/sonic.c
+++ b/src/battle/anim/sonic.c
@@ -29,7 +29,7 @@ void sub_80CF6DC(struct Sprite* sprite)
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
}
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
a = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
b = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y);
@@ -41,7 +41,7 @@ void sub_80CF6DC(struct Sprite* sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = a;
sprite->data[4] = b;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c
index 924b1b568..260ae544c 100644
--- a/src/battle/anim/sonic_task.c
+++ b/src/battle/anim/sonic_task.c
@@ -87,7 +87,7 @@ void sub_80CFB04(u8 taskId)
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
&& IsAnimBankSpriteVisible(gAnimBankTarget ^ 2))
{
- sub_807A3FC(gAnimBankTarget, 0, &sp1, &sp2);
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2);
}
else
{
diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c
index e6fd49a11..88112c74a 100644
--- a/src/battle/anim/sunlight.c
+++ b/src/battle/anim/sunlight.c
@@ -12,6 +12,6 @@ void sub_80D517C(struct Sprite *sprite)
sprite->data[0] = 60;
sprite->data[2] = 140;
sprite->data[4] = 80;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c
index b46fe6759..3367cca07 100644
--- a/src/battle/anim/sword.c
+++ b/src/battle/anim/sword.c
@@ -15,7 +15,7 @@ static void sub_80CF6B4(struct Sprite* sprite);
void sub_80CF690(struct Sprite* sprite)
{
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
sprite->callback = sub_80785E4;
StoreSpriteCallbackInData(sprite, sub_80CF6B4);
}
@@ -25,6 +25,6 @@ void sub_80CF6B4(struct Sprite* sprite)
sprite->data[0] = 6;
sprite->data[2] = sprite->pos1.x;
sprite->data[4] = sprite->pos1.y - 32;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c
index 50468a440..39d4ff01f 100644
--- a/src/battle/anim/tile_out.c
+++ b/src/battle/anim/tile_out.c
@@ -37,7 +37,7 @@ void sub_80CE1AC(struct Sprite* sprite)
sprite->data[0] = 30;
sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2);
sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3);
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
}
diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c
index bda476a0a..50ffaba4a 100644
--- a/src/battle/anim/unused_4.c
+++ b/src/battle/anim/unused_4.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
static void sub_80CD9D4(struct Sprite* sprite);
@@ -27,7 +27,7 @@ void sub_80CD9D4(struct Sprite* sprite)
{
case 0:
sprite->data[1] = 0;
- sprite->data[2] = gObjectBankIDs[gAnimBankAttacker];
+ sprite->data[2] = gBankSpriteIds[gAnimBankAttacker];
sprite->data[3] = GetBankSide(gAnimBankAttacker);
sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
sprite->data[5] = 0;
diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c
index 2be6e7633..5a2de33c3 100644
--- a/src/battle/anim/unused_7.c
+++ b/src/battle/anim/unused_7.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
// unused_7
@@ -32,7 +32,7 @@ void sub_80CF3C4(struct Sprite* sprite)
u8 a;
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2);
sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3);
- a = gObjectBankIDs[gAnimBankTarget];
+ a = gBankSpriteIds[gAnimBankTarget];
if (GetBankSide(gAnimBankAttacker) != 0)
{
sprite->pos1.x -= gBattleAnimArgs[0];
diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c
index 03772f951..b5e150dd8 100644
--- a/src/battle/anim/unused_8.c
+++ b/src/battle/anim/unused_8.c
@@ -15,7 +15,7 @@ static void sub_80CF4B8(struct Sprite* sprite);
void sub_80CF458(struct Sprite* sprite)
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[4];
@@ -28,7 +28,7 @@ void sub_80CF490(struct Sprite* sprite)
sprite->data[0] = sprite->data[1];
sprite->data[2] = sprite->pos1.x;
sprite->data[4] = sprite->pos1.y + 15;
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, sub_80CF4B8);
}
diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c
index cf3ccb0d4..6e0d0321b 100644
--- a/src/battle/anim/unused_9.c
+++ b/src/battle/anim/unused_9.c
@@ -3,6 +3,7 @@
#include "trig.h"
#include "battle_anim.h"
#include "sound.h"
+#include "palette.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
@@ -17,7 +18,7 @@ static void sub_80CFE2C(struct Sprite* sprite);
void sub_80CFDFC(struct Sprite* sprite)
{
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4);
sprite->callback = sub_80CFE2C;
}
@@ -26,23 +27,19 @@ void sub_80CFDFC(struct Sprite* sprite)
void sub_80CFE2C(struct Sprite* sprite)
{
u16 r7;
- u16* r1;
- u16* r2;
+ u16 r5;
int i;
if (++sprite->data[1] == 2)
{
sprite->data[1] = 0;
- r7 = gPlttBufferFaded[sprite->data[0] + 8];
- r2 = &gPlttBufferFaded[0x10];
- r1 = &gPlttBufferFaded[sprite->data[0] + 9];
- for (i = 7; i >= 0; i--)
+ r5 = sprite->data[0];
+ r7 = gPlttBufferFaded[r5 + 8];
+ for (i = 0; i < 8; i++)
{
- *r2 = *r1;
- r1++;
- r2++;
+ gPlttBufferFaded[r5 + i + 8] = gPlttBufferFaded[r5 + i + 9];
}
+ gPlttBufferFaded[r5 + 15] = r7;
- gPlttBufferFaded[sprite->data[0] + 15] = r7;
if (++sprite->data[2] == 0x18)
DestroyAnimSprite(sprite);
}
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 4068cbe78..e6945f9b2 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -18,7 +18,7 @@ void sub_80D37FC(struct Sprite *sprite)
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4];
- sprite->callback = sub_8078B34;
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -30,7 +30,7 @@ void sub_80D3838(struct Sprite *sprite)
}
else
{
- sub_80787B0(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
}
sprite->data[7] = gBattleAnimArgs[2];
diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c
index 348ce6426..24cecb60c 100644
--- a/src/battle/anim/wisp_fire.c
+++ b/src/battle/anim/wisp_fire.c
@@ -10,7 +10,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankTarget;
extern u8 gAnimBankAttacker;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
extern s8 gUnknown_083D9794[16];
extern s8 gUnknown_083D97A4[16];
@@ -175,7 +175,7 @@ void sub_80D60B4(u8 taskId)
}
gTasks[taskId].data[0]++;
- spriteId = gObjectBankIDs[gAnimBankTarget];
+ spriteId = gBankSpriteIds[gAnimBankTarget];
if (!gTasks[taskId].data[4])
unk = gUnknown_083D9794[gTasks[taskId].data[0] % 10];
diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c
index 0cbe6eed7..7c22b7f13 100644
--- a/src/battle/anim/wisp_orb.c
+++ b/src/battle/anim/wisp_orb.c
@@ -21,7 +21,7 @@ void sub_80D5B0C(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- sub_80787B0(sprite, 0);
+ InitAnimSpritePos(sprite, 0);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[7] = gBattleAnimArgs[2];
@@ -86,7 +86,7 @@ static void sub_80D5C5C(struct Sprite *sprite)
s16 initialData5;
s16 newData5;
- if (!sub_8078B5C(sprite))
+ if (!TranslateAnimSpriteByDeltas(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 16);
initialData5 = sprite->data[5];
diff --git a/src/battle/anim/withdraw.c b/src/battle/anim/withdraw.c
index e67248b9f..933c97fa9 100644
--- a/src/battle/anim/withdraw.c
+++ b/src/battle/anim/withdraw.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u8 gObjectBankIDs[];
+extern u8 gBankSpriteIds[];
static void sub_80CF514(u8 taskId);
@@ -17,13 +17,13 @@ static void sub_80CF514(u8 taskId);
void sub_80CF4D8(u8 taskId)
{
- sub_8078E70(gObjectBankIDs[gAnimBankAttacker], 0);
+ sub_8078E70(gBankSpriteIds[gAnimBankAttacker], 0);
gTasks[taskId].func = sub_80CF514;
}
void sub_80CF514(u8 taskId)
{
- u8 a = gObjectBankIDs[gAnimBankAttacker];
+ u8 a = gBankSpriteIds[gAnimBankAttacker];
s16 b;
if (GetBankSide(gAnimBankAttacker) == 0)
{