summaryrefslogtreecommitdiff
path: root/src/battle/anim/fire_2.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-04-30 10:46:34 -0700
committerMarcus Huderle <huderlem@gmail.com>2018-04-30 10:46:57 -0700
commitd68e8b09eecd136fc0dcc32c1e08b946b8981adc (patch)
tree3ef1fb195ef1f90eb2b2a7b3c541f4ce0a823c94 /src/battle/anim/fire_2.c
parentc88cf196af0f099f4daa7cbc06b9b0df9a31c60c (diff)
Finish moving battle anim .rodata into .c files
Diffstat (limited to 'src/battle/anim/fire_2.c')
-rw-r--r--src/battle/anim/fire_2.c302
1 files changed, 289 insertions, 13 deletions
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c
index 97ac2e933..b055d7c80 100644
--- a/src/battle/anim/fire_2.c
+++ b/src/battle/anim/fire_2.c
@@ -9,18 +9,180 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D96C4;
-extern s16 gHeatedRockCoords[7][2];
+void AnimEmberFlare(struct Sprite *sprite);
+void sub_80D5210(struct Sprite *sprite);
+void AnimFireRing(struct Sprite *sprite);
+void AnimFireCross(struct Sprite *sprite);
+void sub_80D53B4(struct Sprite *sprite);
+void sub_80D58FC(struct Sprite *sprite);
+void sub_80D5A20(struct Sprite *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);
+static void sub_80D53F4(struct Sprite *);
+static void sub_80D541C(struct Sprite *);
+static void sub_80D54E0(u8 taskId);
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
+static void sub_80D59B0(struct Sprite *);
+static void sub_80D5A74(struct Sprite *);
+
+const union AnimCmd gSpriteAnim_83D95C8[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D95E0[] =
+{
+ gSpriteAnim_83D95C8,
+};
+
+const struct SpriteTemplate gEmberSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gEmberFlareSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEmberFlare,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9614 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5210,
+};
+
+const struct SpriteTemplate gFireRingSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireRing,
+};
+
+const union AnimCmd gSpriteAnim_83D9644[] =
+{
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9650[] =
+{
+ gSpriteAnim_83D9644,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9654[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9664[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9674[] =
+{
+ gSpriteAffineAnim_83D9654,
+ gSpriteAffineAnim_83D9664,
+};
+
+const struct SpriteTemplate gFireCrossSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9650,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireCross,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9694 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D53B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96AC =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807A9BC,
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_83D96C4 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D58FC,
+};
+
+const s16 gHeatedRockCoords[][2] =
+{
+ {-2, -5},
+ {-1, -1},
+ { 3, -6},
+ { 4, -2},
+ { 2, -8},
+ {-5, -5},
+ { 4, -7},
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96F8 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5A20,
+};
// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
// horizontally a bit.
@@ -42,13 +204,12 @@ void AnimEmberFlare(struct Sprite *sprite)
sprite->callback(sprite);
}
-struct Sprite *sub_80D5210(struct Sprite *sprite)
+void sub_80D5210(struct Sprite *sprite)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = sub_8079534;
- return sprite;
}
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
@@ -157,7 +318,7 @@ void sub_80D53B4(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, sub_80D53F4);
}
-void sub_80D53F4(struct Sprite *sprite)
+static void sub_80D53F4(struct Sprite *sprite)
{
sprite->invisible = FALSE;
@@ -168,7 +329,7 @@ void sub_80D53F4(struct Sprite *sprite)
sub_80D541C(sprite);
}
-void sub_80D541C(struct Sprite *sprite)
+static void sub_80D541C(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8);
@@ -199,7 +360,7 @@ void sub_80D5470(u8 taskId) // initialize animation task for Move_ERUPTION?
task->func = sub_80D54E0;
}
-void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
+static void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
{
struct Task *task = &gTasks[taskId];
@@ -309,7 +470,7 @@ void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
}
}
-void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
{
u16 i, j;
s8 sign;
@@ -346,4 +507,119 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
gTasks[taskId].data[a3]++;
}
}
-} \ No newline at end of file
+}
+
+void sub_80D58FC(struct Sprite *sprite)
+{
+ sub_80D59B0(sprite);
+
+ if (sprite->invisible)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+}
+
+u16 sub_80D5940(u8 spriteId)
+{
+ u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
+
+ if (GetBattlerSide(gAnimBankAttacker) == 0)
+ {
+ var1 = ((var1 << 16) + 0x4A0000) >> 16;
+ }
+ else
+ {
+ var1 = ((var1 << 16) + 0x2C0000) >> 16;
+ }
+
+ return var1;
+}
+
+void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = (u16)sprite->pos1.x * 8;
+ sprite->data[3] = (u16)sprite->pos1.y * 8;
+ sprite->data[4] = x * 8;
+ sprite->data[5] = y * 8;
+}
+
+static void sub_80D59B0(struct Sprite *sprite)
+{
+ int var1;
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ ++sprite->data[1];
+ var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
+ sprite->data[3] += var1;
+ }
+
+ 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 (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ sprite->invisible = TRUE;
+}
+
+void sub_80D5A20(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+
+ sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
+ sprite->callback = sub_80D5A74;
+}
+
+static void sub_80D5A74(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] != 0)
+ {
+ sprite->data[6]--;
+ return;
+ }
+
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[7])
+ {
+ sprite->pos1.y = sprite->data[7];
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if ((++sprite->data[2] & 1) != 0)
+ {
+ sprite->pos2.y = -3;
+ }
+ else
+ {
+ sprite->pos2.y = 3;
+ }
+ }
+
+ if (++sprite->data[3] > 16)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}