summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-03-17 11:44:32 -0700
committerMarcus Huderle <huderlem@gmail.com>2018-03-18 17:37:06 -0700
commit3c9552befdbd295b94a06fca31a4c03c667465b3 (patch)
treef60287f706417eaa80684d20b5058848e94a5275 /src
parente2cd9b404041282933e5a760b6b90b614cbcdf26 (diff)
More battle anim documentation
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/bubble.c2
-rw-r--r--src/battle/anim/bug.c12
-rw-r--r--src/battle/anim/drum.c2
-rw-r--r--src/battle/anim/fight.c51
-rw-r--r--src/battle/anim/fire_2.c67
-rw-r--r--src/battle/anim/flying_hearts.c2
-rw-r--r--src/battle/anim/orbit_fast.c17
-rw-r--r--src/battle/anim/orbit_scatter.c14
-rw-r--r--src/battle/anim/poison.c14
-rw-r--r--src/battle/anim/scan.c8
-rw-r--r--src/battle/anim/seed.c25
-rw-r--r--src/battle/anim/slash.c2
-rw-r--r--src/battle/anim/slice.c20
-rw-r--r--src/battle/anim/sonic.c34
-rw-r--r--src/battle/anim/unused_8.c2
-rw-r--r--src/battle/battle_anim_80A7E7C.c14
-rw-r--r--src/rom_8077ABC.c57
17 files changed, 211 insertions, 132 deletions
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c
index 1252c1315..d6ec06be9 100644
--- a/src/battle/anim/bubble.c
+++ b/src/battle/anim/bubble.c
@@ -97,6 +97,6 @@ static void sub_80D3370(struct Sprite *sprite)
static void sub_80D3398(struct Sprite *sprite)
{
sprite->data[0] = 10;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
}
diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c
index d24f8bfef..d57a1046e 100644
--- a/src/battle/anim/bug.c
+++ b/src/battle/anim/bug.c
@@ -174,9 +174,15 @@ static void sub_80DCBB4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-// used in 3 moves:
-// Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON
-void sub_80DCBCC(struct Sprite *sprite)
+// Translates a stinger sprite linearly to a destination location. The sprite is
+// initially rotated so that it appears to be traveling in a straight line.
+// Used by Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimTranslateStinger(struct Sprite *sprite)
{
s16 lVarX, lVarY;
u16 rot;
diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c
index 6306778ae..7937d040a 100644
--- a/src/battle/anim/drum.c
+++ b/src/battle/anim/drum.c
@@ -27,6 +27,6 @@ void sub_80CEDF0(struct Sprite* sprite)
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2) + a;
sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + 8;
sprite->data[0] = 8;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c
index a7c25de49..0f46187f2 100644
--- a/src/battle/anim/fight.c
+++ b/src/battle/anim/fight.c
@@ -29,9 +29,9 @@ 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 AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
+static void AnimStompFootStep(struct Sprite *sprite);
+static void AnimStompFootEnd(struct Sprite *sprite);
static void sub_80D9640(struct Sprite *sprite);
static void sub_80D97A0(struct Sprite *sprite);
static void sub_80D986C(struct Sprite *sprite);
@@ -44,7 +44,7 @@ void sub_080B08A0(struct Sprite *sprite)
sub_807867C(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = 15;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -72,7 +72,14 @@ void sub_80D9078(struct Sprite *sprite)
sub_80D902C(sprite);
}
-void sub_80D90A4(struct Sprite *sprite)
+// Displays a basic fist or foot sprite for a given duration.
+// Used by many fighting moves (and elemental "punch" moves).
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: ? (todo: related to initial pixel offsets)
+// arg 4: anim num
+void AnimBasicFistOrFoot(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
@@ -82,7 +89,7 @@ void sub_80D90A4(struct Sprite *sprite)
sub_8078764(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
@@ -225,35 +232,45 @@ static void sub_80D9404(struct Sprite *sprite)
}
}
-void sub_80D943C(struct Sprite *sprite)
+// Animates the spinning, shrinking kick or punch, which then
+// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: anim num
+// arg 3: spin duration
+void AnimSpinningKickOrPunch(struct Sprite *sprite)
{
sub_8078764(sprite, 1);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
- sprite->callback = sub_80782D8;
- StoreSpriteCallbackInData(sprite, sub_80D9474);
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData(sprite, AnimSpinningKickOrPunchFinish);
}
-static void sub_80D9474(struct Sprite *sprite)
+static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 0);
sprite->affineAnimPaused = 1;
sprite->data[0] = 20;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
-void sub_80D94A8(struct Sprite *sprite)
+// Animates MOVE_STOMP's foot that slides downward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wait duration
+void AnimStompFoot(struct Sprite *sprite)
{
sub_8078764(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
- sprite->callback = sub_80D94CC;
+ sprite->callback = AnimStompFootStep;
}
-static void sub_80D94CC(struct Sprite *sprite)
+static void AnimStompFootStep(struct Sprite *sprite)
{
if (--sprite->data[0] == -1)
{
@@ -262,15 +279,15 @@ static void sub_80D94CC(struct Sprite *sprite)
sprite->data[4] = GetBankPosition(gAnimBankTarget, 3);
sprite->callback = StartTranslateAnimSpriteByDeltas;
- StoreSpriteCallbackInData(sprite, sub_80D9524);
+ StoreSpriteCallbackInData(sprite, AnimStompFootEnd);
}
}
-static void sub_80D9524(struct Sprite *sprite)
+static void AnimStompFootEnd(struct Sprite *sprite)
{
sprite->data[0] = 15;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c
index fe63fcff1..f9c9b6d3b 100644
--- a/src/battle/anim/fire_2.c
+++ b/src/battle/anim/fire_2.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle.h"
#include "battle_anim.h"
#include "heated_rock.h"
#include "rom_8077ABC.h"
@@ -11,24 +12,34 @@ extern u8 gAnimBankTarget;
extern struct SpriteTemplate gSpriteTemplate_83D96C4;
extern s16 gHeatedRockCoords[7][2];
-void sub_80D5254(struct Sprite *);
-void sub_80D5348(struct Sprite *);
-void sub_80D52AC(struct Sprite *);
-void sub_80D5324(struct Sprite *);
+static void AnimFireRingStep1(struct Sprite *);
+static void UpdateFireRingCircleOffset(struct Sprite *);
+static void AnimFireRingStep2(struct Sprite *);
+static void AnimFireRingStep3(struct Sprite *);
void sub_80D53F4(struct Sprite *);
void sub_80D541C(struct Sprite *);
void sub_80D54E0(u8 taskId);
void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
-void sub_80D51A8(struct Sprite *sprite)
+
+// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
+// horizontally a bit.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+// arg 5: ? (todo: something related to which mon the pixel offsets are based on)
+// arg 6: ? (todo: something related to which mon the pixel offsets are based on)
+void AnimEmberFlare(struct Sprite *sprite)
{
if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)
- && (gAnimBankAttacker == GetBankByIdentity(2)
- || gAnimBankAttacker == GetBankByIdentity(3)))
+ && (gAnimBankAttacker == GetBankByIdentity(IDENTITY_PLAYER_MON2)
+ || gAnimBankAttacker == GetBankByIdentity(IDENTITY_OPPONENT_MON2)))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = sub_8079534;
- sub_8079534(sprite);
+ sprite->callback(sprite);
}
struct Sprite *sub_80D5210(struct Sprite *sprite)
@@ -40,19 +51,26 @@ struct Sprite *sub_80D5210(struct Sprite *sprite)
return sprite;
}
-void sub_80D522C(struct Sprite *sprite)
+// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
+// animation. The fire sprite first moves in a circle around the mon,
+// and then it is translated towards the target mon, while still rotating.
+// Lastly, it moves in a circle around the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wave offset
+void AnimFireRing(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
sprite->data[7] = gBattleAnimArgs[2];
sprite->data[0] = 0;
- sprite->callback = sub_80D5254;
+ sprite->callback = AnimFireRingStep1;
}
-void sub_80D5254(struct Sprite *sprite)
+static void AnimFireRingStep1(struct Sprite *sprite)
{
- sub_80D5348(sprite);
+ UpdateFireRingCircleOffset(sprite);
if (++sprite->data[0] == 0x12)
{
@@ -64,11 +82,11 @@ void sub_80D5254(struct Sprite *sprite)
InitAnimSpriteTranslationDeltas(sprite);
- sprite->callback = sub_80D52AC;
+ sprite->callback = AnimFireRingStep2;
}
}
-void sub_80D52AC(struct Sprite *sprite)
+static void AnimFireRingStep2(struct Sprite *sprite)
{
if (TranslateAnimSpriteByDeltas(sprite))
{
@@ -79,8 +97,8 @@ void sub_80D52AC(struct Sprite *sprite)
sprite->pos2.y = 0;
sprite->pos2.x = 0;
- sprite->callback = sub_80D5324;
- sub_80D5324(sprite);
+ sprite->callback = AnimFireRingStep3;
+ sprite->callback(sprite);
}
else
{
@@ -91,15 +109,15 @@ void sub_80D52AC(struct Sprite *sprite)
}
}
-void sub_80D5324(struct Sprite *sprite)
+static void AnimFireRingStep3(struct Sprite *sprite)
{
- sub_80D5348(sprite);
+ UpdateFireRingCircleOffset(sprite);
if (++sprite->data[0] == 0x1F)
DestroyAnimSprite(sprite);
}
-void sub_80D5348(struct Sprite *sprite)
+static void UpdateFireRingCircleOffset(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[7], 28);
sprite->pos2.y = Cos(sprite->data[7], 28);
@@ -107,7 +125,12 @@ void sub_80D5348(struct Sprite *sprite)
sprite->data[7] = (sprite->data[7] + 20) & 0xFF;
}
-void sub_80D5374(struct Sprite *sprite)
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: x delta
+// arg 4: y delta
+void AnimFireCross(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -118,7 +141,7 @@ void sub_80D5374(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
- sprite->callback = sub_8078364;
+ sprite->callback = TranslateSpriteOverDuration;
}
void sub_80D53B4(struct Sprite *sprite)
@@ -129,7 +152,7 @@ void sub_80D53B4(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[3];
sprite->invisible = TRUE;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80D53F4);
}
diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c
index d2d22602a..f20416535 100644
--- a/src/battle/anim/flying_hearts.c
+++ b/src/battle/anim/flying_hearts.c
@@ -19,7 +19,7 @@ void sub_80D2064(struct Sprite* sprite)
sprite->pos1.y = 0xA0;
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[1];
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80D2094);
}
diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c
index 92b67672b..71303b03c 100644
--- a/src/battle/anim/orbit_fast.c
+++ b/src/battle/anim/orbit_fast.c
@@ -8,12 +8,13 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80D2704(struct Sprite* sprite);
+static void AnimOrbitFastStep(struct Sprite* sprite);
-// orbit_fast (a quickly moving fast circular motion of a sprite around an object.)
-// Used by Hidden Power.
-
-void sub_80D26A4(struct Sprite* sprite)
+// Orbits a sphere in an ellipse around the mon.
+// Used by MOVE_HIDDEN_POWER
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimOrbitFast(struct Sprite* sprite)
{
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2);
sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3);
@@ -21,11 +22,11 @@ void sub_80D26A4(struct Sprite* sprite)
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[7] = sub_8079E90(gAnimBankAttacker);
- sprite->callback = sub_80D2704;
- sub_80D2704(sprite);
+ sprite->callback = AnimOrbitFastStep;
+ sprite->callback(sprite);
}
-void sub_80D2704(struct Sprite* sprite)
+static void AnimOrbitFastStep(struct Sprite* sprite)
{
if ((u16)(sprite->data[1] - 0x40) <= 0x7F)
sprite->subpriority = sprite->data[7] + 1;
diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c
index 54c157839..cda09a729 100644
--- a/src/battle/anim/orbit_scatter.c
+++ b/src/battle/anim/orbit_scatter.c
@@ -8,21 +8,21 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80D2834(struct Sprite* sprite);
+static void AnimOrbitScatterStep(struct Sprite* sprite);
-// orbit_scatter (scatters the objects associated with the fast orbit from the last file.)
-// Used in Hidden Power.
-
-void sub_80D27E0(struct Sprite* sprite)
+// Moves orbs away from the mon, based on where they are in their orbit.
+// Used in MOVE_HIDDEN_POWER.
+// arg 0: initial wave offset
+void AnimOrbitScatter(struct Sprite* sprite)
{
sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2);
sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3);
sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
- sprite->callback = sub_80D2834;
+ sprite->callback = AnimOrbitScatterStep;
}
-void sub_80D2834(struct Sprite* sprite)
+static void AnimOrbitScatterStep(struct Sprite* sprite)
{
sprite->pos2.x += sprite->data[0];
sprite->pos2.y += sprite->data[1];
diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c
index 019e2acff..3a7477a57 100644
--- a/src/battle/anim/poison.c
+++ b/src/battle/anim/poison.c
@@ -10,7 +10,7 @@ extern u8 gAnimBankTarget;
void sub_80D9DD4(struct Sprite *sprite);
void sub_80D9E78(struct Sprite *sprite);
void sub_80D9EE8(struct Sprite *sprite);
-void sub_80D9FF0(struct Sprite *sprite);
+static void AnimBubbleEffectStep(struct Sprite *sprite);
void sub_80D9D70(struct Sprite *sprite)
{
@@ -108,7 +108,13 @@ void sub_80D9F14(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
-void sub_80D9F88(struct Sprite *sprite)
+// Animates a bubble by rising upward, swaying side to side, and
+// enlarging the sprite. This is used as an after-effect by poison-type
+// moves, along with MOVE_BUBBLE, and MOVE_BUBBLEBEAM.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: 0 = single-target, 1 = multi-target
+void AnimBubbleEffect(struct Sprite *sprite)
{
if (!gBattleAnimArgs[2])
{
@@ -125,10 +131,10 @@ void sub_80D9F88(struct Sprite *sprite)
sprite->pos1.y += gBattleAnimArgs[1];
}
- sprite->callback = sub_80D9FF0;
+ sprite->callback = AnimBubbleEffectStep;
}
-void sub_80D9FF0(struct Sprite *sprite)
+static void AnimBubbleEffectStep(struct Sprite *sprite)
{
sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
sprite->pos2.x = Sin(sprite->data[0], 4);
diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c
index e6b85dd5f..403894cc8 100644
--- a/src/battle/anim/scan.c
+++ b/src/battle/anim/scan.c
@@ -26,7 +26,7 @@ void sub_80CD3E0(struct Sprite* sprite)
sprite->pos1.x -= 32;
sprite->pos1.y -= 32;
sprite->data[0] = 20;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80CD408);
}
@@ -36,7 +36,7 @@ void sub_80CD408(struct Sprite* sprite)
{
case 0:
sprite->data[0] = 1;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80CD408);
break;
case 1:
@@ -62,7 +62,7 @@ void sub_80CD4B8(struct Sprite* sprite)
if ((sprite->data[5] >> 8) == 4)
{
sprite->data[0] = 10;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80CD4EC);
}
else
@@ -80,7 +80,7 @@ void sub_80CD4EC(struct Sprite* sprite)
sprite->data[0] = 3;
sprite->data[1] = 0;
sprite->data[2] = 0;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80CD5A8);
}
else
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index ef4cdddb2..7f8154504 100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
@@ -7,13 +7,18 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80CAB88(struct Sprite* sprite);
-static void sub_80CABC0(struct Sprite* sprite);
+static void AnimLeechSeedStep(struct Sprite* sprite);
+static void AnimLeechSeedSprouts(struct Sprite* sprite);
// seed (sprouts a sapling from a seed.)
// Used by Leech Seed.
-
-void sub_80CAB18(struct Sprite* sprite)
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+// arg 5: wave amplitude
+void AnimLeechSeed(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
if (GetBankSide(gAnimBankAttacker))
@@ -26,25 +31,25 @@ void sub_80CAB18(struct Sprite* sprite)
sprite->data[4] = GetBankPosition(gAnimBankTarget, 1) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimSpriteTranslationOverDuration(sprite);
- sprite->callback = sub_80CAB88;
+ sprite->callback = AnimLeechSeedStep;
}
-void sub_80CAB88(struct Sprite* sprite)
+static void AnimLeechSeedStep(struct Sprite* sprite)
{
if (TranslateAnimSpriteLinearAndSine(sprite))
{
sprite->invisible = 1;
sprite->data[0] = 10;
- sprite->callback = sub_80782D8;
- StoreSpriteCallbackInData(sprite, sub_80CABC0);
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData(sprite, AnimLeechSeedSprouts);
}
}
-void sub_80CABC0(struct Sprite* sprite)
+static void AnimLeechSeedSprouts(struct Sprite* sprite)
{
sprite->invisible = 0;
StartSpriteAnim(sprite, 1);
sprite->data[0] = 60;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c
index 6adcaf098..306968111 100644
--- a/src/battle/anim/slash.c
+++ b/src/battle/anim/slash.c
@@ -60,7 +60,7 @@ void sub_80CDE78(struct Sprite* sprite)
sprite->data[1] = 8;
sprite->data[2] = 0;
StoreSpriteCallbackInData(sprite, sub_80CDEB0);
- sprite->callback = sub_8078364;
+ sprite->callback = TranslateSpriteOverDuration;
}
}
diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c
index fe8745483..80c58dddf 100644
--- a/src/battle/anim/slice.c
+++ b/src/battle/anim/slice.c
@@ -8,19 +8,21 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80CCB00(struct Sprite* sprite);
+static void AnimSliceStep(struct Sprite* sprite);
-// slice (the cutting animation showing as a yellow line drawn diagonally)
-// Used in Cut, Fury Cutter, Aerial Ace, and Air Cutter.
-
-void sub_80CC914(struct Sprite* sprite)
+// Moves the sprite in a diagonally slashing motion across the target mon.
+// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right
+void AnimCuttingSlice(struct Sprite* sprite)
{
sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0);
sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1);
if (GetBankSide(gAnimBankTarget) == 0)
sprite->pos1.y += 8;
- sprite->callback = sub_80CCB00;
+ sprite->callback = AnimSliceStep;
if (gBattleAnimArgs[2] == 0)
{
sprite->pos1.x += gBattleAnimArgs[0];
@@ -70,7 +72,7 @@ void sub_80CC9BC(struct Sprite* sprite)
if (GetBankSide(gAnimBankTarget) == 0)
sprite->pos1.y += 8;
- sprite->callback = sub_80CCB00;
+ sprite->callback = AnimSliceStep;
if (gBattleAnimArgs[2] == 0)
{
sprite->pos1.x += gBattleAnimArgs[0];
@@ -89,7 +91,7 @@ void sub_80CC9BC(struct Sprite* sprite)
sprite->data[1] = -sprite->data[1];
}
-void sub_80CCB00(struct Sprite* sprite)
+static void AnimSliceStep(struct Sprite* sprite)
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
@@ -106,6 +108,6 @@ void sub_80CCB00(struct Sprite* sprite)
{
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
sprite->data[0] = 3;
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
}
}
diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c
index ff3ba9480..1501f51f1 100644
--- a/src/battle/anim/sonic.c
+++ b/src/battle/anim/sonic.c
@@ -9,14 +9,18 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-// sonic (shoots a projectile towards the target.)
-// Used in Sonic Boom and Air Cutter.
-
-void sub_80CF6DC(struct Sprite* sprite)
+// Moves a projectile towards the target mon. The sprite is rotated to be pointing
+// in the same direction it's moving.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimSonicBoomProjectile(struct Sprite* sprite)
{
- s16 a;
- s16 b;
- u16 c;
+ s16 targetXPos;
+ s16 targetYPos;
+ u16 rotation;
if (IsContest())
{
@@ -30,17 +34,17 @@ void sub_80CF6DC(struct Sprite* sprite)
}
InitAnimSpritePos(sprite, 1);
- a = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
- b = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- c = ArcTan2Neg(a - sprite->pos1.x, b - sprite->pos1.y);
- c += 0xF000;
+ targetXPos = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ targetYPos = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y);
+ rotation += 0xF000;
if (IsContest())
- c -= 0x6000;
+ rotation -= 0x6000;
- sub_8078FDC(sprite, 0, 0x100, 0x100, c);
+ sub_8078FDC(sprite, 0, 0x100, 0x100, rotation);
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = a;
- sprite->data[4] = b;
+ sprite->data[2] = targetXPos;
+ sprite->data[4] = targetYPos;
sprite->callback = StartTranslateAnimSpriteByDeltas;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c
index b5e150dd8..c67ec2754 100644
--- a/src/battle/anim/unused_8.c
+++ b/src/battle/anim/unused_8.c
@@ -19,7 +19,7 @@ void sub_80CF458(struct Sprite* sprite)
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[4];
- sprite->callback = sub_80782D8;
+ sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData(sprite, sub_80CF490);
}
diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c
index f4b899eba..a8b0ec329 100644
--- a/src/battle/battle_anim_80A7E7C.c
+++ b/src/battle/battle_anim_80A7E7C.c
@@ -33,7 +33,7 @@ static void sub_80A88F0(struct Sprite *sprite);
static void AnimTask_WindUpLungePart1(u8 taskId);
static void AnimTask_WindUpLungePart2(u8 taskId);
static void AnimTask_SwayMonStep(u8 taskId);
-static void sub_80A8D8C(u8 taskId);
+static void AnimTask_ScaleMonAndRestoreStep(u8 taskId);
static void sub_80A8FD8(u8 taskId);
static void sub_80A913C(u8 taskId);
@@ -837,7 +837,13 @@ static void AnimTask_SwayMonStep(u8 taskId)
}
}
-void sub_80A8D34(u8 taskId)
+// Scales a mon's sprite, and then scales back to its original dimensions.
+// arg 0: x scale delta
+// arg 1: y scale delta
+// arg 2: duration
+// arg 3: anim bank
+// arg 4: sprite object mode
+void AnimTask_ScaleMonAndRestore(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]);
@@ -849,10 +855,10 @@ void sub_80A8D34(u8 taskId)
TASK.data[4] = spriteId;
TASK.data[10] = 0x100;
TASK.data[11] = 0x100;
- TASK.func = sub_80A8D8C;
+ TASK.func = AnimTask_ScaleMonAndRestoreStep;
}
-static void sub_80A8D8C(u8 taskId)
+static void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
{
u8 spriteId;
TASK.data[10] += TASK.data[0];
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 89526f372..9d864fec3 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -551,7 +551,10 @@ void sub_8078278(struct Sprite *sprite)
}
}
-void sub_80782D8(struct Sprite *sprite)
+// Simply waits until the sprite's data[0] hits zero.
+// This is used to let sprite anims or affine anims to run for a designated
+// duration.
+void WaitAnimForDuration(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
sprite->data[0]--;
@@ -562,7 +565,7 @@ void sub_80782D8(struct Sprite *sprite)
void sub_80782F8(struct Sprite *sprite)
{
sub_8078314(sprite);
- sprite->callback = sub_8078364;
+ sprite->callback = TranslateSpriteOverDuration;
sprite->callback(sprite);
}
@@ -580,7 +583,7 @@ void sub_8078314(struct Sprite *sprite)
sprite->data[1] = old;
}
-void sub_8078364(struct Sprite *sprite)
+void TranslateSpriteOverDuration(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -1163,13 +1166,13 @@ bool8 sub_8078E38()
return FALSE;
}
-void sub_8078E70(u8 sprite, u8 a2)
+void sub_8078E70(u8 sprite, u8 objMode)
{
u8 r7 = gSprites[sprite].data[0];
if (IsContest() || IsAnimBankSpriteVisible(r7))
gSprites[sprite].invisible = FALSE;
- gSprites[sprite].oam.objMode = a2;
+ gSprites[sprite].oam.objMode = objMode;
gSprites[sprite].affineAnimPaused = TRUE;
if (!IsContest() && !gSprites[sprite].oam.affineMode)
gSprites[sprite].oam.matrixNum = ewram17810[r7].unk6;
@@ -1561,20 +1564,26 @@ void sub_80796F8(u8 taskId)
}
}
-void sub_8079790(u8 task)
+// Linearly blends a mon's sprite colors with a target color with increasing
+// strength, and then blends out to the original color.
+// arg 0: anim bank
+// arg 1: blend color
+// arg 2: target blend coefficient
+// arg 3: initial delay
+// arg 4: number of times to blend in and out
+void AnimTask_BlendMonInAndOut(u8 task)
{
- u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]);
-
- if (sprite == 0xff)
+ u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
+ if (spriteId == 0xff)
{
DestroyAnimVisualTask(task);
return;
}
- gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101;
- sub_80797EC(&gTasks[task]);
+ gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101;
+ AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
}
-void sub_80797EC(struct Task *task)
+void AnimTask_BlendMonInAndOutSetup(struct Task *task)
{
task->data[1] = gBattleAnimArgs[1];
task->data[2] = 0;
@@ -1583,10 +1592,10 @@ void sub_80797EC(struct Task *task)
task->data[5] = gBattleAnimArgs[3];
task->data[6] = 0;
task->data[7] = gBattleAnimArgs[4];
- task->func = sub_8079814;
+ task->func = AnimTask_BlendMonInAndOutStep;
}
-void sub_8079814(u8 taskId)
+void AnimTask_BlendMonInAndOutStep(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1596,14 +1605,14 @@ void sub_8079814(u8 taskId)
if (!task->data[6])
{
task->data[2]++;
- BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]);
+ BlendPalette(task->data[0], 15, task->data[2], task->data[1]);
if (task->data[2] == task->data[3])
task->data[6] = 1;
}
else
{
task->data[2]--;
- BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]);
+ BlendPalette(task->data[0], 15, task->data[2], task->data[1]);
if (!task->data[2])
{
if (--task->data[7])
@@ -1631,7 +1640,7 @@ void sub_80798AC(u8 task)
return;
}
gTasks[task].data[0] = (palette * 0x10) + 0x101;
- sub_80797EC(&gTasks[task]);
+ AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
}
void sub_80798F4(struct Task *task, u8 a2, const void *a3)
@@ -1873,26 +1882,26 @@ void sub_8079E24()
}
}
-u8 sub_8079E90(u8 slot)
+u8 sub_8079E90(u8 bank)
{
- u8 status;
+ u8 identity;
u8 ret;
if (IsContest())
{
- if (slot == 2)
+ if (bank == ANIM_BANK_ATK_PARTNER)
return 30;
else
return 40;
}
else
{
- status = GetBankIdentity(slot);
- if (status == 0)
+ identity = GetBankIdentity(bank);
+ if (identity == IDENTITY_PLAYER_MON1)
ret = 30;
- else if (status == 2)
+ else if (identity == IDENTITY_PLAYER_MON2)
ret = 20;
- else if (status == 1)
+ else if (identity == IDENTITY_OPPONENT_MON1)
ret = 40;
else
ret = 50;