diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-04-30 13:42:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-30 13:42:55 -0700 |
commit | 74f9ec9464e5346ae277c9c929ef4b965276fc02 (patch) | |
tree | 6e12c5e3f456ad444d37853f0bb8e0a03bd85003 /src | |
parent | e437b10eee6f843e1898ce9b0302afb17f8b81e9 (diff) | |
parent | d68e8b09eecd136fc0dcc32c1e08b946b8981adc (diff) |
Merge pull request #608 from huderlem/anim_rodata
Move battle anim .rodata
Diffstat (limited to 'src')
126 files changed, 9412 insertions, 1890 deletions
diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c index 72f8ec947..04ae15a5e 100644 --- a/src/battle/anim/alert.c +++ b/src/battle/anim/alert.c @@ -8,9 +8,40 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF610(struct Sprite* sprite); + // alert (red thunder from the sides of a Pokemon, simulating more alert behavior.) // Used in Kinesis. +const union AnimCmd gSpriteAnim_83D7428[] = +{ + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(8, 3, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .hFlip = TRUE), + ANIMCMD_FRAME(24, 3, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(40, 3, .hFlip = TRUE), + ANIMCMD_FRAME(48, 3, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D744C[] = +{ + gSpriteAnim_83D7428, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7450 = +{ + .tileTag = 10075, + .paletteTag = 10075, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83D744C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF610, +}; + void sub_80CF610(struct Sprite* sprite) { sub_8078650(sprite); diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c index 5ec083887..be5b82ea1 100644 --- a/src/battle/anim/angel.c +++ b/src/battle/anim/angel.c @@ -8,9 +8,33 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2938(struct Sprite* sprite); + // angel (a little angel descends from somewhere towards a position) // Used in Sweet Kiss. +const union AnimCmd gSpriteAnim_83D7BAC[] = +{ + ANIMCMD_FRAME(0, 24), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7BB4[] = +{ + gSpriteAnim_83D7BAC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BB8 = +{ + .tileTag = 10220, + .paletteTag = 10220, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7BB4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2938, +}; + void sub_80D2938(struct Sprite* sprite) { s16 r5; diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c index d5be6e2af..64abff6cf 100644 --- a/src/battle/anim/angel_kiss.c +++ b/src/battle/anim/angel_kiss.c @@ -9,10 +9,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2A38(struct Sprite* sprite); + // angel_kiss (a different variation of kiss_fountain.) // Used in Sweet Kiss. -void sub_80D29CC(struct Sprite* sprite) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BD0 = +{ + .tileTag = 10219, + .paletteTag = 10219, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2A38, +}; + +static void sub_80D29CC(struct Sprite* sprite) { sprite->data[5]++; sprite->pos2.x = Sin(sprite->data[3], 5); @@ -50,38 +63,3 @@ void sub_80D2A38(struct Sprite* sprite) } } } - -// this is for the next file, but i didnt feel like deleting it from the original 80C file. -/* void sub_80D2ABC(struct Sprite* sprite) -{ - int var; - s16 var2; - int var3; - if (sprite->data[3] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 0); - sprite->subpriority = sub_8079E90(gAnimBankTarget) - 1; - sprite->data[2] = 1; - } - - sprite->data[0] += sprite->data[2]; - var = sprite->data[0] * 4; - if (var < 0) - var += 0xFF; - - sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); - if (sprite->data[1] < 0) - sprite->data[1] = 0; - - var3 = sprite->data[1]; - var2 = sprite->data[0]; - var2 /= 4; - sprite->pos2.x = Cos(var3, 30 - var2); - var3 = sprite->data[1]; - var2 = sprite->data[0] / 8; - sprite->pos2.x = Sin(var3, 10 - var2); - if (sprite->data[1] > 0x80 && sprite->data[2] > 0) - sprite->data[2] = 0xFFFF; -} */ diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c index 4ea56636b..a50404ddf 100644 --- a/src/battle/anim/anger.c +++ b/src/battle/anim/anger.c @@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D09C0(struct Sprite* sprite); + // anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.) // Used in Frustration, Rage, Swagger, Torment, and Taunt. +const union AffineAnimCmd gSpriteAffineAnim_83D777C[] = +{ + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7794[] = +{ + gSpriteAffineAnim_83D777C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7798 = +{ + .tileTag = 10087, + .paletteTag = 10087, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7794, + .callback = sub_80D09C0, +}; + void sub_80D09C0(struct Sprite* sprite) { u8 bank; diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c index de145d6a4..5aff17f48 100644 --- a/src/battle/anim/aurora.c +++ b/src/battle/anim/aurora.c @@ -9,9 +9,51 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D33B4(struct Sprite *sprite); static void sub_80D344C(struct Sprite *); static void sub_80D34D4(u8); +const union AnimCmd gSpriteAnim_83D9190[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9198[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D91A0[] = +{ + gSpriteAnim_83D9190, + gSpriteAnim_83D9198, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D91A8[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] = +{ + gSpriteAffineAnim_83D91A8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = +{ + .tileTag = 10140, + .paletteTag = 10140, + .oam = &gOamData_837E024, + .anims = gSpriteAnimTable_83D91A0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D91C0, + .callback = sub_80D33B4, +}; + void sub_80D33B4(struct Sprite *sprite) { s16 r6; diff --git a/src/battle/anim/beta_beat_up.c b/src/battle/anim/beta_beat_up.c index ee889492c..166782362 100644 --- a/src/battle/anim/beta_beat_up.c +++ b/src/battle/anim/beta_beat_up.c @@ -7,10 +7,35 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D6234(struct Sprite *sprite); static void sub_80D6278(struct Sprite *); // beta_beat_up +const union AffineAnimCmd gSpriteAffineAnim_83D97E8[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 60), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9808[] = +{ + gSpriteAffineAnim_83D97E8, +}; + +const struct SpriteTemplate gSpriteTemplate_83D980C = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9808, + .callback = sub_80D6234, +}; + void sub_80D6234(struct Sprite *sprite) { if (GetBattlerSide(gAnimBankAttacker) != 0) diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c index 6d762bc7f..0235794c2 100644 --- a/src/battle/anim/blow_kiss.c +++ b/src/battle/anim/blow_kiss.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1F58(struct Sprite* sprite); static void sub_80D1FA4(struct Sprite* sprite); // blow_kiss (a heart floating across the screen.) // Used in Attract. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AB0 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1F58, +}; + void sub_80D1F58(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -25,7 +37,7 @@ void sub_80D1F58(struct Sprite* sprite) sprite->callback = sub_80D1FA4; } -void sub_80D1FA4(struct Sprite* sprite) +static void sub_80D1FA4(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) == 0) { diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c index 0d5a54e18..83a539f89 100644 --- a/src/battle/anim/bottle.c +++ b/src/battle/anim/bottle.c @@ -8,12 +8,46 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CCF04(struct Sprite* sprite); static void sub_80CCF70(struct Sprite* sprite); static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); // bottle (shows a bottle swinging back and forth.) // Used by Milk Drink. +const union AffineAnimCmd gSpriteAffineAnim_83D6C00[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6C10[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6C40[] = +{ + gSpriteAffineAnim_83D6C00, + gSpriteAffineAnim_83D6C10, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C48 = +{ + .tileTag = 10099, + .paletteTag = 10099, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6C40, + .callback = sub_80CCF04, +}; + void sub_80CCF04(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2); @@ -30,7 +64,7 @@ void sub_80CCF04(struct Sprite* sprite) sprite->callback = sub_80CCF70; } -void sub_80CCF70(struct Sprite* sprite) +static void sub_80CCF70(struct Sprite* sprite) { switch (sprite->data[0]) { @@ -103,7 +137,7 @@ void sub_80CCF70(struct Sprite* sprite) } } -void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) +static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) { if (sprite->data[3] <= 11) sprite->data[4] += 2; diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c index a81af73ac..89330788c 100644 --- a/src/battle/anim/brace.c +++ b/src/battle/anim/brace.c @@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CDF0C(struct Sprite* sprite); static void sub_80CDF70(struct Sprite* sprite); // brace (the Pokemon prepares to endure a hit) // Used in Endure. +const union AnimCmd gSpriteAnim_83D6E80[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6E94[] = +{ + gSpriteAnim_83D6E80, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_EndureFlame = +{ + .tileTag = 10184, + .paletteTag = 10184, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83D6E94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CDF0C, +}; + void sub_80CDF0C(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) @@ -31,7 +57,7 @@ void sub_80CDF0C(struct Sprite* sprite) sprite->callback = sub_80CDF70; } -void sub_80CDF70(struct Sprite* sprite) +static void sub_80CDF70(struct Sprite* sprite) { if (++sprite->data[0] > sprite->data[1]) { diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c index 58b5066c0..87c737fac 100644 --- a/src/battle/anim/breath.c +++ b/src/battle/anim/breath.c @@ -8,9 +8,46 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0930(struct Sprite* sprite); + // breath (a puff of smoke, usually from the mouth or nose of the Pokemon.) // Used in Swagger and Bulk Up. +const union AnimCmd gSpriteAnim_83D7734[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 40, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_FRAME(12, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7748[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 40), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D775C[] = +{ + gSpriteAnim_83D7734, + gSpriteAnim_83D7748, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7764 = +{ + .tileTag = 10086, + .paletteTag = 10086, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D775C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0930, +}; + void sub_80D0930(struct Sprite* sprite) { if (GetBattlerSide(gAnimBankAttacker) == 0) diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c index 27791eedf..e024091d7 100644 --- a/src/battle/anim/bubble.c +++ b/src/battle/anim/bubble.c @@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D31C8(struct Sprite* sprite); static void sub_80D32E8(struct Sprite *sprite); static void sub_80D3370(struct Sprite *sprite); static void sub_80D3398(struct Sprite *sprite); @@ -15,6 +16,42 @@ static void sub_80D3398(struct Sprite *sprite); // bubble (indidivual bubble that floats around) // Used in Bubble and Bubblebeam +const union AffineAnimCmd gSpriteAffineAnim_83D9148[] = +{ + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9160[] = +{ + gSpriteAffineAnim_83D9148, +}; + +const union AnimCmd gSpriteAnim_83D9164[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9174[] = +{ + gSpriteAnim_83D9164, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9178 = +{ + .tileTag = 10146, + .paletteTag = 10146, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D9174, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9160, + .callback = sub_80D31C8, +}; + void sub_80D31C8(struct Sprite* sprite) { u8 newSpriteId; diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index 245e45774..c4c7fe937 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -3,18 +3,202 @@ #include "contest.h" #include "rom_8077ABC.h" #include "trig.h" -// #include "util.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80DC824(struct Sprite *sprite); +void sub_80DC8F4(struct Sprite *sprite); +void sub_80DC9A0(struct Sprite *sprite); +void sub_80DCA70(struct Sprite *sprite); +void sub_80DCB38(struct Sprite *sprite); +void AnimTranslateStinger(struct Sprite *sprite); +void AnimMissileArc(struct Sprite *sprite); +void sub_80DCE40(struct Sprite *sprite); static void sub_80DCA38(struct Sprite *sprite); static void sub_80DCAEC(struct Sprite *sprite); static void sub_80DCB5C(struct Sprite *sprite); static void sub_80DCBB4(struct Sprite *sprite); static void AnimMissileArcStep(struct Sprite *sprite); +const union AffineAnimCmd gSpriteAffineAnim_83DAA80[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAA90[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -99, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAAA0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 94, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAAB0[] = +{ + gSpriteAffineAnim_83DAA80, + gSpriteAffineAnim_83DAA90, + gSpriteAffineAnim_83DAAA0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAABC = +{ + .tileTag = 10153, + .paletteTag = 10153, + .oam = &gOamData_837E014, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAAB0, + .callback = sub_80DC824, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAAD4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -33, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAAE4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAAF4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB04[] = +{ + gSpriteAffineAnim_83DAAD4, + gSpriteAffineAnim_83DAAE4, + gSpriteAffineAnim_83DAAF4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB10 = +{ + .tileTag = 10161, + .paletteTag = 10161, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAB04, + .callback = sub_80DC8F4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB28 = +{ + .tileTag = 10180, + .paletteTag = 10180, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DC9A0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB40 = +{ + .tileTag = 10179, + .paletteTag = 10179, + .oam = &gOamData_837DF5C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DCA70, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAB58[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB70[] = +{ + gSpriteAffineAnim_83DAB58, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB74 = +{ + .tileTag = 10181, + .paletteTag = 10181, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAB70, + .callback = sub_80DCB38, +}; + +const struct SpriteTemplate gLinearStingerSpriteTemplate = +{ + .tileTag = 10161, + .paletteTag = 10161, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTranslateStinger, +}; + +const struct SpriteTemplate gPinMissileSpriteTemplate = +{ + .tileTag = 10161, + .paletteTag = 10161, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc, +}; + +const struct SpriteTemplate gIcicleSpearSpriteTemplate = +{ + .tileTag = 10262, + .paletteTag = 10262, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DABD4[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8), + AFFINEANIMCMD_LOOP(5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAC0C[] = +{ + gSpriteAffineAnim_83DABD4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC10 = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAC0C, + .callback = sub_80DCE40, +}; + // used in Move_MEGAHORN void sub_80DC824(struct Sprite *sprite) { diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c index 035adf394..764903247 100644 --- a/src/battle/anim/bullet.c +++ b/src/battle/anim/bullet.c @@ -9,12 +9,35 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CFFD8(struct Sprite* sprite); static void sub_80D0030(struct Sprite* sprite); static void sub_80D00B4(struct Sprite* sprite); // bullet (shoot seeds as ammunition.) // Used by Bullet Seed. +const union AffineAnimCmd gSpriteAffineAnim_83D7614[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7624[] = +{ + gSpriteAffineAnim_83D7614, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7628 = +{ + .tileTag = 10006, + .paletteTag = 10006, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7624, + .callback = sub_80CFFD8, +}; + void sub_80CFFD8(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -26,7 +49,7 @@ void sub_80CFFD8(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D0030); } -void sub_80D0030(struct Sprite* sprite) +static void sub_80D0030(struct Sprite* sprite) { int i; u16 rand; @@ -50,7 +73,7 @@ void sub_80D0030(struct Sprite* sprite) sprite->affineAnimPaused = 0; } -void sub_80D00B4(struct Sprite* sprite) +static void sub_80D00B4(struct Sprite* sprite) { sprite->data[0] += sprite->data[7]; sprite->pos2.x = sprite->data[0] >> 8; diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c index ac60d2c2b..d554a7e26 100644 --- a/src/battle/anim/copy_orb.c +++ b/src/battle/anim/copy_orb.c @@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AnimCmd *const gSpriteAnimTable_83D62D4[]; + +void sub_80CB4CC(struct Sprite* sprite); + // copy_orb // Used in Mimic. +const union AffineAnimCmd gSpriteAffineAnim_83D65B8[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 0), + AFFINEANIMCMD_FRAME(48, 48, 0, 14), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D65D0[] = { + AFFINEANIMCMD_FRAME(-16, -16, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D65E0[] = { + gSpriteAffineAnim_83D65B8, + gSpriteAffineAnim_83D65D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65E8 = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D62D4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D65E0, + .callback = sub_80CB4CC, +}; + void sub_80CB4CC(struct Sprite* sprite) { switch (sprite->data[0]) diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c index 6fef2de69..9d713ba46 100644 --- a/src/battle/anim/cube.c +++ b/src/battle/anim/cube.c @@ -9,11 +9,47 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CDFB0(struct Sprite* sprite); static void sub_80CE000(struct Sprite* sprite); // cube (shows a sphere sharpening into a cube.) // Used in Sharpen. +const union AnimCmd gSpriteAnim_83D6EB0[] = +{ + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 18), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 18), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 18), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 18), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 54), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6EEC[] = +{ + gSpriteAnim_83D6EB0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6EF0 = +{ + .tileTag = 10185, + .paletteTag = 10185, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6EEC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CDFB0, +}; + void sub_80CDFB0(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); @@ -27,7 +63,7 @@ void sub_80CDFB0(struct Sprite* sprite) sprite->callback = sub_80CE000; } -void sub_80CE000(struct Sprite* sprite) +static void sub_80CE000(struct Sprite* sprite) { if (++sprite->data[0] >= sprite->data[1]) { diff --git a/src/battle/anim/current.c b/src/battle/anim/current.c index af9003e87..af72edef0 100755 --- a/src/battle/anim/current.c +++ b/src/battle/anim/current.c @@ -12,14 +12,20 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gAnimVisualTaskCount; -extern const struct SpriteTemplate gSpriteTemplate_83D9938; -extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950; -extern const struct SpriteTemplate gSpriteTemplate_83D99B8; -extern const struct SpriteTemplate gSpriteTemplate_83D9B10; -extern const struct SpriteTemplate gSpriteTemplate_83D9B40; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0; -extern s8 gUnknown_083D9968[][2]; +void sub_80D648C(struct Sprite *sprite); +void sub_80D65DC(struct Sprite *sprite); +void sub_80D6658(struct Sprite *sprite); +void sub_80D679C(struct Sprite *sprite); +void sub_80D6A1C(struct Sprite *sprite); +void sub_80D6A6C(struct Sprite *sprite); +void sub_80D6D18(struct Sprite *sprite); +void sub_80D6D70(struct Sprite *sprite); +void sub_80D6DD8(struct Sprite *sprite); +void sub_80D7230(struct Sprite *sprite); +void sub_80D727C(struct Sprite *sprite); +void sub_80D755C(struct Sprite *sprite); static void sub_80D6514(struct Sprite *sprite); static void sub_80D672C(struct Sprite *sprite); static void sub_80D6874(u8 taskId); @@ -32,6 +38,323 @@ static bool8 sub_80D7470(struct Task *task, u8 taskId); static bool8 sub_80D7654(struct Task *task, u8 taskId); static void sub_80D76C4(struct Sprite *sprite); +const union AffineAnimCmd gSpriteAffineAnim_83D988C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D989C[] = +{ + gSpriteAffineAnim_83D988C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98A0 = +{ + .tileTag = 10011, + .paletteTag = 10011, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D989C, + .callback = sub_80D648C, +}; + +const union AnimCmd gSpriteAnim_83D98B8[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D98C8[] = +{ + gSpriteAnim_83D98B8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D98CC[] = +{ + AFFINEANIMCMD_FRAME(0xE8, 0xE8, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D98EC[] = +{ + gSpriteAffineAnim_83D98CC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98F0 = +{ + .tileTag = 10282, + .paletteTag = 10282, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D98C8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D98EC, + .callback = sub_80D65DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9908 = +{ + .tileTag = 10011, + .paletteTag = 10011, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D989C, + .callback = sub_80D6658, +}; + +const struct SpriteTemplate gElectricitySpriteTemplate = +{ + .tileTag = 10011, + .paletteTag = 10011, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D679C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9938 = +{ + .tileTag = 10001, + .paletteTag = 10001, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D6A1C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950 = +{ + .tileTag = 10173, + .paletteTag = 10173, + .oam = &gOamData_837DF54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D6A6C, +}; + +const s8 gUnknown_083D9968[][2] = +{ + { 58, -60}, + {-56, -36}, + { 8, -56}, + {-16, 56}, + { 58, -10}, + {-58, 10}, + { 48, -18}, + {-8, 56}, + { 16, -56}, + {-58, -42}, + { 58, 30}, + {-48, 40}, + { 12, -48}, + { 48, -12}, + {-56, 18}, + { 48, 48}, +}; + +const union AnimCmd gSpriteAnim_83D9988[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D999C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D99B0[] = +{ + gSpriteAnim_83D9988, + gSpriteAnim_83D999C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D99B8 = +{ + .tileTag = 10211, + .paletteTag = 10211, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D99B0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D99D0[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_LOOP(10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9A10[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_JUMP(3), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9A40[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 30), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9A60[] = +{ + gSpriteAffineAnim_83D99D0, + gSpriteAffineAnim_83D9A10, + gSpriteAffineAnim_83D9A40, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A6C = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9A60, + .callback = sub_80D6D18, +}; + +const union AnimCmd gSpriteAnim_83D9A84[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9A98[] = +{ + gSpriteAnim_83D9A84, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A9C = +{ + .tileTag = 10213, + .paletteTag = 10213, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9A98, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D6D70, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9AB4 = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9A60, + .callback = sub_80D6DD8, +}; + +const union AnimCmd gSpriteAnim_83D9ACC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9AD4[] = +{ + ANIMCMD_FRAME(2, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9ADC[] = +{ + ANIMCMD_FRAME(4, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9AE4[] = +{ + ANIMCMD_FRAME(6, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9AEC[] = +{ + gSpriteAnim_83D9ACC, + gSpriteAnim_83D9AD4, + gSpriteAnim_83D9ADC, + gSpriteAnim_83D9AE4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9AFC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9B0C[] = +{ + gSpriteAffineAnim_83D9AFC, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9B10 = +{ + .tileTag = 10001, + .paletteTag = 10001, + .oam = &gOamData_837E024, + .anims = gSpriteAnimTable_83D9AEC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9B0C, + .callback = sub_80D7230, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9B28 = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9A60, + .callback = sub_80D727C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9B40 = +{ + .tileTag = 10001, + .paletteTag = 10001, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D755C, +}; void sub_80D648C(struct Sprite *sprite) { diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c deleted file mode 100644 index bc7478053..000000000 --- a/src/battle/anim/cutter.c +++ /dev/null @@ -1,144 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite); -static void AnimMoveTwisterParticleStep(struct Sprite* sprite); - -// 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. -// 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) -{ - InitAnimSpritePos(sprite, 1); - if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - - sprite->data[0] = gBattleAnimArgs[4]; - if (!gBattleAnimArgs[6]) - { - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; - } - else - { - SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); - sprite->data[2] += gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; - } - - sprite->data[5] = gBattleAnimArgs[5]; - InitAnimSpriteTranslationOverDuration(sprite); - if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget)) - { - sprite->data[0] = 1; - } - else - { - sprite->data[0] = 0; - } - - sprite->callback = AnimTranslateLinearSingleSineWaveStep; -} - -static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) -{ - bool8 destroy = FALSE; - s16 a = sprite->data[0]; - s16 b = sprite->data[7]; - s16 r0; - - sprite->data[0] = 1; - TranslateAnimSpriteLinearAndSine(sprite); - r0 = sprite->data[7]; - sprite->data[0] = a; - if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; - - if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) - { - sprite->invisible ^= 1; - sprite->oam.affineParam++; - if (sprite->oam.affineParam == 0x1E) - destroy = TRUE; - } - - if (sprite->pos1.x + sprite->pos2.x > 256 - || sprite->pos1.x + sprite->pos2.x < -16 - || sprite->pos1.y + sprite->pos2.y > 160 - || sprite->pos1.y + sprite->pos2.y < -16) - destroy = TRUE; - - if (destroy) - DestroyAnimSprite(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) - { - SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); - } - - sprite->pos1.y += 32; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; - sprite->callback = AnimMoveTwisterParticleStep; -} - -static void AnimMoveTwisterParticleStep(struct Sprite* sprite) -{ - if (sprite->data[1] == 0xFF) - { - sprite->pos1.y -= 2; - } - else if (sprite->data[1] > 0) - { - sprite->pos1.y -= 2; - sprite->data[1] -= 2; - } - - sprite->data[5] += sprite->data[2]; - if (sprite->data[0] < sprite->data[4]) - sprite->data[5] += sprite->data[2]; - - sprite->data[5] &= 0xFF; - sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); - sprite->pos2.y = Sin(sprite->data[5], 5); - if (sprite->data[5] <= 0x7F) - { - sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1; - } - else - { - sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; - } - - sprite->data[0]--; - if (!sprite->data[0]) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c index 9bfa95e92..8b868a436 100644 --- a/src/battle/anim/cyclone.c +++ b/src/battle/anim/cyclone.c @@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0118(struct Sprite* sprite); + // cyclone (creates a circling motion like a cyclone, usually a wind sprite.) // Used in Razor Wind. +const union AffineAnimCmd gSpriteAffineAnim_83D7640[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7658[] = +{ + gSpriteAffineAnim_83D7640, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D765C = +{ + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DFDC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7658, + .callback = sub_80D0118, +}; + void sub_80D0118(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 55d500950..a7026edff 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -28,6 +28,10 @@ extern const u8 gUnknown_08D1D574[]; extern const u8 gUnknown_08D1D410[]; extern const u16 gUnknown_08D1D54C[]; +void sub_80DFE14(struct Sprite *sprite); +void sub_80DFF1C(struct Sprite *sprite); +void sub_80DFFD0(struct Sprite *sprite); +void sub_80E0A10(struct Sprite *sprite); static void sub_80DFE90(struct Sprite *sprite); static void sub_80DFC9C(u8 taskId); static void sub_80DFD58(u8 taskId); @@ -40,6 +44,166 @@ static void sub_80E08CC(u8 priority); static void sub_80E079C(struct Task *task); static void sub_80E0CD0(u8 taskId); +const struct SpriteTemplate gSpriteTemplate_83DB118 = +{ + .tileTag = 10015, + .paletteTag = 10015, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DFE14, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB130[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB140[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 32, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB150[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 64, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB160[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB170[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -128, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB180[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB190[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -64, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB1A0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -32, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[] = +{ + gSpriteAffineAnim_83DB130, + gSpriteAffineAnim_83DB140, + gSpriteAffineAnim_83DB150, + gSpriteAffineAnim_83DB160, + gSpriteAffineAnim_83DB170, + gSpriteAffineAnim_83DB180, + gSpriteAffineAnim_83DB190, + gSpriteAffineAnim_83DB1A0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1D0 = +{ + .tileTag = 10139, + .paletteTag = 10139, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB1B0, + .callback = sub_80DFF1C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1E8 = +{ + .tileTag = 10145, + .paletteTag = 10145, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB1B0, + .callback = sub_80DFF1C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB200[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 80, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB218[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, -80, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB230[] = +{ + gSpriteAffineAnim_83DB200, + gSpriteAffineAnim_83DB218, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB238 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB230, + .callback = sub_80DFFD0, +}; + +const union AnimCmd gSpriteAnim_83DB250[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DB268[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DB280[] = +{ + gSpriteAnim_83DB250, + gSpriteAnim_83DB268, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB288 = +{ + .tileTag = 10039, + .paletteTag = 10039, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DB280, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E0A10, +}; // used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage void sub_80DFC24(u8 taskId) diff --git a/src/battle/anim/devil.c b/src/battle/anim/devil.c index c628abfc0..8183be2ba 100644 --- a/src/battle/anim/devil.c +++ b/src/battle/anim/devil.c @@ -7,6 +7,37 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankTarget; +void sub_80D2ABC(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D7BE8[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83D7BF0[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D7BF8[] = +{ + gSpriteAnim_83D7BE8, + gSpriteAnim_83D7BF0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C00 = +{ + .tileTag = 10221, + .paletteTag = 10221, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7BF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2ABC, +}; + void sub_80D2ABC(struct Sprite *sprite) { if (sprite->data[3] == 0) diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index 4c8448636..163529ecb 100644 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c @@ -5,13 +5,6 @@ #include "sound.h" #include "scanline_effect.h" -void sub_80DF81C(struct Sprite *sprite); -void sub_80DFBD8(struct Sprite *sprite); - -void sub_80DF9F4(u8 taskId); - -void sub_80DFAB0(struct Task *task); - extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; @@ -21,6 +14,187 @@ extern u16 gBattle_BG2_X; extern u16 gUnknown_03000730[]; extern u8 gBankSpriteIds[]; +void sub_80DF5A0(struct Sprite *sprite); +void sub_80DF760(struct Sprite *sprite); +void sub_80DF6F0(struct Sprite *sprite); +void sub_80DF760(struct Sprite *sprite); +void sub_80DF78C(struct Sprite *sprite); +void sub_80DFB28(struct Sprite *sprite); +static void sub_80DF81C(struct Sprite *sprite); +static void sub_80DFBD8(struct Sprite *sprite); +static void sub_80DF9F4(u8 taskId); +static void sub_80DFAB0(struct Task *task); + +const union AnimCmd gSpriteAnim_83DAFB0[] = +{ + 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_83DAFC8[] = +{ + gSpriteAnim_83DAFB0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAFCC = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAFC8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF5A0, +}; + +const union AnimCmd gSpriteAnim_83DAFE4[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83DAFF4[] = +{ + ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DB004[] = +{ + gSpriteAnim_83DAFE4, + gSpriteAnim_83DAFF4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB00C[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 127, 0), + AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB024[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB03C[] = +{ + gSpriteAffineAnim_83DB00C, + gSpriteAffineAnim_83DB024, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB044 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83DB004, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB03C, + .callback = sub_80DF760, +}; + +const union AnimCmd gSpriteAnim_83DB05C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DB074[] = +{ + gSpriteAnim_83DB05C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB078 = +{ + .tileTag = 10035, + .paletteTag = 10035, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DB074, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF6F0, +}; + +const union AnimCmd gSpriteAnim_83DB090[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DB0A0[] = +{ + gSpriteAnim_83DB090, + gSpriteAnim_83DB090, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB0A8[] = +{ + AFFINEANIMCMD_FRAME(0x64, 0x64, 127, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB0B8[] = +{ + AFFINEANIMCMD_FRAME(0x64, 0x64, 0, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB0C8[] = +{ + gSpriteAffineAnim_83DB0A8, + gSpriteAffineAnim_83DB0B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0D0 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83DB0A0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB0C8, + .callback = sub_80DF760, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0E8 = +{ + .tileTag = 10249, + .paletteTag = 10249, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF78C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB100 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAFC8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DFB28, +}; + // Outrage void sub_80DF5A0(struct Sprite *sprite) @@ -123,7 +297,7 @@ void sub_80DF78C(struct Sprite *sprite) sprite->callback = sub_80DF81C; } -void sub_80DF81C(struct Sprite *sprite) +static void sub_80DF81C(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -196,7 +370,7 @@ void sub_80DF924(u8 taskId) task->func = sub_80DF9F4; } -void sub_80DF9F4(u8 taskId) +static void sub_80DF9F4(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[0]) @@ -234,7 +408,7 @@ void sub_80DF9F4(u8 taskId) } } -void sub_80DFAB0(struct Task *task) +static void sub_80DFAB0(struct Task *task) { u16 r3 = task->data[5]; u16 i; @@ -264,7 +438,7 @@ void sub_80DFB28(struct Sprite *sprite) gUnknown_03000730[i] = sprite->data[i]; } -void sub_80DFBD8(struct Sprite *sprite) +static void sub_80DFBD8(struct Sprite *sprite) { sprite->data[4] += sprite->data[1]; sprite->data[5] += sprite->data[2]; diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index 9eea43220..08b09337f 100644 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -12,12 +12,24 @@ extern u8 gAnimBankTarget; extern u16 gBattle_BG2_X; extern u16 gBattle_BG1_X; +void sub_80D0E30(struct Sprite* sprite); static void sub_80D0D68(u8 taskId); static void sub_80D0E8C(struct Sprite* sprite); // draw (draws the Pokemon into the world using a pencil.) // Used in Sketch. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77E0 = +{ + .tileTag = 10002, + .paletteTag = 10002, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0E30, +}; + void sub_80D0C88(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -59,7 +71,7 @@ void sub_80D0C88(u8 taskId) task->func = sub_80D0D68; } -void sub_80D0D68(u8 taskId) +static void sub_80D0D68(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -120,7 +132,7 @@ void sub_80D0E30(struct Sprite* sprite) sprite->callback = sub_80D0E8C; } -void sub_80D0E8C(struct Sprite* sprite) +static void sub_80D0E8C(struct Sprite* sprite) { switch (sprite->data[0]) { diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c deleted file mode 100644 index 8dea7e608..000000000 --- a/src/battle/anim/drum.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -// drum (using hands to slap the Pokemon's belly in a rhythm.) -// Used in Belly Drum. - -void sub_80CEDF0(struct Sprite* sprite) -{ - s16 a; - if (gBattleAnimArgs[0] == 1) - { - sprite->oam.matrixNum = 8; - a = 16; - } - else - { - a = -16; - } - - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a; - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8; - sprite->data[0] = 8; - sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); -} diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c index 44ff484f2..5b6d56dac 100644..100755 --- a/src/battle/anim/egg.c +++ b/src/battle/anim/egg.c @@ -2,121 +2,15 @@ #include "rom_8077ABC.h" #include "trig.h" #include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void sub_80D13AC(struct Sprite* sprite); -static void sub_80D1424(struct Sprite* sprite); -static void sub_80D144C(struct Sprite* sprite); -static void sub_80D14C4(struct Sprite* sprite); -static void sub_80D1504(struct Sprite* sprite); -static void sub_80D154C(struct Sprite* sprite); -static void sub_80D158C(struct Sprite* sprite); - -// egg (a hatching egg) -// Used in Softboiled. - -void sub_80D1368(struct Sprite* sprite) -{ - s16 r1; - InitAnimSpritePos(sprite, 0); - r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[0] = 0x380; - sprite->data[1] = r1; - sprite->data[7] = gBattleAnimArgs[2]; - sprite->callback = sub_80D13AC; -} - -void sub_80D13AC(struct Sprite* sprite) -{ - s16 add; - sprite->pos2.y -= (sprite->data[0] >> 8); - sprite->pos2.x = sprite->data[1] >> 8; - sprite->data[0] -= 32; - add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[1] += add; - if (sprite->pos2.y > 0) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80D1424; - } -} - -void sub_80D1424(struct Sprite* sprite) -{ - if (sprite->data[0]++ > 19) - { - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80D144C; - } -} - -void sub_80D144C(struct Sprite* sprite) -{ - if (sprite->affineAnimEnded) - { - StartSpriteAffineAnim(sprite, 1); - sprite->data[0] = 0; - if (sprite->data[7] == 0) - { - sprite->oam.tileNum += 16; - sprite->callback = sub_80D14C4; - } - else - { - sprite->oam.tileNum += 32; - sprite->callback = sub_80D154C; - } - } -} - -void sub_80D14C4(struct Sprite* sprite) -{ - sprite->pos2.y -= 2; - if (++sprite->data[0] == 9) - { - sprite->data[0] = 16; - sprite->data[1] = 0; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = sprite->data[0]; - sprite->callback = sub_80D1504; - } -} - -void sub_80D1504(struct Sprite* sprite) -{ - if (sprite->data[1]++ % 3 == 0) - { - sprite->data[0]--; - REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); - if (sprite->data[0] == 0) - sprite->callback = sub_80D154C; - } -} - -void sub_80D154C(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->invisible = 1; - if (sprite->data[7] == 0) - sprite->callback = sub_80D158C; - else - sprite->callback = DestroyAnimSprite; - } -} - -void sub_80D158C(struct Sprite* sprite) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyAnimSprite(sprite); -} +#include "random.h" + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7594 = +{ + .tileTag = 10175, + .paletteTag = 10175, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80794A8, +}; diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c index 7980c7b34..9ac362b57 100644 --- a/src/battle/anim/energy_wave.c +++ b/src/battle/anim/energy_wave.c @@ -8,8 +8,11 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[]; +void sub_80D3554(struct Sprite *sprite); +void sub_80D3698(struct Sprite *sprite); +void sub_80D3728(struct Sprite *sprite); static void sub_80D35DC(struct Sprite *); static void sub_80D365C(u8); static void sub_80D370C(struct Sprite *); @@ -18,6 +21,145 @@ static void sub_80D370C(struct Sprite *); // Used in Hydro Pump, Mud Shot, Signal Beam, Flamethrower, Psywave, and // Hydro Cannon. +const union AnimCmd gSpriteAnim_83D91DC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(12, 1), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D91F0[] = +{ + gSpriteAnim_83D91DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91F4 = +{ + .tileTag = 10149, + .paletteTag = 10149, + .oam = &gOamData_837E04C, + .anims = gSpriteAnimTable_83D91F0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3554, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D920C = +{ + .tileTag = 10259, + .paletteTag = 10259, + .oam = &gOamData_837E04C, + .anims = gSpriteAnimTable_83D91F0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3554, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9224 = +{ + .tileTag = 10264, + .paletteTag = 10264, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3554, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D923C = +{ + .tileTag = 10265, + .paletteTag = 10265, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3554, +}; + +const union AnimCmd gSpriteAnim_83D9254[] = +{ + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9264[] = +{ + gSpriteAnim_83D9254, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9268 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9264, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3554, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9280 = +{ + .tileTag = 10165, + .paletteTag = 10165, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = sub_80D3554, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9298[] = +{ + AFFINEANIMCMD_FRAME(0x3, 0x3, 10, 50), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 10), + AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, -10, 20), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D92B8[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92C8[] = +{ + gSpriteAffineAnim_83D9298, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92CC[] = +{ + gSpriteAffineAnim_83D92B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92D0 = +{ + .tileTag = 10149, + .paletteTag = 10149, + .oam = &gOamData_837E10C, + .anims = gSpriteAnimTable_83D91F0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D92C8, + .callback = sub_80D3698, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92E8 = +{ + .tileTag = 10149, + .paletteTag = 10149, + .oam = &gOamData_837E10C, + .anims = gSpriteAnimTable_83D91F0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D92CC, + .callback = sub_80D3728, +}; + void sub_80D3554(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c index 2e80afff7..a4f11c823 100644 --- a/src/battle/anim/espeed.c +++ b/src/battle/anim/espeed.c @@ -8,11 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern s8 gUnknown_083D7A00[4][2]; - -extern struct AffineAnimFrameCmd gUnknown_083D79BC; -extern struct SpriteTemplate gSpriteTemplate_83D79E8; - +void sub_80D1A70(struct Sprite* sprite); static void sub_80D15E0(u8 taskId); static void sub_80D16A0(u8 taskId); static void sub_80D1808(u8 taskId); @@ -21,13 +17,53 @@ static void sub_80D1930(u8 taskId); // espeed (the Pokemon's width decreases as the sprite becomes vertically compressed) // Used in Extremespeed. +const union AffineAnimCmd gSpriteAffineAnim_83D79BC[] = +{ + AFFINEANIMCMD_FRAME(96, -13, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D79CC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D79E4[] = +{ + gSpriteAnim_83D79CC, +}; + +const struct SpriteTemplate gSpriteTemplate_83D79E8 = +{ + .tileTag = 10207, + .paletteTag = 10207, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D79E4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1A70, +}; + +const s8 gUnknown_083D7A00[][2] = +{ + {30, 28}, + {-20, 24}, + {16, 26}, + {-10, 28}, +}; + // apply espeed void sub_80D15A4(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); task->data[0] = spriteId; - sub_80798F4(task, spriteId, &gUnknown_083D79BC); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D79BC); task->func = sub_80D15E0; } @@ -239,3 +275,13 @@ void sub_80D1930(u8 taskId) break; } } + +void sub_80D1A70(struct Sprite* sprite) +{ + sprite->invisible = gTasks[sprite->data[0]].data[5]; + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c index 5ed7372a8..c35898eea 100644 --- a/src/battle/anim/fang.c +++ b/src/battle/anim/fang.c @@ -8,10 +8,37 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CEA04(struct Sprite* sprite); + // fang // Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.) // (Look into this one later.) +const union AnimCmd gSpriteAnim_83D7068[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D707C[] = +{ + gSpriteAnim_83D7068, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7080 = +{ + .tileTag = 10192, + .paletteTag = 10192, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D707C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CEA04, +}; + void sub_80CEA04(struct Sprite* sprite) { StoreSpriteCallbackInData(sprite, DestroyAnimSprite); diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c index 5e25d664a..af2af1981 100644 --- a/src/battle/anim/fight.c +++ b/src/battle/anim/fight.c @@ -26,6 +26,25 @@ extern u8 gAnimMoveTurn; extern struct SpriteTemplate gBasicHitSplatSpriteTemplate; +void sub_080B08A0(struct Sprite *sprite); +void sub_80D902C(struct Sprite *sprite); +void sub_80D9078(struct Sprite *sprite); +void AnimBasicFistOrFoot(struct Sprite *sprite); +void sub_80D90F4(struct Sprite *sprite); +void sub_80D92D0(struct Sprite *sprite); +void sub_80D9378(struct Sprite *sprite); +void AnimSpinningKickOrPunch(struct Sprite *sprite); +void AnimSpinningKickOrPunch(struct Sprite *sprite); +void AnimStompFoot(struct Sprite *sprite); +void sub_80D9540(struct Sprite *sprite); +void sub_80D95D0(struct Sprite *sprite); +void sub_80D96B8(struct Sprite *sprite); +void sub_80D97CC(struct Sprite *sprite); +void sub_80D98D8(struct Sprite *sprite); +void sub_80D9A38(struct Sprite *sprite); +void sub_80D9B48(struct Sprite *sprite); +void sub_80D9BD4(struct Sprite *sprite); +void sub_80D9C40(struct Sprite *sprite); static void sub_80D927C(struct Sprite *sprite); static void sub_80D9328(struct Sprite *sprite); static void sub_80D9404(struct Sprite *sprite); @@ -38,6 +57,381 @@ static void sub_80D986C(struct Sprite *sprite); static void sub_80D9934(struct Sprite *sprite); static void sub_80D99F4(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_83D9F24 = +{ + .tileTag = 10050, + .paletteTag = 10050, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_080B08A0, +}; + +const union AnimCmd gSpriteAnim_83D9F3C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9F44[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9F4C[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9F54[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9F5C[] = +{ + ANIMCMD_FRAME(48, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9F64[] = +{ + gSpriteAnim_83D9F3C, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9F68[] = +{ + gSpriteAnim_83D9F44, + gSpriteAnim_83D9F4C, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9F70[] = +{ + gSpriteAnim_83D9F54, + gSpriteAnim_83D9F5C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F78 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D902C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F90 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9078, +}; + +const struct SpriteTemplate gFistFootSpriteTemplate = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FC0 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D90F4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FD8 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F70, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D92D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FF0 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F68, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9378, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA008[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA020[] = +{ + gSpriteAffineAnim_83DA008, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA024 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA020, + .callback = AnimSpinningKickOrPunch, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA03C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA054[] = +{ + gSpriteAffineAnim_83DA03C, +}; + +const struct SpriteTemplate gMegaPunchKickSpriteTemplate = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA054, + .callback = AnimSpinningKickOrPunch, +}; + +const struct SpriteTemplate gStompFootSpriteTemplate = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F68, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA088 = +{ + .tileTag = 10073, + .paletteTag = 10073, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9540, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0A0 = +{ + .tileTag = 10167, + .paletteTag = 10167, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D95D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0B8 = +{ + .tileTag = 10208, + .paletteTag = 10208, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D96B8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA0D0[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64), + AFFINEANIMCMD_FRAME(0xFFFA, 0xFFFA, 0, 8), + AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8), + AFFINEANIMCMD_JUMP(2), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA0F8[] = +{ + gSpriteAffineAnim_83DA0D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0FC = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA0F8, + .callback = sub_80D97CC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA114 = +{ + .tileTag = 10257, + .paletteTag = 10257, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D98D8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA12C = +{ + .tileTag = 10256, + .paletteTag = 10256, + .oam = &gOamData_837DF3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9A38, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA144 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9B48, +}; + +const union AnimCmd gSpriteAnim_83DA15C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA16C[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE), + ANIMCMD_FRAME(16, 4, .vFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA17C[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA18C[] = +{ + gSpriteAnim_83DA15C, + gSpriteAnim_83DA16C, + gSpriteAnim_83DA17C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA198 = +{ + .tileTag = 10245, + .paletteTag = 10245, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DA18C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9BD4, +}; + +const union AnimCmd gSpriteAnim_83DA1B0[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(64, 6), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA1BC[] = +{ + ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA1C8[] = +{ + ANIMCMD_FRAME(0, 6, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA1D4[] = +{ + gSpriteAnim_83DA1B0, + gSpriteAnim_83DA1BC, + gSpriteAnim_83DA1C8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA1E0 = +{ + .tileTag = 10246, + .paletteTag = 10246, + .oam = &gOamData_837DF3C, + .anims = gSpriteAnimTable_83DA1D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D9BD4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA1F8[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA210[] = +{ + gSpriteAffineAnim_83DA1F8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA214 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83D9F64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA210, + .callback = sub_80D9C40, +}; void sub_080B08A0(struct Sprite *sprite) { diff --git a/src/battle/anim/finger.c b/src/battle/anim/finger.c new file mode 100644 index 000000000..66ca4ca06 --- /dev/null +++ b/src/battle/anim/finger.c @@ -0,0 +1,256 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); + +void sub_80CF040(struct Sprite* sprite); +void sub_80CF0BC(struct Sprite* sprite); +void sub_80CF1C8(struct Sprite* sprite); +static void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); + +// wave_finger +// Used by Metronome, Follow Me, and Taunt. + +const union AffineAnimCmd gSpriteAffineAnim_83D7238[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7250[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7278[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(30, 30, 0, 8), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0, 0, 4, 11), + AFFINEANIMCMD_FRAME(0, 0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(-30, -30, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D72C0[] = +{ + gSpriteAffineAnim_83D7238, + gSpriteAffineAnim_83D7250, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72C8 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DFF4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D72C0, + .callback = sub_80CF040, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72E0 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D72C0, + .callback = sub_80CF0BC, +}; + +const union AnimCmd gSpriteAnim_83D72F8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7300[] = +{ + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7308[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7328[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7348[] = +{ + gSpriteAnim_83D72F8, + gSpriteAnim_83D7300, + gSpriteAnim_83D7308, + gSpriteAnim_83D7328, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7358 = +{ + .tileTag = 10214, + .paletteTag = 10214, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7348, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF1C8, +}; + +void sub_80CF040(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF088); + sprite->callback = sub_80785E4; +} + +static void sub_80CF088(struct Sprite* sprite) +{ + if (++sprite->data[0] > 16) + { + StartSpriteAffineAnim(sprite, 1); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; + } +} + +void sub_80CF0BC(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sprite->pos1.x = GetBattlerSpriteCoord(bank, 0); + sprite->pos1.y = sub_807A100(bank, 2); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF138); + sprite->callback = sub_80785E4; +} + +static void sub_80CF138(struct Sprite* sprite) +{ + if (++sprite->data[4] > 12) + sprite->callback = sub_80CF158; +} + +static void sub_80CF158(struct Sprite* sprite) +{ + s16 temp; + s16 temp2; + sprite->data[1] += 4; + if (sprite->data[1] > 0xFE) + { + if (--sprite->data[0] == 0) + { + sprite->pos2.x = 0; + sprite->callback = sub_80CF088; + return; + } + else + { + sprite->data[1] &= 0xFF; + } + } + + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; + + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; + + temp = gSineTable[sprite->data[1]]; + sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); +} + +void sub_80CF1C8(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sub_80CEF44(bank, sprite); + if (GetBattlerSide(bank) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 3; + } + + sprite->callback = sub_80CF228; +} + +static void sub_80CF228(struct Sprite* sprite) +{ + if (++sprite->data[1] > 10) + { + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData(sprite, sub_80CF264); + sprite->callback = sub_8078600; + } +} + +static void sub_80CF264(struct Sprite* sprite) +{ + if (++sprite->data[1] > 5) + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c index 0939c938c..929828ed4 100644 --- a/src/battle/anim/fire.c +++ b/src/battle/anim/fire.c @@ -6,8 +6,170 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; -void sub_80D5038(struct Sprite *); -void sub_80D50E8(struct Sprite *); +void sub_80D4ED8(struct Sprite *sprite); +void sub_80D4F18(struct Sprite *sprite); +void sub_80D4FCC(struct Sprite *sprite); +void sub_80D4F5C(struct Sprite *sprite); +void sub_80D5074(struct Sprite *sprite); +static void sub_80D5038(struct Sprite *); +static void sub_80D50E8(struct Sprite *); + +const union AnimCmd gSpriteAnim_83D9450[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83D9460[] = +{ + ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9470[] = +{ + gSpriteAnim_83D9450, + gSpriteAnim_83D9460, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9478 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9470, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4ED8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9490 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9470, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4F18, +}; + +const union AnimCmd gSpriteAnim_83D94A8[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_FRAME(112, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D94CC[] = +{ + gSpriteAnim_83D94A8, +}; + +const union AnimCmd gSpriteAnim_83D94D0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D94E8[] = +{ + gSpriteAnim_83D94D0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D94EC[] = +{ + AFFINEANIMCMD_FRAME(0x32, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x0, 0, 7), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9504[] = +{ + gSpriteAffineAnim_83D94EC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9508 = +{ + .tileTag = 10033, + .paletteTag = 10033, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D94CC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9504, + .callback = sub_80D4FCC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9520 = +{ + .tileTag = 10033, + .paletteTag = 10033, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D94CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4FCC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9538 = +{ + .tileTag = 10035, + .paletteTag = 10035, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D94E8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4F5C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9550 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D94E8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4F5C, +}; + +const union AnimCmd gSpriteAnim_83D9568[] = +{ + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9578[] = +{ + gSpriteAnim_83D9568, +}; + +const struct SpriteTemplate gSpriteTemplate_83D957C = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9578, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5074, +}; void sub_80D4ED8(struct Sprite *sprite) { @@ -20,7 +182,7 @@ void sub_80D4ED8(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); sprite->callback = sub_8078174; - sub_8078174(sprite); + sprite->callback(sprite); } void sub_80D4F18(struct Sprite *sprite) @@ -82,7 +244,7 @@ void sub_80D4FCC(struct Sprite *sprite) sprite->callback = sub_80D5038; } -void sub_80D5038(struct Sprite *sprite) +static void sub_80D5038(struct Sprite *sprite) { if (++sprite->data[0] < sprite->data[4]) { @@ -119,7 +281,7 @@ void sub_80D5074(struct Sprite *sprite) sprite->callback = sub_80D50E8; } -void sub_80D50E8(struct Sprite *sprite) +static void sub_80D50E8(struct Sprite *sprite) { if (sprite->data[3]) { 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; + } +} diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c new file mode 100755 index 000000000..ec40e26c4 --- /dev/null +++ b/src/battle/anim/flying.c @@ -0,0 +1,346 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80DA034(struct Sprite *sprite); +void sub_80DA16C(struct Sprite *sprite); +void sub_80DA208(struct Sprite *sprite); +void sub_80DA300(struct Sprite *sprite); +void sub_80DA38C(struct Sprite *sprite); +void sub_80DA4D8(struct Sprite *sprite); +void sub_80DAD30(struct Sprite *sprite); +void sub_80DAD84(struct Sprite *sprite); +void sub_80DB000(struct Sprite *sprite); +void sub_80DB194(struct Sprite *sprite); +void sub_80DB1F4(struct Sprite *sprite); +void sub_80DB288(struct Sprite *sprite); +void sub_80DB374(struct Sprite *sprite); +void sub_80DB458(struct Sprite *sprite); +void sub_80DB564(struct Sprite *sprite); +void sub_80DB5E4(struct Sprite *sprite); + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = +{ + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DF7C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DA034, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA398[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA3B0[] = +{ + gSpriteAffineAnim_83DA398, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3B4 = +{ + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DFDC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA3B0, + .callback = sub_80DA16C, +}; + +const union AnimCmd gSpriteAnim_83DA3CC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DA3E0[] = +{ + gSpriteAnim_83DA3CC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3E4 = +{ + .tileTag = 10154, + .paletteTag = 10154, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83DA3E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DA208, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] = +{ + gSpriteAffineAnim_83DA3FC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA428[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA438[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA448[] = +{ + gSpriteAffineAnim_83DA428, + gSpriteAffineAnim_83DA438, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA450 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA424, + .callback = sub_80DA300, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA468 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA448, + .callback = sub_80DA38C, +}; + +const union AnimCmd gSpriteAnim_83DA480[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA488[] = +{ + ANIMCMD_FRAME(16, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA490[] = +{ + gSpriteAnim_83DA480, + gSpriteAnim_83DA488, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 = +{ + .tileTag = 10270, + .paletteTag = 10270, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DA490, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DA4D8, +}; + +const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal"); + +const struct SpriteTemplate gSpriteTemplate_83DA4D0 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DAD30, +}; + +const struct SpriteTemplate gSpriteTemplate_83DA4E8 = +{ + .tileTag = 10270, + .paletteTag = 10270, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DA490, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DAD84, +}; + +const union AnimCmd gSpriteAnim_83DA500[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(8, 1, .hFlip = TRUE), + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA518[] = +{ + gSpriteAnim_83DA500, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA51C = +{ + .tileTag = 10162, + .paletteTag = 10162, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83DA518, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB000, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA534[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7), + AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA564[] = +{ + gSpriteAffineAnim_83DA534, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA568 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA564, + .callback = sub_80DB194, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA580[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA590[] = +{ + gSpriteAffineAnim_83DA580, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA594 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA590, + .callback = sub_80DB1F4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA5AC[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA5D4[] = +{ + gSpriteAffineAnim_83DA5AC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA5D8 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA5D4, + .callback = sub_80DB288, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA5F0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA610[] = +{ + gSpriteAffineAnim_83DA5F0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA614 = +{ + .tileTag = 10272, + .paletteTag = 10272, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB374, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA62C = +{ + .tileTag = 10273, + .paletteTag = 10273, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB458, +}; + +const struct SpriteTemplate gSpriteTemplate_83DA644 = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB564, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C = +{ + .tileTag = 10284, + .paletteTag = 10284, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB5E4, +}; diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c index f20416535..2bba6c4cb 100644 --- a/src/battle/anim/flying_hearts.c +++ b/src/battle/anim/flying_hearts.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2064(struct Sprite* sprite); static void sub_80D2094(struct Sprite* sprite); // flying_hearts (hearts float upward from the bottom of the screen.) // Used in Attract. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AE0 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2064, +}; + void sub_80D2064(struct Sprite* sprite) { sprite->pos1.x = gBattleAnimArgs[0]; @@ -23,7 +35,7 @@ void sub_80D2064(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D2094); } -void sub_80D2094(struct Sprite* sprite) +static void sub_80D2094(struct Sprite* sprite) { s16 y; sprite->data[2] += sprite->data[1]; diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c index 5e9de8cb1..b190e9e8c 100644 --- a/src/battle/anim/flying_path.c +++ b/src/battle/anim/flying_path.c @@ -8,8 +8,6 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct SpriteTemplate gSpriteTemplate_83D6884; - static void sub_80CBF5C(u8 taskId); static s16 sub_80CC338(struct Sprite* sprite); static void sub_80CC358(struct Task* task, u8 taskId); @@ -18,6 +16,70 @@ static void sub_80CC408(struct Sprite* sprite); // flying_path (guides a sprite along a specific path.) // Used by Leaf Blade. +const union AnimCmd gSpriteAnim_83D6830[] = +{ + ANIMCMD_FRAME(28, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6838[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6840[] = +{ + ANIMCMD_FRAME(20, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6848[] = +{ + ANIMCMD_FRAME(28, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6850[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6858[] = +{ + ANIMCMD_FRAME(16, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6860[] = +{ + ANIMCMD_FRAME(28, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6868[] = +{ + gSpriteAnim_83D6830, + gSpriteAnim_83D6838, + gSpriteAnim_83D6840, + gSpriteAnim_83D6848, + gSpriteAnim_83D6850, + gSpriteAnim_83D6858, + gSpriteAnim_83D6860, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6884 = +{ + .tileTag = 10063, + .paletteTag = 10063, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6868, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + void sub_80CBDF4(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -44,7 +106,7 @@ void sub_80CBDF4(u8 taskId) task->func = sub_80CBF5C; } -void sub_80CBF5C(u8 taskId) +static void sub_80CBF5C(u8 taskId) { struct Task* task = &gTasks[taskId]; struct Sprite* sprite = &gSprites[task->data[2]]; @@ -244,7 +306,7 @@ void sub_80CBF5C(u8 taskId) } } -s16 sub_80CC338(struct Sprite* sprite) +static s16 sub_80CC338(struct Sprite* sprite) { s16 var = 8; if (sprite->data[4] < sprite->pos1.y) @@ -253,7 +315,7 @@ s16 sub_80CC338(struct Sprite* sprite) return var; } -void sub_80CC358(struct Task* task, u8 taskId) +static void sub_80CC358(struct Task* task, u8 taskId) { task->data[14]++; if (task->data[14] > 0) @@ -279,7 +341,7 @@ void sub_80CC358(struct Task* task, u8 taskId) } } -void sub_80CC408(struct Sprite* sprite) +static void sub_80CC408(struct Sprite* sprite) { sprite->data[0]++; if (sprite->data[0] > 1) diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c index c7a596b56..4696cbc6c 100644 --- a/src/battle/anim/flying_petals.c +++ b/src/battle/anim/flying_petals.c @@ -7,12 +7,110 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AnimCmd *const gSpriteAnimTable_83D6424[]; +extern const union AnimCmd *const gSpriteAnimTable_83D6420[]; +void sub_80CC474(struct Sprite* sprite); static void sub_80CC580(struct Sprite* sprite); // flying_petals (petals fly across the screen.) // Used by Aromatherapy. +const union AffineAnimCmd gSpriteAffineAnim_83D689C[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D68B4[] = { + gSpriteAffineAnim_83D689C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68B8 = +{ + .tileTag = 10159, + .paletteTag = 10159, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D6424, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC474, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68D0 = +{ + .tileTag = 10159, + .paletteTag = 10159, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D6420, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D68B4, + .callback = sub_80CC474, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D68E8[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6900[] = { + AFFINEANIMCMD_FRAME(192, 192, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -12, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6918[] = { + AFFINEANIMCMD_FRAME(143, 143, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -15, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6930[] = { + gSpriteAffineAnim_83D68E8, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6934[] = { + gSpriteAffineAnim_83D6900, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6938[] = { + gSpriteAffineAnim_83D6918, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D693C = +{ + .tileTag = 10271, + .paletteTag = 10271, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6930, + .callback = sub_80CC474, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6954 = +{ + .tileTag = 10271, + .paletteTag = 10271, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6934, + .callback = sub_80CC474, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D696C = +{ + .tileTag = 10271, + .paletteTag = 10271, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6938, + .callback = sub_80CC474, +}; + void sub_80CC474(struct Sprite* sprite) { u8 bank; @@ -61,7 +159,7 @@ void sub_80CC474(struct Sprite* sprite) sprite->callback = sub_80CC580; } -void sub_80CC580(struct Sprite* sprite) +static void sub_80CC580(struct Sprite* sprite) { int a = sprite->data[7]; sprite->data[7]++; diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c new file mode 100755 index 000000000..fd33d4782 --- /dev/null +++ b/src/battle/anim/ghost.c @@ -0,0 +1,191 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80DDB6C(struct Sprite *sprite); +void sub_80DDD58(struct Sprite *sprite); +void sub_80DDF40(struct Sprite *sprite); +void sub_80DE0FC(struct Sprite *sprite); +void sub_80DE7B8(struct Sprite *sprite); +void sub_80DEF3C(struct Sprite *sprite); +void sub_80DF0B8(struct Sprite *sprite); +void sub_80DF0B8(struct Sprite *sprite); +void sub_80DF3D8(struct Sprite *sprite); +void sub_80DF49C(struct Sprite *sprite); + +const union AffineAnimCmd gSpriteAffineAnim_83DAE48[] = +{ + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAE60[] = +{ + gSpriteAffineAnim_83DAE48, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE64 = +{ + .tileTag = 10013, + .paletteTag = 10013, + .oam = &gOamData_837DFEC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAE60, + .callback = sub_80DDB6C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE7C = +{ + .tileTag = 10013, + .paletteTag = 10013, + .oam = &gOamData_837E04C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DDD58, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAE94[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAEA4[] = +{ + gSpriteAffineAnim_83DAE94, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 = +{ + .tileTag = 10176, + .paletteTag = 10176, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAEA4, + .callback = sub_80DDF40, +}; + +const union AnimCmd gSpriteAnim_83DAEC0[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DAED8[] = +{ + gSpriteAnim_83DAEC0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEDC = +{ + .tileTag = 10177, + .paletteTag = 10177, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83DAED8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DE0FC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAEF4[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAF04[] = +{ + gSpriteAffineAnim_83DAEF4, +}; + +const struct SpriteTemplate gSpriteTemplate_83DAF08 = +{ + .tileTag = 10188, + .paletteTag = 10188, + .oam = &gOamData_837E07C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DE7B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF20 = +{ + .tileTag = 10199, + .paletteTag = 10199, + .oam = &gOamData_837E074, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DEF3C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF38 = +{ + .tileTag = 10200, + .paletteTag = 10200, + .oam = &gOamData_837E054, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF0B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF50 = +{ + .tileTag = 10221, + .paletteTag = 10221, + .oam = &gOamData_837E054, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF0B8, +}; + +const union AnimCmd gSpriteAnim_83DAF68[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DAF7C[] = +{ + gSpriteAnim_83DAF68, +}; + +const struct SpriteTemplate gSpriteTemplate_83DAF80 = +{ + .tileTag = 10253, + .paletteTag = 10253, + .oam = &gOamData_837E094, + .anims = gSpriteAnimTable_83DAF7C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF3D8, +}; + +const struct SpriteTemplate gSpriteTemplate_83DAF98 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DF49C, +}; diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c index d73b46bbd..fb7443575 100644 --- a/src/battle/anim/glitter.c +++ b/src/battle/anim/glitter.c @@ -8,9 +8,52 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CD140(struct Sprite* sprite); +void sub_80CD190(struct Sprite* sprite); + // glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.) // Used by Heal Bell, Cosmic Power, and Aromatherapy. +const union AnimCmd gSpriteAnim_83D6C60[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_FRAME(48, 7), + ANIMCMD_FRAME(64, 7), + ANIMCMD_FRAME(80, 7), + ANIMCMD_FRAME(96, 7), + ANIMCMD_FRAME(112, 7), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D6C84[] = +{ + gSpriteAnim_83D6C60, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C88 = +{ + .tileTag = 10049, + .paletteTag = 10049, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6C84, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD140, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6CA0 = +{ + .tileTag = 10049, + .paletteTag = 10049, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6C84, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD190, +}; + void sub_80CD140(struct Sprite* sprite) { if (!gBattleAnimArgs[2]) diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c deleted file mode 100644 index 174655080..000000000 --- a/src/battle/anim/glow.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "ewram.h" -#include "palette.h" -#include "decompress.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D7A5C[5]; - -extern const u8 gBattleAnimSpritePalette_206[]; - -// glow (a whitening effect where the Pokemon glows white in a cycle.) -// Used in Heal Bell. - -void sub_80D1ADC(u8 taskId) -{ - int i; - u8 sp[8]; - void* src; - void* dest; - void* what; - sp[0] = IndexOfSpritePaletteTag(0x27DE); - for (i = 1; i <= 4; i++) - { - sp[i] = AllocSpritePalette(0x2710 - i); - } - - src = &gBattleAnimSpritePalette_206; - dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; - LZDecompressWram(src, dest); - for (i = 0; i <= 4; i++) - { - what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); - LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80D1B80(u8 taskId) -{ - int i; - for (i = 0; i < 5; i++) - { - FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); - } - - DestroyAnimVisualTask(taskId); -} diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c index a56a02d82..1ec779c09 100644 --- a/src/battle/anim/grip.c +++ b/src/battle/anim/grip.c @@ -8,11 +8,45 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0178(struct Sprite* sprite); static void sub_80D020C(struct Sprite* sprite); // grip (does a slash which is capable of mirroring for the effect of "gripping".) // Used in Vice Grip. +const union AnimCmd gSpriteAnim_83D7674[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 20), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7684[] = +{ + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7694[] = +{ + gSpriteAnim_83D7674, + gSpriteAnim_83D7684, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D769C = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D7694, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0178, +}; + void sub_80D0178(struct Sprite* sprite) { s16 r7 = 32; @@ -37,7 +71,7 @@ void sub_80D0178(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D020C); } -void sub_80D020C(struct Sprite* sprite) +static void sub_80D020C(struct Sprite* sprite) { if (sprite->animEnded == 1) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c new file mode 100755 index 000000000..a523df20e --- /dev/null +++ b/src/battle/anim/ground.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80E0F1C(struct Sprite *sprite); +void sub_80E1004(struct Sprite *sprite); +void sub_80E1078(struct Sprite *sprite); +void sub_80E1078(struct Sprite *sprite); +void sub_80E1108(struct Sprite *sprite); +void sub_80E1728(struct Sprite *sprite); +void sub_80E17CC(struct Sprite *sprite); + +const union AffineAnimCmd gSpriteAffineAnim_83DB2A0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB2B0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C0[] = +{ + gSpriteAffineAnim_83DB2A0, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C4[] = +{ + gSpriteAffineAnim_83DB2B0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2C8 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB2C0, + .callback = sub_80E0F1C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2E0 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB2C4, + .callback = sub_80E1004, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2F8 = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1078, +}; + +const union AnimCmd gSpriteAnim_83DB310[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DB318[] = +{ + gSpriteAnim_83DB310, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB31C = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83DB318, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1078, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB334 = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1108, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB34C = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1728, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 = +{ + .tileTag = 10281, + .paletteTag = 10281, + .oam = &gOamData_837DF54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E17CC, +}; diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c index 924629048..ad535ad7f 100644 --- a/src/battle/anim/grow.c +++ b/src/battle/anim/grow.c @@ -8,22 +8,28 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D7714; - static void sub_80D0904(u8 taskId); // grow (grows a Pokemon then shrinks back to normal size.) // Used in Swagger and Bulk Up. +const union AffineAnimCmd gSpriteAffineAnim_83D7714[] = +{ + AFFINEANIMCMD_FRAME(-4, -5, 0, 12), + AFFINEANIMCMD_FRAME(0, 0, 0, 24), + AFFINEANIMCMD_FRAME(4, 5, 0, 12), + AFFINEANIMCMD_END, +}; + void sub_80D08C8(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); - sub_80798F4(task, spriteId, &gUnknown_083D7714); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D7714); task->func = sub_80D0904; } -void sub_80D0904(u8 taskId) +static void sub_80D0904(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!sub_807992C(task)) diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c index d54fa4abc..341f74372 100644 --- a/src/battle/anim/guard.c +++ b/src/battle/anim/guard.c @@ -8,9 +8,40 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u16 gBattleTypeFlags; +void sub_80D3014(struct Sprite *sprite); + // guard (moves guard rings upwards) // Used in Safeguard. +const union AffineAnimCmd gSpriteAffineAnim_83D7D4C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7D5C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D6C[] = +{ + gSpriteAffineAnim_83D7D4C, + gSpriteAffineAnim_83D7D5C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D74 = +{ + .tileTag = 10244, + .paletteTag = 10244, + .oam = &gOamData_837E13C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D6C, + .callback = sub_80D3014, +}; + void sub_80D3014(struct Sprite *sprite) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c index 0768e8334..eb1bc7733 100644 --- a/src/battle/anim/guillotine.c +++ b/src/battle/anim/guillotine.c @@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0228(struct Sprite* sprite); static void sub_80D02D0(struct Sprite* sprite); static void sub_80D0344(struct Sprite* sprite); static void sub_80D03A8(struct Sprite* sprite); @@ -15,6 +16,39 @@ static void sub_80D03A8(struct Sprite* sprite); // guillotine (does a reverse grip where the slices can reverse at a given period.) // Used in Guillotine. +const union AnimCmd gSpriteAnim_83D76B4[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D76C4[] = +{ + ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D76D4[] = +{ + gSpriteAnim_83D76B4, + gSpriteAnim_83D76C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D76DC = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D76D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0228, +}; + void sub_80D0228(struct Sprite* sprite) { s16 r8 = 32; @@ -43,7 +77,7 @@ void sub_80D0228(struct Sprite* sprite) sprite->callback = sub_80D02D0; } -void sub_80D02D0(struct Sprite* sprite) +static void sub_80D02D0(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) && sprite->animEnded == 1) { @@ -62,7 +96,7 @@ void sub_80D02D0(struct Sprite* sprite) } } -void sub_80D0344(struct Sprite* sprite) +static void sub_80D0344(struct Sprite* sprite) { if (sprite->data[3]) { @@ -83,7 +117,7 @@ void sub_80D0344(struct Sprite* sprite) } } -void sub_80D03A8(struct Sprite* sprite) +static void sub_80D03A8(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) != 0) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c index a8c14ea1c..c2bce0e77 100644 --- a/src/battle/anim/heal.c +++ b/src/battle/anim/heal.c @@ -7,9 +7,36 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CBAA4(struct Sprite* sprite); + // heal (healing sparkles on a Pokemon) // Used in Present, if the move heals instead of damages. +const union AnimCmd gSpriteAnim_83D674C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6760[] = +{ + gSpriteAnim_83D674C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6764 = +{ + .tileTag = 10195, + .paletteTag = 10195, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6760, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CBAA4, +}; + void sub_80CBAA4(struct Sprite* sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/heal_bell.c b/src/battle/anim/heal_bell.c new file mode 100644 index 000000000..09029c9ff --- /dev/null +++ b/src/battle/anim/heal_bell.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "ewram.h" +#include "palette.h" +#include "decompress.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern const u8 gBattleAnimSpritePalette_206[]; + +void sub_80D1C08(struct Sprite* sprite); + +// Used in Heal Bell. + +const union AnimCmd gSpriteAnim_83D7A08[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(32, 15, .hFlip = TRUE), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7A40[] = +{ + gSpriteAnim_83D7A08, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A44 = +{ + .tileTag = 10205, + .paletteTag = 10205, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7A40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const u16 gUnknown_083D7A5C[] = +{ + 10206, + 9999, + 9998, + 9997, + 9996, + 0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A68 = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1C08, +}; + +void sub_80D1ADC(u8 taskId) +{ + int i; + u8 sp[8]; + void* src; + void* dest; + void* what; + sp[0] = IndexOfSpritePaletteTag(0x27DE); + for (i = 1; i <= 4; i++) + { + sp[i] = AllocSpritePalette(0x2710 - i); + } + + src = &gBattleAnimSpritePalette_206; + dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; + LZDecompressWram(src, dest); + for (i = 0; i <= 4; i++) + { + what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); + LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80D1B80(u8 taskId) +{ + int i; + for (i = 0; i < 5; i++) + { + FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + + DestroyAnimVisualTask(taskId); +} + +static void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); +} + +void sub_80D1C08(struct Sprite* sprite) +{ + InitAnimSpritePos(sprite, 0); + if (GetBattlerSide(gAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3]; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c index 857169e62..5522d4551 100644 --- a/src/battle/anim/heart_1.c +++ b/src/battle/anim/heart_1.c @@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1C80(struct Sprite* sprite); + // heart_1 (a floating heart in a wave pattern upward.) // Used in Charm, Covet, and when a Pokemon is infatuated. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A80 = +{ + .tileTag = 10210, + .paletteTag = 10210, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1C80, +}; + void sub_80D1C80(struct Sprite* sprite) { if (++sprite->data[0] == 1) diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c deleted file mode 100644 index 6f1a1344a..000000000 --- a/src/battle/anim/heated_rock.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "global.h" -#include "battle_anim.h" -#include "rom_8077ABC.h" - -extern s16 gBattleAnimArgs[8]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; -extern u16 gBattleTypeFlags; - -void sub_80D59B0(struct Sprite *); -static void sub_80D5A74(struct Sprite *); - -// heated_rock (moves heated rock sprites) -// Used in Eruption. - -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; -} - -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; - } -} diff --git a/src/battle/anim/hidden_power_orbit.c b/src/battle/anim/hidden_power_orbit.c new file mode 100644 index 000000000..ed680b2bd --- /dev/null +++ b/src/battle/anim/hidden_power_orbit.c @@ -0,0 +1,120 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void AnimOrbitFast(struct Sprite* sprite); +void AnimOrbitScatter(struct Sprite* sprite); +static void AnimOrbitFastStep(struct Sprite* sprite); +static void AnimOrbitScatterStep(struct Sprite* sprite); + +const union AffineAnimCmd gSpriteAffineAnim_83D7AF8[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B10[] = +{ + gSpriteAffineAnim_83D7AF8, +}; + +const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate = +{ + .tileTag = 10217, + .paletteTag = 10217, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B10, + .callback = AnimOrbitFast, +}; + +const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = +{ + .tileTag = 10217, + .paletteTag = 10217, + .oam = &gOamData_837DFEC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B10, + .callback = AnimOrbitScatter, +}; + +// 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 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->affineAnimPaused = 1; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = sub_8079E90(gAnimBankAttacker); + sprite->callback = AnimOrbitFastStep; + sprite->callback(sprite); +} + +static void AnimOrbitFastStep(struct Sprite* sprite) +{ + if ((u16)(sprite->data[1] - 0x40) <= 0x7F) + sprite->subpriority = sprite->data[7] + 1; + else + sprite->subpriority = sprite->data[7] - 1; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) + { + case 1: + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[5] = 2; + return; + } + break; + case 0: + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + break; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyAnimSprite(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 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = AnimOrbitScatterStep; +} + +static void AnimOrbitScatterStep(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c index b24fcf4b1..5cd2a3ddb 100644 --- a/src/battle/anim/homing.c +++ b/src/battle/anim/homing.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CC6CC(struct Sprite* sprite); static void sub_80CC7D4(struct Sprite* sprite); // homing (the spinning effect of sprites going inward in a static rotation.) // Used by Needle Arm. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6994 = +{ + .tileTag = 10266, + .paletteTag = 10266, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC6CC, +}; + void sub_80CC6CC(struct Sprite* sprite) { u8 a; @@ -69,7 +81,7 @@ void sub_80CC6CC(struct Sprite* sprite) } } -void sub_80CC7D4(struct Sprite* sprite) +static void sub_80CC7D4(struct Sprite* sprite) { if (sprite->data[0]) { diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c index 7d1b2fd01..3aba79511 100644 --- a/src/battle/anim/hop.c +++ b/src/battle/anim/hop.c @@ -7,9 +7,67 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CB94C(struct Sprite* sprite); +void sub_80CBA28(struct Sprite* sprite); + // hop (where a sprite "hops" across the screen) // Used by Present, Trick, and the item knock off effect. +const union AnimCmd gSpriteAnim_83D66B0[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D66B8[] = +{ + gSpriteAnim_83D66B0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D66BC[] = { + AFFINEANIMCMD_FRAME(0, 0, -4, 10), + AFFINEANIMCMD_FRAME(0, 0, 4, 20), + AFFINEANIMCMD_FRAME(0, 0, -4, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D66DC[] = { + AFFINEANIMCMD_FRAME(0, 0, -1, 2), + AFFINEANIMCMD_FRAME(0, 0, 1, 4), + AFFINEANIMCMD_FRAME(0, 0, -1, 4), + AFFINEANIMCMD_FRAME(0, 0, 1, 4), + AFFINEANIMCMD_FRAME(0, 0, -1, 4), + AFFINEANIMCMD_FRAME(0, 0, 1, 2), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[] = { + gSpriteAffineAnim_83D66BC, + gSpriteAffineAnim_83D66DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D671C = +{ + .tileTag = 10224, + .paletteTag = 10224, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D66B8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6714, + .callback = sub_80CB94C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6734 = +{ + .tileTag = 10224, + .paletteTag = 10224, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D66B8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6714, + .callback = sub_80CBA28, +}; + void sub_80CB7EC(struct Sprite* sprite, s16 c) { s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c index 861f428da..ab239f3c4 100644 --- a/src/battle/anim/hop_2.c +++ b/src/battle/anim/hop_2.c @@ -11,12 +11,26 @@ extern u8 gAnimBankTarget; extern void sub_80CB7EC(struct Sprite* sprite, s16 c); extern bool8 sub_80CB814(struct Sprite* sprite); extern void sub_80CB8B8(struct Sprite* sprite); +extern const union AnimCmd *const gSpriteAnimTable_83D66B8[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[]; +void sub_80CBAE8(struct Sprite* sprite); static void sub_80CBB60(struct Sprite* sprite); // hop_2 // Used in item steal. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D677C = +{ + .tileTag = 10224, + .paletteTag = 10224, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D66B8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6714, + .callback = sub_80CBAE8, +}; + void sub_80CBAE8(struct Sprite* sprite) { s16 p1; @@ -43,7 +57,7 @@ void sub_80CBAE8(struct Sprite* sprite) sprite->callback = sub_80CBB60; } -void sub_80CBB60(struct Sprite* sprite) +static void sub_80CBB60(struct Sprite* sprite) { int zero; sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c new file mode 100755 index 000000000..50c8b9030 --- /dev/null +++ b/src/battle/anim/ice.c @@ -0,0 +1,495 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80D7704(struct Sprite *sprite); +void sub_80D78EC(struct Sprite *sprite); +void sub_80D792C(struct Sprite *sprite); +void sub_80D79B4(struct Sprite *sprite); +void sub_80D7A64(struct Sprite *sprite); +void sub_80D7CD4(struct Sprite *sprite); +void sub_80D7E88(struct Sprite *sprite); +void sub_80D7F10(struct Sprite *sprite); +void sub_80D83E0(struct Sprite *sprite); +void sub_80D8700(struct Sprite *sprite); +void sub_80D8D1C(struct Sprite *sprite); +void sub_807A9BC(struct Sprite *sprite); +void unc_080B06FC(struct Sprite *sprite); +void sub_80D8F10(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D9B58[] = +{ + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(1, 5, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9B64[] = +{ + gSpriteAnim_83D9B58, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9B68 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7704, +}; + +const union AnimCmd gSpriteAnim_83D9B80[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9B88[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9B90[] = +{ + ANIMCMD_FRAME(6, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9B98[] = +{ + ANIMCMD_FRAME(7, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9BA0[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9BA8[] = +{ + ANIMCMD_FRAME(12, 6), + ANIMCMD_FRAME(13, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BB4[] = +{ + gSpriteAnim_83D9B80, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BB8[] = +{ + gSpriteAnim_83D9B88, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BBC[] = +{ + gSpriteAnim_83D9B90, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BC0[] = +{ + gSpriteAnim_83D9B98, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BC4[] = +{ + gSpriteAnim_83D9BA0, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9BC8[] = +{ + gSpriteAnim_83D9BA8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9BCC[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 40, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] = +{ + gSpriteAffineAnim_83D9BCC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E144, + .anims = gSpriteAnimTable_83D9BB8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9BDC, + .callback = sub_80D78EC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E044, + .anims = gSpriteAnimTable_83D9BBC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D78EC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] = +{ + gSpriteAffineAnim_83D9C10, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E0E4, + .anims = gSpriteAnimTable_83D9BB8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9C20, + .callback = sub_80D792C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E044, + .anims = gSpriteAnimTable_83D9BBC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D792C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] = +{ + AFFINEANIMCMD_FRAME(0xCE, 0xCE, 0, 0), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] = +{ + gSpriteAffineAnim_83D9C54, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E0E4, + .anims = gSpriteAnimTable_83D9BB8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9C74, + .callback = sub_80D79B4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837E0A4, + .anims = gSpriteAnimTable_83D9BBC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9C74, + .callback = sub_80D79B4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D9BC0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7A64, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D9BC4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7CD4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D9BC0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7CD4, +}; + +const union AnimCmd gSpriteAnim_83D9CF0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9D10[] = +{ + gSpriteAnim_83D9CF0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 = +{ + .tileTag = 10142, + .paletteTag = 10142, + .oam = &gOamData_837E084, + .anims = gSpriteAnimTable_83D9D10, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7E88, +}; + +const union AnimCmd gSpriteAnim_83D9D2C[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9D38[] = +{ + gSpriteAnim_83D9D2C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C = +{ + .tileTag = 10144, + .paletteTag = 10144, + .oam = &gOamData_837E074, + .anims = gSpriteAnimTable_83D9D38, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7F10, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 = +{ + .tileTag = 10172, + .paletteTag = 10172, + .oam = &gOamData_837E074, + .anims = gSpriteAnimTable_83D9D38, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D7F10, +}; + +const u8 gUnknown_083D9D6C[] = +{ + 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D83E0, +}; + +const u8 gUnknown_083D9D98[] = +{ + 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC = +{ + .tileTag = 10172, + .paletteTag = 10172, + .oam = &gOamData_837E074, + .anims = gSpriteAnimTable_83D9D38, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D8700, +}; + +// bitfield array +const u32 gUnknown_083D9DC4[] = +{ + 0x2001E064, + 0x0001E055, + 0x1011E0F2, + 0x1021E042, + 0x0031E0B6, + 0x2001E03C, + 0x0011E0D6, + 0x1001E071, + 0x1031E0D2, + 0x0021E026, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9DFC[] = +{ + AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9E0C[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9E1C[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E2C[] = +{ + gSpriteAffineAnim_83D9DEC, + gSpriteAffineAnim_83D9DFC, + gSpriteAffineAnim_83D9E0C, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] = +{ + gSpriteAffineAnim_83D9E1C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9E3C = +{ + .tileTag = 10263, + .paletteTag = 10263, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9E2C, + .callback = sub_80D8D1C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 = +{ + .tileTag = 10263, + .paletteTag = 10263, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9E38, + .callback = sub_807A9BC, +}; + +const union AnimCmd gSpriteAnim_83D9E6C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9E74[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9E88[] = +{ + gSpriteAnim_83D9E6C, + gSpriteAnim_83D9E74, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9E90[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9EA0[] = +{ + AFFINEANIMCMD_FRAME(0x118, 0x118, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9EB0[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9EC0[] = +{ + AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D9ED0[] = +{ + AFFINEANIMCMD_FRAME(0x1C0, 0x1C0, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] = +{ + gSpriteAffineAnim_83D9E90, + gSpriteAffineAnim_83D9EA0, + gSpriteAffineAnim_83D9EB0, + gSpriteAffineAnim_83D9EC0, + gSpriteAffineAnim_83D9ED0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 = +{ + .tileTag = 10043, + .paletteTag = 10043, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_83D9E88, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9EE0, + .callback = unc_080B06FC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D9BBC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D8F10, +}; diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c index d3270ee65..8ab3fcded 100644 --- a/src/battle/anim/kiss_fountain.c +++ b/src/battle/anim/kiss_fountain.c @@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1FDC(struct Sprite* sprite); + // kiss_fountain (a series of hearts pour out of a target Pokemon.) // Used in Attract and Sweet Kiss. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AC8 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1FDC, +}; + void sub_80D1FDC(struct Sprite* sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c index ca2af257d..d31e4dbd6 100644 --- a/src/battle/anim/leaf.c +++ b/src/battle/anim/leaf.c @@ -1,18 +1,120 @@ #include "global.h" +#include "battle.h" +#include "battle_anim.h" #include "rom_8077ABC.h" #include "trig.h" -#include "battle_anim.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CAED8(struct Sprite* sprite); +void AnimMoveTwisterParticle(struct Sprite* sprite); +void AnimTranslateLinearSingleSineWave(struct Sprite* sprite); static void sub_80CAF20(struct Sprite* sprite); static void sub_80CAF6C(struct Sprite* sprite); +static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite); +static void AnimMoveTwisterParticleStep(struct Sprite* sprite); // leaf // Used by Razor Leaf and Twister. +const union AnimCmd gSpriteAnim_83D6458[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(20, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83D6484[] = +{ + ANIMCMD_FRAME(24, 5), + ANIMCMD_FRAME(28, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6494[] = +{ + gSpriteAnim_83D6458, + gSpriteAnim_83D6484, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D649C = +{ + .tileTag = 10063, + .paletteTag = 10063, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6494, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CAED8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64B4 = +{ + .tileTag = 10063, + .paletteTag = 10063, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6494, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle, +}; + +const union AnimCmd gSpriteAnim_83D64CC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D64E0[] = +{ + gSpriteAnim_83D64CC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64E4 = +{ + .tileTag = 10160, + .paletteTag = 10160, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83D64E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTranslateLinearSingleSineWave, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D64FC[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D650C[] = { + gSpriteAffineAnim_83D64FC, +}; + +const struct SpriteTemplate gSwiftStarSpriteTemplate = +{ + .tileTag = 10174, + .paletteTag = 10174, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D650C, + .callback = AnimTranslateLinearSingleSineWave, +}; + void sub_80CAED8(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); @@ -23,7 +125,7 @@ void sub_80CAED8(struct Sprite* sprite) sprite->callback = sub_80CAF20; } -void sub_80CAF20(struct Sprite* sprite) +static void sub_80CAF20(struct Sprite* sprite) { if (!sprite->data[2]) { @@ -49,7 +151,7 @@ void sub_80CAF20(struct Sprite* sprite) } } -void sub_80CAF6C(struct Sprite* sprite) +static void sub_80CAF6C(struct Sprite* sprite) { if (GetBattlerSide(gAnimBankAttacker)) { @@ -72,3 +174,135 @@ void sub_80CAF6C(struct Sprite* sprite) DestroyAnimSprite(sprite); } } + +// 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. +// 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) +{ + InitAnimSpritePos(sprite, 1); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (!gBattleAnimArgs[6]) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimSpriteTranslationOverDuration(sprite); + if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget)) + { + sprite->data[0] = 1; + } + else + { + sprite->data[0] = 0; + } + + sprite->callback = AnimTranslateLinearSingleSineWaveStep; +} + +static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) +{ + bool8 destroy = FALSE; + s16 a = sprite->data[0]; + s16 b = sprite->data[7]; + s16 r0; + + sprite->data[0] = 1; + TranslateAnimSpriteLinearAndSine(sprite); + r0 = sprite->data[7]; + sprite->data[0] = a; + if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; + + if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) + { + sprite->invisible ^= 1; + sprite->oam.affineParam++; + if (sprite->oam.affineParam == 0x1E) + destroy = TRUE; + } + + if (sprite->pos1.x + sprite->pos2.x > 256 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + destroy = TRUE; + + if (destroy) + DestroyAnimSprite(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) + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + } + + sprite->pos1.y += 32; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->callback = AnimMoveTwisterParticleStep; +} + +static void AnimMoveTwisterParticleStep(struct Sprite* sprite) +{ + if (sprite->data[1] == 0xFF) + { + sprite->pos1.y -= 2; + } + else if (sprite->data[1] > 0) + { + sprite->pos1.y -= 2; + sprite->data[1] -= 2; + } + + sprite->data[5] += sprite->data[2]; + if (sprite->data[0] < sprite->data[4]) + sprite->data[5] += sprite->data[2]; + + sprite->data[5] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); + sprite->pos2.y = Sin(sprite->data[5], 5); + if (sprite->data[5] <= 0x7F) + { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1; + } + else + { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; + } + + sprite->data[0]--; + if (!sprite->data[0]) + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/lunge.c b/src/battle/anim/lunge.c new file mode 100644 index 000000000..13cabb422 --- /dev/null +++ b/src/battle/anim/lunge.c @@ -0,0 +1,339 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern u8 gBankSpriteIds[]; + +void sub_80CD774(struct Sprite* sprite); +void sub_80CD9C4(struct Sprite* sprite); +static void sub_80CD7CC(struct Sprite* sprite); +static void sub_80CD81C(struct Sprite* sprite); +static void sub_80CD8A8(struct Sprite* sprite); +static void sub_80CD8F8(struct Sprite* sprite); +static void sub_80CD91C(struct Sprite* sprite); +static void sub_80CD9B8(struct Sprite* sprite); +static void sub_80CD9D4(struct Sprite* sprite); +static void sub_80CDB60(u8 taskId); +static void sub_80CDD20(u8 taskId); + +// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.) +// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill. + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DE4 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD774, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6DFC = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD9C4, +}; + +void sub_80CD774(struct Sprite* sprite) +{ + sprite->invisible = 1; + sprite->data[0] = 0; + switch (gBattleAnimArgs[0]) + { + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; + } +} + +static void sub_80CD7CC(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2; + sprite->data[2] = 0; + sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD81C); + sprite->callback = TranslateMonBGUntil; +} + +static void sub_80CD81C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; + sub_8078E70(sprite->data[3], 0); + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[5] = 0; + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD9B8; + } +} + +static void sub_80CD8A8(struct Sprite* sprite) +{ + sprite->data[0] = 4; + sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3; + sprite->data[2] = 0; + sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD9B8); + sprite->callback = TranslateMonBGUntil; +} + +static void sub_80CD8F8(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD91C; + } +} + +static void sub_80CD91C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; + sprite->data[6] = GetBattlerSide(gAnimBankAttacker); + if (GetBattlerSide(gAnimBankAttacker)) + { + sprite->data[4] = 0xFC00; + sprite->data[5] = 0xC00; + } + else + { + sprite->data[4] = 0x400; + sprite->data[5] = 0xF400; + } + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 2) + { + sub_8078F40(sprite->data[3]); + sprite->callback = sub_80CD9B8; + } +} + +static void sub_80CD9B8(struct Sprite* sprite) +{ + DestroyAnimSprite(sprite); +} + +void sub_80CD9C4(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80CD9D4; +} + +static void sub_80CD9D4(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1] = 0; + sprite->data[2] = gBankSpriteIds[gAnimBankAttacker]; + sprite->data[3] = GetBattlerSide(gAnimBankAttacker); + sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; + sprite->data[5] = 0; + sub_8078E70(sprite->data[2], 0); + sprite->data[0]++; + case 1: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->data[4] *= -1; + sprite->data[0]++; + } + break; + case 2: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sub_8078F40(sprite->data[2]); + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_80CDAC8(u8 taskId) +{ + u8 a; + + gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker]; + a = GetBattlerSide(gAnimBankAttacker); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + switch (gBattleAnimArgs[0]) + { + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = sub_80CDD20; + break; + } +} + +void sub_80CDB60(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + } + else + { + if (task->data[3] & 1) + gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; + else + gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + + task->data[6] = 1; + task->data[3]--; + } + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_80CDD20(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c deleted file mode 100644 index 949fb89f4..000000000 --- a/src/battle/anim/lunge_1.c +++ /dev/null @@ -1,124 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBankSpriteIds[]; - -static void sub_80CD7CC(struct Sprite* sprite); -static void sub_80CD81C(struct Sprite* sprite); -static void sub_80CD8A8(struct Sprite* sprite); -static void sub_80CD8F8(struct Sprite* sprite); -static void sub_80CD91C(struct Sprite* sprite); -static void sub_80CD9B8(struct Sprite* sprite); - -// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.) -// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill. - -void sub_80CD774(struct Sprite* sprite) -{ - sprite->invisible = 1; - sprite->data[0] = 0; - switch (gBattleAnimArgs[0]) - { - case 0: - sprite->callback = sub_80CD7CC; - break; - case 1: - sprite->callback = sub_80CD8A8; - break; - case 2: - sprite->callback = sub_80CD8F8; - break; - default: - sprite->callback = sub_80CD9B8; - break; - } -} - -void sub_80CD7CC(struct Sprite* sprite) -{ - sprite->data[0] = 6; - sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2; - sprite->data[2] = 0; - sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD81C); - sprite->callback = TranslateMonBGUntil; -} - -void sub_80CD81C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; - sub_8078E70(sprite->data[3], 0); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; - sprite->data[5] = 0; - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 3) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD8A8(struct Sprite* sprite) -{ - sprite->data[0] = 4; - sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3; - sprite->data[2] = 0; - sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD9B8); - sprite->callback = TranslateMonBGUntil; -} - -void sub_80CD8F8(struct Sprite* sprite) -{ - if (++sprite->data[0] > 8) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD91C; - } -} - -void sub_80CD91C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gBankSpriteIds[gAnimBankAttacker]; - sprite->data[6] = GetBattlerSide(gAnimBankAttacker); - if (GetBattlerSide(gAnimBankAttacker)) - { - sprite->data[4] = 0xFC00; - sprite->data[5] = 0xC00; - } - else - { - sprite->data[4] = 0x400; - sprite->data[5] = 0xF400; - } - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 2) - { - sub_8078F40(sprite->data[3]); - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD9B8(struct Sprite* sprite) -{ - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c deleted file mode 100644 index c0100922c..000000000 --- a/src/battle/anim/lunge_2.c +++ /dev/null @@ -1,163 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBankSpriteIds[]; - -static void sub_80CDB60(u8 taskId); -static void sub_80CDD20(u8 taskId); - -// lunge_2 -// Drill Peck - -void sub_80CDAC8(u8 taskId) -{ - u8 a; - - gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker]; - a = GetBattlerSide(gAnimBankAttacker); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = 0; - switch (gBattleAnimArgs[0]) - { - default: - DestroyAnimVisualTask(taskId); - break; - case 0: - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 3; - if (a == 0) - gTasks[taskId].data[5] *= -1; - - gTasks[taskId].func = sub_80CDB60; - break; - case 1: - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0x600; - gTasks[taskId].data[5] = 0xC0; - if (a == 0) - { - gTasks[taskId].data[4] = -gTasks[taskId].data[4]; - gTasks[taskId].data[5] = -gTasks[taskId].data[5]; - } - - gTasks[taskId].func = sub_80CDD20; - break; - } -} - -void sub_80CDB60(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) - { - case 0: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = 0; - task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_8078E70(task->data[0], 0); - task->data[2]++; - } - break; - case 1: - if (task->data[3]) - { - task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; - task->data[6] = 1; - task->data[2]++; - } - break; - case 2: - if (task->data[3]) - { - if (task->data[6]) - { - task->data[6]--; - } - else - { - if (task->data[3] & 1) - gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; - else - gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; - - task->data[6] = 1; - task->data[3]--; - } - } - else - { - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3] = 12; - task->data[2]++; - } - break; - case 3: - if (task->data[3]) - { - task->data[3]--; - } - else - { - task->data[3] = 3; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 8 : -8; - task->data[2]++; - } - break; - case 4: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_80CDD20(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (task->data[3]) - { - task->data[4] -= task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - sub_8078F40(task->data[0]); - DestroyAnimVisualTask(taskId); - } -} diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c index 1407e8cd7..3960b5e1a 100644 --- a/src/battle/anim/money.c +++ b/src/battle/anim/money.c @@ -8,11 +8,57 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CFE9C(struct Sprite* sprite); +void sub_80CFF50(struct Sprite* sprite); static void sub_80CFF68(struct Sprite* sprite); // money // Used by Pay Day. +const union AnimCmd gSpriteAnim_83D75C4[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D75CC[] = +{ + gSpriteAnim_83D75C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D75D0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D75E0[] = +{ + gSpriteAffineAnim_83D75D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75E4 = +{ + .tileTag = 10100, + .paletteTag = 10100, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D75CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CFE9C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75FC = +{ + .tileTag = 10100, + .paletteTag = 10100, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D75CC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D75E0, + .callback = sub_80CFF50, +}; + void sub_80CFE9C(struct Sprite* sprite) { s16 r6; @@ -43,7 +89,7 @@ void sub_80CFF50(struct Sprite* sprite) sprite->callback = sub_80CFF68; } -void sub_80CFF68(struct Sprite* sprite) +static void sub_80CFF68(struct Sprite* sprite) { sprite->data[0] += 0x80; sprite->pos2.x = sprite->data[0] >> 8; diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c index c532e8057..6e889008e 100644 --- a/src/battle/anim/moon.c +++ b/src/battle/anim/moon.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CE30C(struct Sprite* sprite); static void sub_80CE354(struct Sprite* sprite); // moon (shows a moon image.) // Used in Moonlight. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8 = +{ + .tileTag = 10194, + .paletteTag = 10194, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CE30C, +}; + void sub_80CE30C(struct Sprite* sprite) { if (IsContest()) @@ -32,7 +44,7 @@ void sub_80CE30C(struct Sprite* sprite) sprite->callback = sub_80CE354; } -void sub_80CE354(struct Sprite* sprite) +static void sub_80CE354(struct Sprite* sprite) { if (sprite->data[0]) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/musical.c b/src/battle/anim/musical.c new file mode 100644 index 000000000..17836ace7 --- /dev/null +++ b/src/battle/anim/musical.c @@ -0,0 +1,393 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80CEB0C(struct Sprite* sprite); +void sub_80CECE8(struct Sprite* sprite); +void sub_80CEDF0(struct Sprite* sprite); +void sub_80CEE60(struct Sprite* sprite); +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CEC1C(struct Sprite* sprite); +static void sub_80CED78(struct Sprite* sprite); +static void sub_80CEEE8(struct Sprite* sprite); + +const union AnimCmd gSpriteAnim_83D7098[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70A0[] = +{ + ANIMCMD_FRAME(4, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70A8[] = +{ + ANIMCMD_FRAME(8, 41), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70B0[] = +{ + ANIMCMD_FRAME(12, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70B8[] = +{ + ANIMCMD_FRAME(16, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70C0[] = +{ + ANIMCMD_FRAME(20, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70C8[] = +{ + ANIMCMD_FRAME(0, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70D0[] = +{ + ANIMCMD_FRAME(4, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D70D8[] = +{ + gSpriteAnim_83D7098, + gSpriteAnim_83D70A0, + gSpriteAnim_83D70A8, + gSpriteAnim_83D70B0, + gSpriteAnim_83D70B8, + gSpriteAnim_83D70C0, + gSpriteAnim_83D70C8, + gSpriteAnim_83D70D0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D70F8[] = +{ + AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16), + AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7110[] = +{ + gSpriteAffineAnim_83D70F8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7114 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7110, + .callback = sub_80CEB0C, +}; + +const u16 gUnknown_083D712C[][6] = +{ + {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, + {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, + {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, + {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D715C = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7110, + .callback = sub_80CECE8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7174 = +{ + .tileTag = 10193, + .paletteTag = 10193, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CEDF0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D718C[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D71A4[] = +{ + gSpriteAffineAnim_83D718C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D71A8 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D71A4, + .callback = sub_80CEE60, +}; + +// musical (music notes, drum) +// Used by Grasswhistle, Belly Drum, and Sing. + +// rainbow effect for musical notes +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 index; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + } + + for (j = 1; j < 4; j++) + { + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } + } + } + DestroyAnimVisualTask(taskId); +} + +// clears the rainbow effect for musical notes. +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + { + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80CEB0C(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + sub_8078650(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + if (IsContest()) + { + a = 0x30; + b = 0x28; + } + else + { + a = GetBattlerSpriteCoord(gAnimBankTarget, 2); + b = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); + sprite->callback = sub_80CEC1C; +} + +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + + *c = f / g; + *d = (b << 8) / g; +} + +static void sub_80CEC1C(struct Sprite* sprite) +{ + int b; + s16 a; + int c; + u8 index; + sprite->data[0]++; + b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->pos2.y = Sin(b, 15); + a = (u16)sprite->pos1.y; + c = (u16)sprite->pos1.x; + + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + { + move_anim_8074EE0(sprite); + } + else + { + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + { + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} + +// note_scatter +// Used by Teeter Dance. + +void sub_80CECE8(struct Sprite* sprite) +{ + int a; + if (GetBattlerSide(gAnimBankAttacker) == 1) + { + a = gBattleAnimArgs[1]; + (u16)gBattleAnimArgs[1] = -a; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = sub_80CED78; +} + +static void sub_80CED78(struct Sprite* sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) + { + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; + } + + if (++sprite->data[0] == 0x30) + move_anim_8074EE0(sprite); +} + +// drum (using hands to slap the Pokemon's belly in a rhythm.) +// Used in Belly Drum. + +void sub_80CEDF0(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = 8; + a = 16; + } + else + { + a = -16; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8; + sprite->data[0] = 8; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// note_scatter_2 (slower scatter of notes.) +// Used in Belly Drum. + +void sub_80CEE60(struct Sprite* sprite) +{ + s16 a; + u8 index; + sub_8078650(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = a + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; + InitAnimSpriteTranslationDeltas(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CEEE8; +} + +static void sub_80CEEE8(struct Sprite* sprite) +{ + if (TranslateAnimSpriteByDeltas(sprite) == 0) + { + s16 a; + a = Sin(sprite->data[5], 8); + if (sprite->pos2.x < 0) + a = -a; + + sprite->pos2.x += a; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c index 0b6498318..6a6f6c10a 100644 --- a/src/battle/anim/noise.c +++ b/src/battle/anim/noise.c @@ -6,11 +6,23 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2D68(struct Sprite* sprite); static void sub_80D2E30(struct Sprite *); // noise (moving music note) // Used in Uproar. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7CC8 = +{ + .tileTag = 10225, + .paletteTag = 10225, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2D68, +}; + void sub_80D2D68(struct Sprite* sprite) { int var1; diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c new file mode 100755 index 000000000..8303e7c68 --- /dev/null +++ b/src/battle/anim/normal.c @@ -0,0 +1,240 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80E1CB4(struct Sprite *sprite); +void sub_80E1D84(struct Sprite *sprite); +void sub_80E1E2C(struct Sprite *sprite); +void sub_80E1F3C(struct Sprite *sprite); +void sub_80E24B8(struct Sprite *sprite); +void sub_80E27A0(struct Sprite *sprite); +void sub_80E2838(struct Sprite *sprite); +void sub_80E27A0(struct Sprite *sprite); +void sub_80E2870(struct Sprite *sprite); +void sub_80E2908(struct Sprite *sprite); +void sub_80E2978(struct Sprite *sprite); +void sub_80E29C0(struct Sprite *sprite); +void sub_80E27E8(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83DB37C[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83DB390[] = +{ + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DB3A4[] = +{ + gSpriteAnim_83DB37C, + gSpriteAnim_83DB390, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3AC = +{ + .tileTag = 10073, + .paletteTag = 10073, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83DB3A4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1CB4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3C4 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1D84, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3DC = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1E2C, +}; + +const union AnimCmd gSpriteAnim_83DB3F4[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83DB40C[] = +{ + gSpriteAnim_83DB3F4, +}; + +const struct SpriteTemplate gSpriteTemplate_83DB410 = +{ + .tileTag = 10071, + .paletteTag = 10071, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DB40C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E1F3C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB428 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E24B8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB440[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB450[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB468[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DB480[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB498[] = +{ + gSpriteAffineAnim_83DB440, + gSpriteAffineAnim_83DB450, + gSpriteAffineAnim_83DB468, + gSpriteAffineAnim_83DB480, +}; + +const struct SpriteTemplate gBasicHitSplatSpriteTemplate = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E27A0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4C0 = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E2838, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4D8 = +{ + .tileTag = 10148, + .paletteTag = 10148, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E27A0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4F0 = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E2870, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB508 = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E2908, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB520 = +{ + .tileTag = 10285, + .paletteTag = 10285, + .oam = &gOamData_837E054, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80E2978, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538 = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E29C0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB550 = +{ + .tileTag = 10135, + .paletteTag = 10135, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB498, + .callback = sub_80E27E8, +}; + +const u16 gUnknown_083DB568 = RGB(31, 31, 31); diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c index 4e12c7e1a..26ae96c3a 100644 --- a/src/battle/anim/note_rain.c +++ b/src/battle/anim/note_rain.c @@ -8,30 +8,5 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern u16 gUnknown_083D7A5C[5]; - // note_rain (notes rain from a source point, usually a bell.) // Used in Heal Bell. - -void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) -{ - u8 tile; - tile = (b & 1); - tile = ((-tile | tile) >> 31) & 32; - sprite->oam.tileNum += tile + (a << 2); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); -} - -void sub_80D1C08(struct Sprite* sprite) -{ - InitAnimSpritePos(sprite, 0); - if (GetBattlerSide(gAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3]; - sprite->callback = StartTranslateAnimSpriteByDeltas; - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); - sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); -} diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c deleted file mode 100644 index 53afa7d78..000000000 --- a/src/battle/anim/note_scatter.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void sub_80CED78(struct Sprite* sprite); - -// note_scatter -// Used by Teeter Dance. - -void sub_80CECE8(struct Sprite* sprite) -{ - int a; - if (GetBattlerSide(gAnimBankAttacker) == 1) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } - - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; - sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; - sprite->callback = sub_80CED78; -} - -void sub_80CED78(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - if (sprite->data[0] > 5 && sprite->data[3] == 0) - { - sprite->data[2] = (sprite->data[2] + 16) & 0xFF; - sprite->pos2.x = Cos(sprite->data[2], 18); - sprite->pos2.y = Sin(sprite->data[2], 18); - if (sprite->data[2] == 0) - sprite->data[3] = 1; - } - - if (++sprite->data[0] == 0x30) - move_anim_8074EE0(sprite); -} diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c deleted file mode 100644 index 262afb8bf..000000000 --- a/src/battle/anim/note_scatter_2.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEEE8(struct Sprite* sprite); - -// note_scatter_2 (slower scatter of notes.) -// Used in Belly Drum. - -void sub_80CEE60(struct Sprite* sprite) -{ - s16 a; - u8 index; - sub_8078650(sprite); - sprite->pos1.y += 8; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - - a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; - sprite->data[0] = 40; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = a + sprite->data[1]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sprite->data[3] - 40; - InitAnimSpriteTranslationDeltas(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CEEE8; -} - -void sub_80CEEE8(struct Sprite* sprite) -{ - if (TranslateAnimSpriteByDeltas(sprite) == 0) - { - s16 a; - a = Sin(sprite->data[5], 8); - if (sprite->pos2.x < 0) - a = -a; - - sprite->pos2.x += a; - sprite->pos2.y += Sin(sprite->data[5], 4); - sprite->data[5] = (sprite->data[5] + 8) & 0xFF; - } - else - { - DestroyAnimSprite(sprite); - } -} diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c index 026ee1856..c3d6bdf52 100644 --- a/src/battle/anim/note_spin.c +++ b/src/battle/anim/note_spin.c @@ -7,12 +7,63 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AnimCmd *const gSpriteAnimTable_83D70D8[]; + +void sub_80D2E68(struct Sprite *sprite); +void sub_80D2EC8(struct Sprite *sprite); static void sub_80D2F80(struct Sprite *); static void sub_80D2FA4(struct Sprite *); // note_spin (spins music notes around, and rotates them) // Used in Perish Song. +const union AffineAnimCmd gSpriteAffineAnim_83D7CE0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7CF0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7D00[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D10[] = +{ + gSpriteAffineAnim_83D7CE0, + gSpriteAffineAnim_83D7CF0, + gSpriteAffineAnim_83D7D00, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D1C = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D10, + .callback = sub_80D2EC8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D34 = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D10, + .callback = sub_80D2E68, +}; + void sub_80D2E68(struct Sprite *sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c deleted file mode 100644 index 1f3db8c56..000000000 --- a/src/battle/anim/note_wave.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); -static void sub_80CEC1C(struct Sprite* sprite); - -// note_wave -// Used by Grasswhistle, Belly Drum, and Sing. - -// rainbow effect for musical notes -void sub_80CEA20(u8 taskId) -{ - u16 i; - u16 j; - u16 index; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; - } - } - - for (j = 1; j < 4; j++) - { - index = AllocSpritePalette(gUnknown_083D712C[j][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; - } - } - } - DestroyAnimVisualTask(taskId); -} - -// clears the rainbow effect for musical notes. -void sub_80CEAD8(u8 taskId) -{ - u16 i; - for (i = 1; i < 4; i++) - { - FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80CEB0C(struct Sprite* sprite) -{ - u8 index; - u8 a; - u8 b; - sub_8078650(sprite); - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) - sprite->oam.paletteNum = index; - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = 0; - sprite->data[3] = gBattleAnimArgs[2]; - if (IsContest()) - { - a = 0x30; - b = 0x28; - } - else - { - a = GetBattlerSpriteCoord(gAnimBankTarget, 2); - b = GetBattlerSpriteCoord(gAnimBankTarget, 3); - } - - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); - sprite->callback = sub_80CEC1C; -} - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) -{ - int f; - int g; - if (a < 0) - e = -e; - - f = a << 8; - g = f / e; - if (g == 0) - g = 1; - - *c = f / g; - *d = (b << 8) / g; -} - -void sub_80CEC1C(struct Sprite* sprite) -{ - int b; - s16 a; - int c; - u8 index; - sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; - - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) - { - move_anim_8074EE0(sprite); - } - else - { - if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) - { - sprite->data[2] = 0; - if (++sprite->data[1] > 3) - sprite->data[1] = 0; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - } - } -} diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c index b4a641cc2..e76e0923e 100644 --- a/src/battle/anim/orbit.c +++ b/src/battle/anim/orbit.c @@ -7,12 +7,85 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CABF8(struct Sprite* sprite); +void sub_80CAD54(struct Sprite* sprite); +void sub_80CAE20(struct Sprite* sprite); static void sub_80CAC44(struct Sprite* sprite); static void sub_80CADA8(struct Sprite* sprite); static void sub_80CAE74(struct Sprite* sprite); -// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.) -// Used by Spore, Cotton Spore, and Petal Dance. +const union AnimCmd gSpriteAnim_83D63E0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D63E8[] = +{ + ANIMCMD_FRAME(4, 7), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D63F0[] = +{ + gSpriteAnim_83D63E0, + gSpriteAnim_83D63E8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D63F8 = +{ + .tileTag = 10158, + .paletteTag = 10158, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D63F0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CABF8, +}; + +const union AnimCmd gSpriteAnim_83D6410[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6418[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6420[] = +{ + gSpriteAnim_83D6410, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6424[] = +{ + gSpriteAnim_83D6418, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6428 = +{ + .tileTag = 10159, + .paletteTag = 10159, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6420, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CAD54, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 = +{ + .tileTag = 10159, + .paletteTag = 10159, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D6424, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CAE20, +}; void sub_80CABF8(struct Sprite* sprite) { @@ -29,7 +102,7 @@ void sub_80CABF8(struct Sprite* sprite) sub_80CAC44(sprite); } -void sub_80CAC44(struct Sprite* sprite) +static void sub_80CAC44(struct Sprite* sprite) { u8 var1; @@ -91,7 +164,7 @@ void sub_80CAD54(struct Sprite* sprite) sub_80CADA8(sprite); } -void sub_80CADA8(struct Sprite* sprite) +static void sub_80CADA8(struct Sprite* sprite) { if (!TranslateAnimSpriteByDeltas(sprite)) { @@ -128,7 +201,7 @@ void sub_80CAE20(struct Sprite* sprite) sub_80CAE74(sprite); } -void sub_80CAE74(struct Sprite* sprite) +static void sub_80CAE74(struct Sprite* sprite) { if (!TranslateAnimSpriteByDeltas(sprite)) { diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c deleted file mode 100644 index 67a59583f..000000000 --- a/src/battle/anim/orbit_fast.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void AnimOrbitFastStep(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 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->affineAnimPaused = 1; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[7] = sub_8079E90(gAnimBankAttacker); - sprite->callback = AnimOrbitFastStep; - sprite->callback(sprite); -} - -static void AnimOrbitFastStep(struct Sprite* sprite) -{ - if ((u16)(sprite->data[1] - 0x40) <= 0x7F) - sprite->subpriority = sprite->data[7] + 1; - else - sprite->subpriority = sprite->data[7] - 1; - - sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); - sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); - sprite->data[1] = (sprite->data[1] + 9) & 0xFF; - switch (sprite->data[5]) - { - case 1: - sprite->data[2] -= 0x400; - sprite->data[3] -= 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[5] = 2; - return; - } - break; - case 0: - sprite->data[2] += 0x400; - sprite->data[3] += 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[4] = 0; - sprite->data[5] = 1; - } - break; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c deleted file mode 100644 index bd03ee78c..000000000 --- a/src/battle/anim/orbit_scatter.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void AnimOrbitScatterStep(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 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->callback = AnimOrbitScatterStep; -} - -static void AnimOrbitScatterStep(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c index 53c16d8d7..af6568bd8 100644 --- a/src/battle/anim/orbs.c +++ b/src/battle/anim/orbs.c @@ -8,11 +8,184 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CA7B0(struct Sprite* sprite); +void sub_80CA800(struct Sprite* sprite); +void sub_80CA858(struct Sprite* sprite); +void sub_80CA9A8(struct Sprite* sprite); +void sub_80CAA14(struct Sprite* sprite); static void sub_80CA8B4(struct Sprite* sprite); static void sub_80CA9F8(struct Sprite* sprite); static void sub_80CAACC(struct Sprite* sprite); -extern struct SpriteTemplate gSpriteTemplate_83D631C; +const union AnimCmd gSpriteAnim_83D626C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6274[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D627C[] = +{ + ANIMCMD_FRAME(2, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6284[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D628C[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6294[] = +{ + ANIMCMD_FRAME(5, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D629C[] = +{ + ANIMCMD_FRAME(6, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D62A4[] = +{ + ANIMCMD_FRAME(7, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D62AC[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D62B4[] = +{ + gSpriteAnim_83D626C, + gSpriteAnim_83D6274, + gSpriteAnim_83D627C, + gSpriteAnim_83D6284, + gSpriteAnim_83D628C, + gSpriteAnim_83D6294, + gSpriteAnim_83D629C, +}; + +const union AnimCmd *const gSpriteAnimTable_83D62D0[] = +{ + gSpriteAnim_83D62A4, +}; + +const union AnimCmd *const gSpriteAnimTable_83D62D4[] = +{ + gSpriteAnim_83D62AC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D62D8[] = { + AFFINEANIMCMD_FRAME(-5, -5, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D62E8[] = { + gSpriteAffineAnim_83D62D8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D62EC = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D62D4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D62E8, + .callback = sub_80CA7B0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6304 = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D62B4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CA800, +}; + +const struct SpriteTemplate gSpriteTemplate_83D631C = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D62D0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CA858, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6334[] = { + AFFINEANIMCMD_FRAME(320, 320, 0, 0), + AFFINEANIMCMD_FRAME(-14, -14, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D634C[] = { + gSpriteAffineAnim_83D6334, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6350 = +{ + .tileTag = 10235, + .paletteTag = 10235, + .oam = &gOamData_837DFE4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D634C, + .callback = sub_80CA7B0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6368[] = { + AFFINEANIMCMD_FRAME(-5, -5, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6378[] = { + gSpriteAffineAnim_83D6368, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D637C = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D62D4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6378, + .callback = sub_80CA9A8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6394 = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D62B4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CAA14, +}; + // orbs // Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed. @@ -52,7 +225,7 @@ void sub_80CA858(struct Sprite* sprite) sub_80CA8B4(sprite); } -void sub_80CA8B4(struct Sprite* sprite) +static void sub_80CA8B4(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite)) { @@ -103,7 +276,7 @@ void sub_80CA9A8(struct Sprite* sprite) sprite->callback = sub_80CA9F8; } -void sub_80CA9F8(struct Sprite* sprite) +static void sub_80CA9F8(struct Sprite* sprite) { if (TranslateAnimSpriteLinearAndSine(sprite)) DestroyAnimSprite(sprite); @@ -139,7 +312,7 @@ void sub_80CAA14(struct Sprite* sprite) sub_80CAACC(sprite); } -void sub_80CAACC(struct Sprite* sprite) +static void sub_80CAACC(struct Sprite* sprite) { if (sub_8078CE8(sprite)) { diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c index cca7af76e..dad5605f7 100644 --- a/src/battle/anim/osmose.c +++ b/src/battle/anim/osmose.c @@ -7,9 +7,34 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -// osmose (I didn't want to use "absorb" as thats confusing) +void sub_80CB768(struct Sprite* sprite); + +// osmose // Used by Ingrain. +const union AnimCmd gSpriteAnim_83D6688[] = +{ + ANIMCMD_FRAME(3, 3), + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D6694[] = +{ + gSpriteAnim_83D6688, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6698 = +{ + .tileTag = 10147, + .paletteTag = 10147, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D6694, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CB768, +}; + void sub_80CB768(struct Sprite* sprite) { if (!sprite->data[0]) diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c index 14db096c6..ceca55141 100644 --- a/src/battle/anim/perceive.c +++ b/src/battle/anim/perceive.c @@ -8,10 +8,38 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2920(struct Sprite* sprite); + // perceive (shows a sparkle in a set of eyes, usually for heightened perception.) // Used in Glare, Tickle, and Scary Face. -void sub_80D2904(struct Sprite* sprite) +const union AnimCmd gSpriteAnim_83D7B78[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7B90[] = +{ + gSpriteAnim_83D7B78, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B94 = +{ + .tileTag = 10218, + .paletteTag = 10218, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D7B90, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2920, +}; + +static void sub_80D2904(struct Sprite* sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c index 2cc104c07..4d6673adf 100644 --- a/src/battle/anim/poison.c +++ b/src/battle/anim/poison.c @@ -7,11 +7,191 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -void sub_80D9DD4(struct Sprite *sprite); -void sub_80D9E78(struct Sprite *sprite); -void sub_80D9EE8(struct Sprite *sprite); +extern const union AnimCmd *const gSpriteAnimTable_83D9310[]; + +void sub_80793C4(struct Sprite *sprite); +void sub_80D9D70(struct Sprite *sprite); +void sub_80D9DF0(struct Sprite *sprite); +void sub_80D9E94(struct Sprite *sprite); +void sub_80D9F14(struct Sprite *sprite); +void AnimBubbleEffect(struct Sprite *sprite); +static void sub_80D9DD4(struct Sprite *sprite); +static void sub_80D9E78(struct Sprite *sprite); +static void sub_80D9EE8(struct Sprite *sprite); static void AnimBubbleEffectStep(struct Sprite *sprite); +const union AnimCmd gSpriteAnim_83DA22C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(24, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA240[] = +{ + gSpriteAnim_83DA22C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA244 = +{ + .tileTag = 10151, + .paletteTag = 10151, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83DA240, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const union AnimCmd gSpriteAnim_83DA25C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA264[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA26C[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA274[] = +{ + gSpriteAnim_83DA25C, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA278[] = +{ + gSpriteAnim_83DA264, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA27C[] = +{ + gSpriteAnim_83DA26C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA280[] = +{ + AFFINEANIMCMD_FRAME(0x160, 0x160, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA2A0[] = +{ + AFFINEANIMCMD_FRAME(0xEC, 0xEC, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B0[] = +{ + gSpriteAffineAnim_83DA280, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B4[] = +{ + gSpriteAffineAnim_83DA2A0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2B8 = +{ + .tileTag = 10150, + .paletteTag = 10150, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83DA274, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA2B0, + .callback = sub_80D9D70, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2D0 = +{ + .tileTag = 10150, + .paletteTag = 10150, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83DA274, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA2B0, + .callback = sub_80D9DF0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2E8 = +{ + .tileTag = 10150, + .paletteTag = 10150, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83DA27C, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA2B4, + .callback = sub_80D9E94, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA300[] = +{ + AFFINEANIMCMD_FRAME(0xFFF0, 0x10, 0, 6), + AFFINEANIMCMD_FRAME(0x10, 0xFFF0, 0, 6), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[] = +{ + gSpriteAffineAnim_83DA300, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA31C = +{ + .tileTag = 10150, + .paletteTag = 10150, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83DA278, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA318, + .callback = sub_80D9F14, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA334[] = +{ + AFFINEANIMCMD_FRAME(0x9C, 0x9C, 0, 0), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 20), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA34C[] = +{ + gSpriteAffineAnim_83DA334, +}; + +const struct SpriteTemplate gPoisonBubbleSpriteTemplate = +{ + .tileTag = 10150, + .paletteTag = 10150, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83DA274, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA34C, + .callback = AnimBubbleEffect, +}; + +const struct SpriteTemplate gWaterBubbleSpriteTemplate = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D9310, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA34C, + .callback = AnimBubbleEffect, +}; + void sub_80D9D70(struct Sprite *sprite) { if (!gBattleAnimArgs[3]) @@ -29,7 +209,7 @@ void sub_80D9D70(struct Sprite *sprite) sprite->callback = sub_80D9DD4; } -void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78 +static void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78 { if (TranslateAnimSpriteLinearAndSine(sprite)) DestroyAnimSprite(sprite); @@ -57,7 +237,7 @@ void sub_80D9DF0(struct Sprite *sprite) sprite->callback = sub_80D9E78; } -void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4 +static void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4 { if (TranslateAnimSpriteLinearAndSine(sprite)) DestroyAnimSprite(sprite); @@ -79,7 +259,7 @@ void sub_80D9E94(struct Sprite *sprite) sprite->callback = sub_80D9EE8; } -void sub_80D9EE8(struct Sprite *sprite) +static void sub_80D9EE8(struct Sprite *sprite) { sub_8078394(sprite); diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c index 88339522e..046d3c20c 100644 --- a/src/battle/anim/powder.c +++ b/src/battle/anim/powder.c @@ -6,8 +6,60 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; +void AnimMovePowderParticle(struct Sprite* sprite); static void AnimMovePowderParticleStep(struct Sprite* sprite); +const union AnimCmd gSpriteAnim_83D61FC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(10, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(14, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D6220[] = +{ + gSpriteAnim_83D61FC, +}; + +const struct SpriteTemplate gSleepPowderParticleSpriteTemplate = +{ + .tileTag = 10067, + .paletteTag = 10067, + .oam = &gOamData_837DF64, + .anims = gSpriteAnimTable_83D6220, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + +const struct SpriteTemplate gStunSporeParticleSpriteTemplate = +{ + .tileTag = 10068, + .paletteTag = 10068, + .oam = &gOamData_837DF64, + .anims = gSpriteAnimTable_83D6220, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + +const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate = +{ + .tileTag = 10065, + .paletteTag = 10065, + .oam = &gOamData_837DF64, + .anims = gSpriteAnimTable_83D6220, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMovePowderParticle, +}; + // Animates the falling particles that horizontally wave back and forth. // Used by Sleep Powder, Stun Spore, and Poison Powder. // arg 0: initial x pixel offset diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c index 7babb3a19..a63652646 100644 --- a/src/battle/anim/psychic.c +++ b/src/battle/anim/psychic.c @@ -16,12 +16,13 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_BG2_X; extern u8 gBankSpriteIds[]; -extern const union AffineAnimCmd *const gUnknown_083DA888[]; -extern struct AffineAnimFrameCmd gUnknown_083DA8A4; -extern struct AffineAnimFrameCmd gUnknown_083DA8C4; -extern const struct SpriteTemplate gSpriteTemplate_83DA8DC; -extern const struct SpriteTemplate gSpriteTemplate_83DA9AC; - +void sub_80DB74C(struct Sprite *sprite); +void sub_80DBA4C(struct Sprite *sprite); +void sub_80DBAF4(struct Sprite *sprite); +void sub_80DBB70(struct Sprite *sprite); +void sub_80DC068(struct Sprite *sprite); +void sub_80DC2B0(struct Sprite *sprite); +void sub_80DC700(struct Sprite *sprite); static void sub_80DB88C(struct Sprite *sprite); static void sub_80DB8C0(struct Sprite *sprite); static void sub_80DB92C(struct Sprite *sprite); @@ -35,6 +36,395 @@ static void sub_80DC1FC(u8 taskId); static void sub_80DC3F4(u8 taskId); void sub_80DC5F4(u8 taskId); +const union AffineAnimCmd gSpriteAffineAnim_83DA674[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA68C[] = +{ + gSpriteAffineAnim_83DA674, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA690 = +{ + .tileTag = 10196, + .paletteTag = 10196, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA68C, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6A8 = +{ + .tileTag = 10166, + .paletteTag = 10166, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB74C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6C0 = +{ + .tileTag = 10167, + .paletteTag = 10167, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB74C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6D8 = +{ + .tileTag = 10168, + .paletteTag = 10168, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB74C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6F0 = +{ + .tileTag = 10169, + .paletteTag = 10169, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB74C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA708 = +{ + .tileTag = 10170, + .paletteTag = 10170, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB74C, +}; + +const union AnimCmd gSpriteAnim_83DA720[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA738[] = +{ + gSpriteAnim_83DA720, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA73C = +{ + .tileTag = 10071, + .paletteTag = 10071, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DA738, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DBA4C, +}; + +const union AnimCmd gSpriteAnim_83DA754[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA768[] = +{ + gSpriteAnim_83DA754, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA76C = +{ + .tileTag = 10070, + .paletteTag = 10070, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83DA768, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DBA4C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA784 = +{ + .tileTag = 10163, + .paletteTag = 10163, + .oam = &gOamData_837DF74, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const union AnimCmd gSpriteAnim_83DA79C[] = +{ + ANIMCMD_FRAME(8, 60, .hFlip = TRUE), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 22, .hFlip = TRUE), + ANIMCMD_LOOP(0), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(8, 22, .hFlip = TRUE), + ANIMCMD_FRAME(24, 3, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(40, 22, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DA7DC[] = +{ + ANIMCMD_FRAME(8, 60), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 22), + ANIMCMD_LOOP(0), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(8, 22), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(40, 22), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA81C[] = +{ + gSpriteAnim_83DA79C, + gSpriteAnim_83DA7DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA824 = +{ + .tileTag = 10097, + .paletteTag = 10097, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83DA81C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DBAF4, +}; + +const union AnimCmd gSpriteAnim_83DA83C[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(96, 18), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DA85C[] = +{ + gSpriteAnim_83DA83C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_3DA860[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 4), + AFFINEANIMCMD_FRAME(0, 0, -4, 8), + AFFINEANIMCMD_FRAME(0, 0, 4, 4), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_083DA888[] = +{ + gSpriteAffineAnim_3DA860, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA88C = +{ + .tileTag = 10093, + .paletteTag = 10093, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DA85C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DBB70, +}; + +const union AffineAnimCmd gSpriteAffineAnim_083DA8A4[] = +{ + AFFINEANIMCMD_FRAME(-8, 10, 0, 16), + AFFINEANIMCMD_FRAME(18, -18, 0, 16), + AFFINEANIMCMD_FRAME(-20, 16, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_083DA8C4[] = +{ + AFFINEANIMCMD_FRAME(64, -4, 0, 20), + AFFINEANIMCMD_FRAME(0, 0, 0, -56), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gSpriteTemplate_83DA8DC = +{ + .tileTag = 10249, + .paletteTag = 10249, + .oam = &gOamData_837E04C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA8F4 = +{ + .tileTag = 10250, + .paletteTag = 10250, + .oam = &gOamData_837DF3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DC068, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA90C[] = +{ + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA924[] = +{ + AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA94C[] = +{ + AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA974[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA99C[] = +{ + gSpriteAffineAnim_83DA90C, + gSpriteAffineAnim_83DA924, + gSpriteAffineAnim_83DA94C, + gSpriteAffineAnim_83DA974, +}; + +const struct SpriteTemplate gSpriteTemplate_83DA9AC = +{ + .tileTag = 10251, + .paletteTag = 10251, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA99C, + .callback = sub_80DC2B0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA9C4[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 120), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA9DC[] = +{ + gSpriteAffineAnim_83DA9C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA9E0 = +{ + .tileTag = 10267, + .paletteTag = 10267, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA9DC, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DA9F8[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10), + AFFINEANIMCMD_LOOP(4), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5), + AFFINEANIMCMD_LOOP(7), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAA50[] = +{ + AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAA60[] = +{ + gSpriteAffineAnim_83DA9F8, + gSpriteAffineAnim_83DAA50, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAA68 = +{ + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DAA60, + .callback = sub_80DC700, +}; void sub_80DB74C(struct Sprite *sprite) { @@ -254,7 +644,7 @@ void sub_80DBB70(struct Sprite *sprite) static void sub_80DBC00(struct Sprite *sprite) { sprite->oam.affineMode = 1; - sprite->affineAnims = gUnknown_083DA888; + sprite->affineAnims = gSpriteAffineAnimTable_083DA888; sprite->data[0] = 0; InitSpriteAffineAnim(sprite); sprite->callback = sub_80DBC34; @@ -287,7 +677,7 @@ void sub_80DBC94(u8 taskId) struct Task *task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); task->data[0] = spriteId; - sub_80798F4(task, spriteId, &gUnknown_083DA8A4); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_083DA8A4); task->func = sub_80DBCD0; } @@ -308,7 +698,7 @@ void sub_80DBCFC(u8 taskId) task->data[2] = 0; task->data[3] = GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER ? 4 : 8; - sub_80798F4(task, task->data[0], &gUnknown_083DA8C4); + sub_80798F4(task, task->data[0], &gSpriteAffineAnim_083DA8C4); task->func = sub_80DBD58; } diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c index b38233e3c..421304be8 100644 --- a/src/battle/anim/rain.c +++ b/src/battle/anim/rain.c @@ -5,13 +5,44 @@ #include "task.h" extern s16 gBattleAnimArgs[8]; -extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; -static void MoveAnimRaindrop(struct Sprite *); +void SetAnimRaindropCallback(struct Sprite *sprite); +static void MoveAnimRaindrop(struct Sprite *sprite); // rain (spawns and animates raindrops) // Used in Rain Dance and general rain animation. + const u8 gUnknown_3D7D8C[] = INCBIN_U8("graphics/unknown/unknown_3D7D8C.4bpp"); + const u8 gUnknown_3D810C[] = INCBIN_U8("graphics/unknown/unknown_3D810C.bin"); + + const union AnimCmd gSpriteAnim_83D910C[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D912C[] = +{ + gSpriteAnim_83D910C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9130 = +{ + .tileTag = 10115, + .paletteTag = 10115, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83D912C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SetAnimRaindropCallback, +}; + void CreateAnimRaindrops(u8 taskId) { if (gTasks[taskId].data[0] == 0) @@ -27,7 +58,7 @@ void CreateAnimRaindrops(u8 taskId) { u8 x = Random() % 240; u8 y = Random() % 80; - CreateSprite(gSpriteTemplate_83D9130, x, y, 4); + CreateSprite(&gSpriteTemplate_83D9130, x, y, 4); } if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c index b317cdaed..024728ecc 100644 --- a/src/battle/anim/ring.c +++ b/src/battle/anim/ring.c @@ -12,11 +12,201 @@ extern u8 gAnimBankTarget; extern u8 gBankSpriteIds[]; +void sub_80D0FD8(struct Sprite* sprite); +void sub_80D10B8(struct Sprite* sprite); +void sub_80D1318(struct Sprite* sprite); +void sub_80D1368(struct Sprite* sprite); static void sub_80D1098(struct Sprite* sprite); +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); // ring (a ring that stretches outward from the Pokemon.) // Used in Aromatherapy and Heal Bell. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77F8 = +{ + .tileTag = 10197, + .paletteTag = 10197, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8079534, +}; + +const union AnimCmd gSpriteAnim_83D7810[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7824[] = +{ + gSpriteAnim_83D7810, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7828 = +{ + .tileTag = 10198, + .paletteTag = 10198, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7824, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7840[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7860[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7870[] = +{ + AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8), + AFFINEANIMCMD_LOOP(1), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D78B0[] = +{ + gSpriteAffineAnim_83D7840, + gSpriteAffineAnim_83D7860, + gSpriteAffineAnim_83D7870, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D78BC = +{ + .tileTag = 10202, + .paletteTag = 10202, + .oam = &gOamData_837E114, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D78B0, + .callback = sub_80D1368, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D78D4[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D78EC[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7904[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D791C[] = +{ + gSpriteAffineAnim_83D78D4, + gSpriteAffineAnim_83D78EC, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7924[] = +{ + gSpriteAffineAnim_83D7904, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7928 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7940[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7958[] = +{ + gSpriteAffineAnim_83D7940, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D795C = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7958, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7974 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80D0FD8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D798C = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7924, + .callback = sub_80D10B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D79A4 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80D1318, +}; + void sub_80D0FD8(struct Sprite* sprite) { u8 bank = 0; @@ -154,3 +344,105 @@ void sub_80D1318(struct Sprite* sprite) sprite->callback = sub_80793C4; sub_80793C4(sprite); } + +void sub_80D1368(struct Sprite* sprite) +{ + s16 r1; + InitAnimSpritePos(sprite, 0); + r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_80D13AC; +} + +static void sub_80D13AC(struct Sprite* sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; + add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[1] += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80D1424; + } +} + +static void sub_80D1424(struct Sprite* sprite) +{ + if (sprite->data[0]++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80D144C; + } +} + +static void sub_80D144C(struct Sprite* sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[0] = 0; + if (sprite->data[7] == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_80D14C4; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_80D154C; + } + } +} + +static void sub_80D14C4(struct Sprite* sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data[0] == 9) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data[0]; + sprite->callback = sub_80D1504; + } +} + +static void sub_80D1504(struct Sprite* sprite) +{ + if (sprite->data[1]++ % 3 == 0) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + if (sprite->data[0] == 0) + sprite->callback = sub_80D154C; + } +} + +static void sub_80D154C(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data[7] == 0) + sprite->callback = sub_80D158C; + else + sprite->callback = DestroyAnimSprite; + } +} + +static void sub_80D158C(struct Sprite* sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c index 73be7c42b..595df3168 100644 --- a/src/battle/anim/rock.c +++ b/src/battle/anim/rock.c @@ -20,11 +20,20 @@ extern u16 gBattle_BG3_Y; extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[]; extern const u8 gBattleAnimBackgroundImage_SandstormBrew[]; extern const u16 gBattleAnimSpritePalette_261[]; -extern const struct SpriteTemplate gSpriteTemplate_83DAD78; -extern const struct SpriteTemplate gSpriteTemplate_83DAD90; - -extern const struct SubspriteTable gUnknown_083DAD10; - +extern const union AnimCmd *const gSpriteAnimTable_83D91F0[]; +extern const union AnimCmd *const gSpriteAnimTable_83D95E0[]; + +extern void AnimMoveTwisterParticle(struct Sprite *sprite); + +void sub_80DCE9C(struct Sprite *sprite); +void sub_80DCF60(struct Sprite *sprite); +void sub_80DCFE4(struct Sprite *sprite); +void sub_80DD3AC(struct Sprite *sprite); +void sub_80DD490(struct Sprite *sprite); +void sub_80DD87C(struct Sprite *sprite); +void sub_80DD8E8(struct Sprite *sprite); +void sub_80DD978(struct Sprite *sprite); +void sub_80DD9A4(struct Sprite *sprite); static void sub_80DCF1C(struct Sprite *sprite); static void sub_80DD02C(struct Sprite *sprite); static void sub_80DD190(u8 taskId); @@ -34,6 +43,280 @@ static u8 sub_80DD8BC(void); static void sub_80DD928(struct Sprite *sprite); static void sub_80DD9FC(struct Sprite *sprite); +const union AnimCmd gSpriteAnim_83DAC28[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAC30[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAC38[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DAC40[] = +{ + gSpriteAnim_83DAC28, + gSpriteAnim_83DAC30, + gSpriteAnim_83DAC38, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC4C = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAC40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DCE9C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC64 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAC40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DCF60, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC7C = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DCFE4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DAC94[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5), + AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DACB4[] = +{ + gSpriteAffineAnim_83DAC94, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACB8 = +{ + .tileTag = 10149, + .paletteTag = 10149, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D91F0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DACB4, + .callback = sub_80DCFE4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACD0 = +{ + .tileTag = 10029, + .paletteTag = 10029, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D95E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DCFE4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 = +{ + .tileTag = 10261, + .paletteTag = 10261, + .oam = &gOamData_837DF54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DD3AC, +}; + +const struct Subsprite gSubspriteTable_83DAD00[] = +{ + {.x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 0, .priority = 1}, + {.x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 8, .priority = 1}, +}; + +const struct SubspriteTable gSubspriteTables_83DAD10[] = +{ + {ARRAY_COUNT(gSubspriteTable_83DAD00), gSubspriteTable_83DAD00}, +}; + +const union AnimCmd gSpriteAnim_83DAD18[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAD20[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAD28[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAD30[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAD38[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83DAD40[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83DAD48[] = +{ + gSpriteAnim_83DAD18, + gSpriteAnim_83DAD20, +}; + +const union AnimCmd *const gSpriteAnimTable_83DAD50[] = +{ + gSpriteAnim_83DAD28, + gSpriteAnim_83DAD30, +}; + +const union AnimCmd *const gSpriteAnimTable_83DAD58[] = +{ + gSpriteAnim_83DAD38, + gSpriteAnim_83DAD40, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAD48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DD490, +}; + +const struct SpriteTemplate gSpriteTemplate_83DAD78 = +{ + .tileTag = 10074, + .paletteTag = 10074, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DD87C, +}; + +const struct SpriteTemplate gSpriteTemplate_83DAD90 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DD87C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADA8 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAD48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DD8E8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DADC0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83DADD0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DADE0[] = +{ + gSpriteAffineAnim_83DADC0, + gSpriteAffineAnim_83DADD0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADE8 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DAD48, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DADE0, + .callback = sub_80DD978, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE00 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DAD48, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DADE0, + .callback = sub_80DD9A4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE18 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83DAD58, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DADE0, + .callback = AnimMoveTwisterParticle, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE30 = +{ + .tileTag = 10058, + .paletteTag = 10058, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DAD50, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DADE0, + .callback = sub_807A9BC, +}; void sub_80DCE9C(struct Sprite *sprite) { @@ -244,7 +527,7 @@ void sub_80DD3AC(struct Sprite *sprite) } sprite->pos1.y = gBattleAnimArgs[0]; - SetSubspriteTables(sprite, &gUnknown_083DAD10); + SetSubspriteTables(sprite, gSubspriteTables_83DAD10); sprite->data[1] = gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[2]; sprite->data[0]++; diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c index 30c2d9652..b9b76c584 100644 --- a/src/battle/anim/roots.c +++ b/src/battle/anim/roots.c @@ -6,14 +6,79 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; - extern s16 gUnknown_03000728[]; +void sub_80CB59C(struct Sprite* sprite); +void sub_80CB620(struct Sprite *sprite); static void sub_80CB710(struct Sprite* sprite); // roots // Used by Ingrain and Frenzy Plant. +const union AnimCmd gSpriteAnim_83D6600[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_FRAME(48, 7), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6614[] = +{ + ANIMCMD_FRAME(0, 7, .hFlip = TRUE), + ANIMCMD_FRAME(16, 7, .hFlip = TRUE), + ANIMCMD_FRAME(32, 7, .hFlip = TRUE), + ANIMCMD_FRAME(48, 7, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6628[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(16, 7), + ANIMCMD_FRAME(32, 7), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6638[] = +{ + ANIMCMD_FRAME(0, 7, .hFlip = TRUE), + ANIMCMD_FRAME(16, 7, .hFlip = TRUE), + ANIMCMD_FRAME(32, 7, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6648[] = +{ + gSpriteAnim_83D6600, + gSpriteAnim_83D6614, + gSpriteAnim_83D6628, + gSpriteAnim_83D6638, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6658 = +{ + .tileTag = 10223, + .paletteTag = 10223, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6648, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CB59C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6670 = +{ + .tileTag = 10223, + .paletteTag = 10223, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6648, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CB620, +}; + void sub_80CB59C(struct Sprite* sprite) { if (!sprite->data[0]) @@ -57,7 +122,7 @@ void sub_80CB620(struct Sprite *sprite) gUnknown_03000728[3] = e2; } -void sub_80CB710(struct Sprite* sprite) +static void sub_80CB710(struct Sprite* sprite) { if (++sprite->data[0] > (sprite->data[2] - 10)) sprite->invisible = sprite->data[0] % 2; diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c index abd54cef3..05859d31c 100644 --- a/src/battle/anim/scan.c +++ b/src/battle/anim/scan.c @@ -9,8 +9,8 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern s8 gUnknown_083D6DDC[4][2]; - +void sub_80CD3E0(struct Sprite* sprite); +void sub_80CD6CC(struct Sprite* sprite); static void sub_80CD408(struct Sprite* sprite); static void sub_80CD4B8(struct Sprite* sprite); static void sub_80CD4EC(struct Sprite* sprite); @@ -21,6 +21,36 @@ static void sub_80CD67C(struct Sprite* sprite); // scan // Used by Lock-On. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DAC = +{ + .tileTag = 10014, + .paletteTag = 10014, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD3E0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DC4 = +{ + .tileTag = 10014, + .paletteTag = 10014, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD6CC, +}; + +const s8 gUnknown_083D6DDC[][2] = +{ + { 64, 64}, + { 0, -64}, + {-64, 64}, + { 32, -32}, +}; + void sub_80CD3E0(struct Sprite* sprite) { sprite->pos1.x -= 32; @@ -30,7 +60,7 @@ void sub_80CD3E0(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CD408); } -void sub_80CD408(struct Sprite* sprite) +static void sub_80CD408(struct Sprite* sprite) { switch (sprite->data[5] & 1) { @@ -57,7 +87,7 @@ void sub_80CD408(struct Sprite* sprite) sprite->data[5] ^= 1; } -void sub_80CD4B8(struct Sprite* sprite) +static void sub_80CD4B8(struct Sprite* sprite) { if ((sprite->data[5] >> 8) == 4) { @@ -71,7 +101,7 @@ void sub_80CD4B8(struct Sprite* sprite) } } -void sub_80CD4EC(struct Sprite* sprite) +static void sub_80CD4EC(struct Sprite* sprite) { s16 a; s16 b; @@ -117,7 +147,7 @@ void sub_80CD4EC(struct Sprite* sprite) } } -void sub_80CD5A8(struct Sprite* sprite) +static void sub_80CD5A8(struct Sprite* sprite) { if (sprite->data[2] == 0) { @@ -144,7 +174,7 @@ void sub_80CD5A8(struct Sprite* sprite) } } -void sub_80CD654(struct Sprite* sprite) +static void sub_80CD654(struct Sprite* sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -154,7 +184,7 @@ void sub_80CD654(struct Sprite* sprite) } } -void sub_80CD67C(struct Sprite* sprite) +static void sub_80CD67C(struct Sprite* sprite) { if (sprite->data[0] % 3 == 0) { diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c index d7c56e7a8..11eebada0 100644 --- a/src/battle/anim/seed.c +++ b/src/battle/anim/seed.c @@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void AnimLeechSeed(struct Sprite* sprite); static void AnimLeechSeedStep(struct Sprite* sprite); static void AnimLeechSeedSprouts(struct Sprite* sprite); +const union AnimCmd gSpriteAnim_83D63AC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D63B4[] = +{ + ANIMCMD_FRAME(4, 7), + ANIMCMD_FRAME(8, 7), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D63C0[] = +{ + gSpriteAnim_83D63AC, + gSpriteAnim_83D63B4, +}; + +const struct SpriteTemplate gLeechSeedSpriteTemplate = +{ + .tileTag = 10006, + .paletteTag = 10006, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D63C0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimLeechSeed, +}; + // seed (sprouts a sapling from a seed.) // Used by Leech Seed. // arg 0: initial x pixel offset diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c index 323df4ab2..d858f5100 100644 --- a/src/battle/anim/shield.c +++ b/src/battle/anim/shield.c @@ -9,11 +9,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CCD24(struct Sprite* sprite); static void sub_80CCE0C(struct Sprite* sprite); // shield // Used by Protect. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6BE8 = +{ + .tileTag = 10280, + .paletteTag = 10280, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CCD24, +}; + void sub_80CCD24(struct Sprite* sprite) { if (IsContest() != 0) @@ -36,7 +48,7 @@ void sub_80CCD24(struct Sprite* sprite) sprite->callback = sub_80CCE0C; } -void sub_80CCE0C(struct Sprite* sprite) +static void sub_80CCE0C(struct Sprite* sprite) { int a; int i; diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c index 9e7bea1e4..78b430094 100644 --- a/src/battle/anim/shimmer.c +++ b/src/battle/anim/shimmer.c @@ -9,11 +9,20 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern u16 gUnknown_083D6984[]; - // shimmer // Used by Magical Leaf. +static const u16 sMagicalLeafBlendColors[] = +{ + RGB(31, 0, 0), + RGB(31, 19, 0), + RGB(31, 31, 0), + RGB(0, 31, 0), + RGB(5, 14, 31), + RGB(22, 10, 31), + RGB(22, 21, 31), +}; + void sub_80CC5F8(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -29,8 +38,8 @@ void sub_80CC5F8(u8 taskId) if (task->data[9] >= 0) { task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[8], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]); task->data[10]++; if (task->data[10] == 17) { diff --git a/src/battle/anim/shock.c b/src/battle/anim/shock.c index 19e4d0fb2..5b82d9319 100644 --- a/src/battle/anim/shock.c +++ b/src/battle/anim/shock.c @@ -8,11 +8,62 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern struct OamMatrix gOamMatrices[]; +void sub_80D6294(struct Sprite *sprite); +void sub_80D6328(struct Sprite *sprite); extern void sub_80DA48C(struct Sprite *); // shock (moves the little electricity lines) // Used in Shock. +const union AnimCmd gSpriteAnim_83D9824[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9840[] = +{ + gSpriteAnim_83D9824, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9844 = +{ + .tileTag = 10079, + .paletteTag = 10079, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9840, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D6294, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D985C = +{ + .tileTag = 10011, + .paletteTag = 10011, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D6328, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9874 = +{ + .tileTag = 10171, + .paletteTag = 10171, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + void sub_80D6294(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2); diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c index 68a1b81ef..f71bc6eaa 100644 --- a/src/battle/anim/slash.c +++ b/src/battle/anim/slash.c @@ -8,6 +8,9 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CDD74(struct Sprite* sprite); +void sub_80CDDDC(struct Sprite* sprite); +void sub_80CDE24(struct Sprite* sprite); static void sub_80CDE78(struct Sprite* sprite); static void sub_80CDEB0(struct Sprite* sprite); static void sub_80CDEC0(struct Sprite* sprite); @@ -15,6 +18,60 @@ static void sub_80CDEC0(struct Sprite* sprite); // slash (a cutting animation) // Used in Slash and False Swipe. +const union AnimCmd gSpriteAnim_83D6E14[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6E28[] = +{ + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6E30[] = +{ + gSpriteAnim_83D6E14, + gSpriteAnim_83D6E28, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E38 = +{ + .tileTag = 10183, + .paletteTag = 10183, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6E30, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CDD74, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E50 = +{ + .tileTag = 10286, + .paletteTag = 10286, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6E30, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CDDDC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E68 = +{ + .tileTag = 10286, + .paletteTag = 10286, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6E30, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CDE24, +}; + void sub_80CDD74(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) @@ -52,7 +109,7 @@ void sub_80CDE24(struct Sprite* sprite) sprite->callback = sub_80CDEC0; } -void sub_80CDE78(struct Sprite* sprite) +static void sub_80CDE78(struct Sprite* sprite) { if (++sprite->data[0] > 8) { @@ -64,14 +121,14 @@ void sub_80CDE78(struct Sprite* sprite) } } -void sub_80CDEB0(struct Sprite* sprite) +static void sub_80CDEB0(struct Sprite* sprite) { sprite->data[0] = 0; sprite->data[1] = 0; sprite->callback = sub_80CDEC0; } -void sub_80CDEC0(struct Sprite* sprite) +static void sub_80CDEC0(struct Sprite* sprite) { if (++sprite->data[0] > 1) { diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c index cc3518395..40b984be7 100644 --- a/src/battle/anim/sleep.c +++ b/src/battle/anim/sleep.c @@ -8,11 +8,68 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CD328(struct Sprite* sprite); static void sub_80CD394(struct Sprite* sprite); // sleep (the "ZZZ" graphical effect) // Used by Rest and the sleep turn when the Pokemon is still asleep. +const union AnimCmd gSpriteAnim_83D6D20[] = +{ + ANIMCMD_FRAME(0, 40), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6D28[] = +{ + gSpriteAnim_83D6D20, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6D2C[] = +{ + AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6D44[] = +{ + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_LOOP(10), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6D5C[] = +{ + AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6D74[] = +{ + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24), + AFFINEANIMCMD_LOOP(10), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6D8C[] = +{ + gSpriteAffineAnim_83D6D2C, + gSpriteAffineAnim_83D6D5C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6D94 = +{ + .tileTag = 10228, + .paletteTag = 10228, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D6D28, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6D8C, + .callback = sub_80CD328, +}; + void sub_80CD328(struct Sprite* sprite) { sub_8078650(sprite); @@ -33,7 +90,7 @@ void sub_80CD328(struct Sprite* sprite) sprite->callback = sub_80CD394; } -void sub_80CD394(struct Sprite* sprite) +static void sub_80CD394(struct Sprite* sprite) { sprite->pos2.y = -(sprite->data[0] / 0x28); sprite->pos2.x = sprite->data[4] / 10; diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c index 8e7f35f46..4da414cbf 100644 --- a/src/battle/anim/slice.c +++ b/src/battle/anim/slice.c @@ -8,8 +8,46 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void AnimCuttingSlice(struct Sprite* sprite); +void sub_80CC9BC(struct Sprite* sprite); static void AnimSliceStep(struct Sprite* sprite); +const union AnimCmd gSpriteAnim_83D6B10[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6B24[] = +{ + gSpriteAnim_83D6B10, +}; + +const struct SpriteTemplate gCuttingSliceSpriteTemplate = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D6B24, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6B40 = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D6B24, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC9BC, +}; + // 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 diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c deleted file mode 100644 index 7ab873e63..000000000 --- a/src/battle/anim/smoke.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -// smoke (smoke on the ground around a sprite.) -// Used in Extremespeed. - -void sub_80D1A70(struct Sprite* sprite) -{ - sprite->invisible = gTasks[sprite->data[0]].data[5]; - if (sprite->animEnded) - { - gTasks[sprite->data[0]].data[sprite->data[1]]--; - DestroySprite(sprite); - } -} diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c index a882be73c..0494c42ed 100644 --- a/src/battle/anim/sonic.c +++ b/src/battle/anim/sonic.c @@ -3,11 +3,114 @@ #include "trig.h" #include "battle_anim.h" #include "sound.h" +#include "battle.h" #include "battle_anim_80CA710.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u8 gBanksBySide[]; +extern u16 gBattleTypeFlags; + +extern void sub_80D4CA4(struct Sprite *sprite); + +void AnimSonicBoomProjectile(struct Sprite* sprite); +void sub_80CF8B8(struct Sprite* sprite); + +const struct SpriteTemplate gSonicBoomSpriteTemplate = +{ + .tileTag = 10003, + .paletteTag = 10003, + .oam = &gOamData_837E134, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSonicBoomProjectile, +}; + +const struct SpriteTemplate gSpriteTemplate_83D74BC = +{ + .tileTag = 10003, + .paletteTag = 10003, + .oam = &gOamData_837E074, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF8B8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D74D4[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D74EC[] = +{ + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[] = +{ + gSpriteAffineAnim_83D74D4, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7530[] = +{ + gSpriteAffineAnim_83D74EC, +}; + +const struct SpriteTemplate gSupersonicWaveSpriteTemplate = +{ + .tileTag = 10163, + .paletteTag = 10163, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gScreechWaveSpriteTemplate = +{ + .tileTag = 10164, + .paletteTag = 10164, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7564 = +{ + .tileTag = 10260, + .paletteTag = 10260, + .oam = &gOamData_837E03C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D757C = +{ + .tileTag = 10288, + .paletteTag = 10288, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7530, + .callback = sub_80D4CA4, +}; // Moves a projectile towards the target mon. The sprite is rotated to be pointing // in the same direction it's moving. @@ -138,3 +241,137 @@ void sub_80CF8B8(struct Sprite* sprite) sprite->callback = sub_80CF814; } } + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (IsContest()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gAnimBankTarget] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2)) + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2); + } + else + { + sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1); + } + + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + + gTasks[taskId].func = sub_80CFA20; +} diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c deleted file mode 100644 index dc5d60efa..000000000 --- a/src/battle/anim/sonic_task.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_anim_80CA710.h" -#include "battle.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBanksBySide[]; -extern u16 gBattleTypeFlags; -extern struct SpriteTemplate gSpriteTemplate_83D74BC; - -// sonic_task (the task functions for the "sonic" effect.) -// Used in Air Cutter and Sonic Boom. - -void sub_80CF9F8(u8 taskId) -{ - if (gTasks[taskId].data[1] == 0) - DestroyAnimVisualTask(taskId); -} - -void sub_80CFA20(u8 taskId) -{ - if (gTasks[taskId].data[0]-- <= 0) - { - u8 spriteId; - struct Sprite* sprite; - spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); - sprite = &gSprites[spriteId]; - switch (gTasks[taskId].data[4]) - { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; - } - - sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; - sprite->data[7] = taskId; - gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; - gTasks[taskId].data[0] = gTasks[taskId].data[3]; - gTasks[taskId].data[1]++; - PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F)); - if (gTasks[taskId].data[1] > 2) - gTasks[taskId].func = sub_80CF9F8; - } -} - -void sub_80CFB04(u8 taskId) -{ - s16 r9 = 0; - s16 r6 = 0; - s16 sp1 = 0; - s16 sp2 = 0; - s16 r4; - - if (IsContest()) - { - gTasks[taskId].data[4] = 2; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - else - { - if ((gBanksBySide[gAnimBankTarget] & 1) == 0) - { - gTasks[taskId].data[4] = 1; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - } - r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0); - r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2)) - { - SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2); - } - else - { - sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0); - sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1); - } - - sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; - sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; - if (sp1 >= r6) - r4 = sp1 - r6; - else - r4 = r6 - sp1; - - gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); - gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); - gTasks[taskId].data[7] = gBattleAnimArgs[2]; - if (sp2 >= r9) - { - r4 = sp2 - r9; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; - } - else - { - r4 = r9 - sp2; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; - } - - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - if (gBattleAnimArgs[4] & 0x80) - { - gBattleAnimArgs[4] ^= 0x80; - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - else - { - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - - if (gTasks[taskId].data[2] < 3) - gTasks[taskId].data[2] = 3; - - gTasks[taskId].func = sub_80CFA20; -} diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c deleted file mode 100644 index 1ce3aa0d0..000000000 --- a/src/battle/anim/spin_finger.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CF088(struct Sprite* sprite); -static void sub_80CF138(struct Sprite* sprite); -static void sub_80CF158(struct Sprite* sprite); - -// spin_finger -// Used in Follow Me. - -void sub_80CF0BC(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sprite->pos1.x = GetBattlerSpriteCoord(bank, 0); - sprite->pos1.y = sub_807A100(bank, 2); - if (sprite->pos1.y <= 9) - sprite->pos1.y = 10; - - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->data[2] = sprite->subpriority; - sprite->data[3] = sprite->subpriority + 4; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF138); - sprite->callback = sub_80785E4; -} - -void sub_80CF138(struct Sprite* sprite) -{ - if (++sprite->data[4] > 12) - sprite->callback = sub_80CF158; -} - -void sub_80CF158(struct Sprite* sprite) -{ - s16 temp; - s16 temp2; - sprite->data[1] += 4; - if (sprite->data[1] > 0xFE) - { - if (--sprite->data[0] == 0) - { - sprite->pos2.x = 0; - sprite->callback = sub_80CF088; - return; - } - else - { - sprite->data[1] &= 0xFF; - } - } - - if (sprite->data[1] > 0x4F) - sprite->subpriority = sprite->data[3]; - - if (sprite->data[1] > 0x9F) - sprite->subpriority = sprite->data[2]; - - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); -} diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c index 36fcb788c..792d7e0eb 100644 --- a/src/battle/anim/spit.c +++ b/src/battle/anim/spit.c @@ -8,10 +8,35 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D28AC(struct Sprite* sprite); + // spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.) // Used in Spit Up. -void sub_80D287C(struct Sprite* sprite) +const union AffineAnimCmd gSpriteAffineAnim_83D7B44[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B5C[] = +{ + gSpriteAffineAnim_83D7B44, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B60 = +{ + .tileTag = 10237, + .paletteTag = 10237, + .oam = &gOamData_837DFE4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B5C, + .callback = sub_80D28AC, +}; + +static void sub_80D287C(struct Sprite* sprite) { sprite->pos2.x += sprite->data[0]; sprite->pos2.y += sprite->data[1]; diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c index d6caaf0f6..c01748953 100644 --- a/src/battle/anim/splash.c +++ b/src/battle/anim/splash.c @@ -8,13 +8,19 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D76F4; - static void sub_80D07AC(u8 taskId); // splash (splash effect of hopping up and down) // Used in Splash, Mud Sport, and Sketch. +const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] = +{ + AFFINEANIMCMD_FRAME(-6, 4, 0, 8), + AFFINEANIMCMD_FRAME(10, -10, 0, 8), + AFFINEANIMCMD_FRAME(-4, 6, 0, 8), + AFFINEANIMCMD_END, +}; + void sub_80D074C(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -30,7 +36,7 @@ void sub_80D074C(u8 taskId) task->data[2] = gBattleAnimArgs[1]; task->data[3] = 0; task->data[4] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D76F4); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4); task->func = sub_80D07AC; } } @@ -78,7 +84,7 @@ void sub_80D07AC(u8 taskId) } else { - sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + sub_80798F4(task, task->data[0], &gSpriteAffineAnim_83D76F4); task->data[1] = 0; } } diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c index 95462bd9f..b23c7ac9e 100644 --- a/src/battle/anim/startle.c +++ b/src/battle/anim/startle.c @@ -8,18 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D7A98; - // startle (the pokemon sprite shrivels upward and restores after a brief time.) // Used in Fake Out, Trick, and Astonish. +const union AffineAnimCmd gSpriteAffineAnim_83D7A98[] = +{ + AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A), + AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A), + AFFINEANIMCMD_END, +}; + // opponent void sub_80D1E38(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(1); if (++gTasks[taskId].data[0] == 1) { - sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gUnknown_083D7A98); + sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gSpriteAffineAnim_83D7A98); gSprites[spriteId].pos2.x = 4; } else @@ -40,7 +45,7 @@ void sub_80D1EC8(u8 taskId) u8 spriteId = GetAnimBattlerSpriteId(0); if (++gTasks[taskId].data[0] == 1) { - sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gUnknown_083D7A98); + sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gSpriteAffineAnim_83D7A98); gSprites[spriteId].pos2.x = 4; } else diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c index 775485a79..79dd833a9 100644 --- a/src/battle/anim/strike.c +++ b/src/battle/anim/strike.c @@ -8,11 +8,52 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CE670(struct Sprite* sprite); static void sub_80CE798(struct Sprite* sprite); // strike (A red strike towards the opponent.) // Used in Horn Attack, Fury Attack, and Horn Drill. +const union AnimCmd gSpriteAnim_83D7010[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7034[] = +{ + gSpriteAnim_83D7010, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7038 = +{ + .tileTag = 10031, + .paletteTag = 10031, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7034, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7050 = +{ + .tileTag = 10020, + .paletteTag = 10020, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CE670, +}; + void sub_80CE670(struct Sprite* sprite) { if (gBattleAnimArgs[2] <= 1) @@ -60,7 +101,7 @@ void sub_80CE670(struct Sprite* sprite) sprite->callback = sub_80CE798; } -void sub_80CE798(struct Sprite* sprite) +static void sub_80CE798(struct Sprite* sprite) { sprite->data[2] += sprite->data[3]; sprite->data[4] += sprite->data[5]; diff --git a/src/battle/anim/struggle.c b/src/battle/anim/struggle.c index 6a1355e1b..2bcf3727e 100644 --- a/src/battle/anim/struggle.c +++ b/src/battle/anim/struggle.c @@ -7,8 +7,44 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2C38(struct Sprite *sprite); static void sub_80D2CC4(struct Sprite *); +const union AnimCmd gSpriteAnim_83D7C60[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7C74[] = +{ + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(32, 8, .hFlip = TRUE), + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7C88[] = +{ + gSpriteAnim_83D7C60, + gSpriteAnim_83D7C74, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C90 = +{ + .tileTag = 10215, + .paletteTag = 10215, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7C88, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2C38, +}; + void sub_80D2C38(struct Sprite *sprite) { if (gBattleAnimArgs[2] == 0) diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c index 88112c74a..7efc85b37 100644 --- a/src/battle/anim/sunlight.c +++ b/src/battle/anim/sunlight.c @@ -2,9 +2,34 @@ #include "battle_anim.h" #include "rom_8077ABC.h" +void sub_80D517C(struct Sprite *sprite); + // sunlight (creates sunlight orbs) // Used in Sunny Day +const union AffineAnimCmd gSpriteAffineAnim_83D9594[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0x2, 0x2, 10, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D95AC[] = +{ + gSpriteAffineAnim_83D9594, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D95B0 = +{ + .tileTag = 10157, + .paletteTag = 10157, + .oam = &gOamData_837E0B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D95AC, + .callback = sub_80D517C, +}; + void sub_80D517C(struct Sprite *sprite) { sprite->pos1.x = 0; diff --git a/src/battle/anim/swipe.c b/src/battle/anim/swipe.c index 922b11a5f..df7a0e91f 100644 --- a/src/battle/anim/swipe.c +++ b/src/battle/anim/swipe.c @@ -4,6 +4,43 @@ extern s16 gBattleAnimArgs[8]; +void sub_80D2BE8(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D7C18[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7C2C[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7C40[] = +{ + gSpriteAnim_83D7C18, + gSpriteAnim_83D7C2C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C48 = +{ + .tileTag = 10222, + .paletteTag = 10222, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7C40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2BE8, +}; + void sub_80D2BE8(struct Sprite *sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c index c4082b6aa..fcb1d9fc3 100644 --- a/src/battle/anim/switch.c +++ b/src/battle/anim/switch.c @@ -7,9 +7,11 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AffineAnimCmd gSpriteAffineAnim_83D66BC[]; +extern const union AffineAnimCmd gSpriteAffineAnim_83D66DC[]; +extern const union AnimCmd *const gSpriteAnimTable_83D66B8[]; -extern s8 gUnknown_083D680C[11][3]; - +void sub_80CBBF0(struct Sprite* sprite); static void sub_80CBC8C(struct Sprite* sprite); static void sub_80CBCF8(struct Sprite* sprite); static void sub_80CBDB0(struct Sprite* sprite); @@ -17,6 +19,56 @@ static void sub_80CBDB0(struct Sprite* sprite); // switch (makes an item and circles it from side to side on the field.) // Used in Trick. + +const union AffineAnimCmd gSpriteAffineAnim_83D6794[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 3), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D67A4[] = { + AFFINEANIMCMD_FRAME(0, -10, 0, 3), + AFFINEANIMCMD_FRAME(0, -6, 0, 3), + AFFINEANIMCMD_FRAME(0, -2, 0, 3), + AFFINEANIMCMD_FRAME(0, 0, 0, 3), + AFFINEANIMCMD_FRAME(0, 2, 0, 3), + AFFINEANIMCMD_FRAME(0, 6, 0, 3), + AFFINEANIMCMD_FRAME(0, 10, 0, 3), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D67E4[] = { + gSpriteAffineAnim_83D6794, + gSpriteAffineAnim_83D67A4, + gSpriteAffineAnim_83D66BC, + gSpriteAffineAnim_83D66DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D67F4 = +{ + .tileTag = 10224, + .paletteTag = 10224, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D66B8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D67E4, + .callback = sub_80CBBF0, +}; + +const s8 gUnknown_083D680C[][3] = +{ + {5, 24, 1}, + {0, 4, 0}, + {8, 16, -1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 2, 0}, + {8, 16, 1}, + {0, 16, 0}, + {0, 0, 127}, +}; + void sub_80CBBF0(struct Sprite* sprite) { int a; @@ -27,7 +79,7 @@ void sub_80CBBF0(struct Sprite* sprite) if (!IsContest()) { sprite->data[1] = gBattleAnimArgs[1]; - sprite->pos1.x = 0x78; + sprite->pos1.x = 120; } else { @@ -38,13 +90,13 @@ void sub_80CBBF0(struct Sprite* sprite) b = a; sprite->data[1] = a - ((b >> 8) << 8); - sprite->pos1.x = 0x46; + sprite->pos1.x = 70; } sprite->pos1.y = gBattleAnimArgs[0]; sprite->data[2] = gBattleAnimArgs[0]; sprite->data[4] = 20; - sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.x = Cos(sprite->data[1], 60); sprite->pos2.y = Sin(sprite->data[1], 20); sprite->callback = sub_80CBC8C; if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) @@ -54,7 +106,7 @@ void sub_80CBBF0(struct Sprite* sprite) } } -void sub_80CBC8C(struct Sprite* sprite) +static void sub_80CBC8C(struct Sprite* sprite) { switch (sprite->data[3]) { @@ -84,7 +136,7 @@ void sub_80CBC8C(struct Sprite* sprite) } } -void sub_80CBCF8(struct Sprite* sprite) +static void sub_80CBCF8(struct Sprite* sprite) { if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) { @@ -113,12 +165,12 @@ void sub_80CBCF8(struct Sprite* sprite) } } - sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.x = Cos(sprite->data[1], 60); sprite->pos2.y = Sin(sprite->data[1], 20); } } -void sub_80CBDB0(struct Sprite* sprite) +static void sub_80CBDB0(struct Sprite* sprite) { if (sprite->data[0] > 20) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c index 3367cca07..7fb410224 100644 --- a/src/battle/anim/sword.c +++ b/src/battle/anim/sword.c @@ -8,11 +8,36 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF690(struct Sprite* sprite); static void sub_80CF6B4(struct Sprite* sprite); // sword (sword appears and floats upward.) // Used in Swords Dance. +const union AffineAnimCmd gSpriteAffineAnim_83D7468[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7488[] = +{ + gSpriteAffineAnim_83D7468, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D748C = +{ + .tileTag = 10005, + .paletteTag = 10005, + .oam = &gOamData_837E0FC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7488, + .callback = sub_80CF690, +}; + void sub_80CF690(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); @@ -20,7 +45,7 @@ void sub_80CF690(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF6B4); } -void sub_80CF6B4(struct Sprite* sprite) +static void sub_80CF6B4(struct Sprite* sprite) { sprite->data[0] = 6; sprite->data[2] = sprite->pos1.x; diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c deleted file mode 100644 index c512f8cf4..000000000 --- a/src/battle/anim/taunt_finger.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -static void sub_80CF228(struct Sprite* sprite); -static void sub_80CF264(struct Sprite* sprite); - -// taunt_finger -// Used in Taunt. - -void sub_80CF1C8(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sub_80CEF44(bank, sprite); - if (GetBattlerSide(bank) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 2; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data[0] = 3; - } - - sprite->callback = sub_80CF228; -} - -void sub_80CF228(struct Sprite* sprite) -{ - if (++sprite->data[1] > 10) - { - sprite->data[1] = 0; - StartSpriteAnim(sprite, sprite->data[0]); - StoreSpriteCallbackInData(sprite, sub_80CF264); - sprite->callback = sub_8078600; - } -} - -void sub_80CF264(struct Sprite* sprite) -{ - if (++sprite->data[1] > 5) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c index 4ef704f3a..55e2c21bb 100644 --- a/src/battle/anim/tendrils.c +++ b/src/battle/anim/tendrils.c @@ -7,12 +7,67 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CB25C(struct Sprite* sprite); static void sub_80CB298(struct Sprite* sprite); static void sub_80CB2D4(struct Sprite* sprite); // tendrils // Used by Constrict. +const union AnimCmd gSpriteAnim_83D6528[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D653C[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(96, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6550[] = +{ + gSpriteAnim_83D6528, + gSpriteAnim_83D653C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6558[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(-11, 0, 0, 6), + AFFINEANIMCMD_FRAME(11, 0, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6578[] = { + AFFINEANIMCMD_FRAME(-256, 256, 0, 0), + AFFINEANIMCMD_FRAME(11, 0, 0, 6), + AFFINEANIMCMD_FRAME(-11, 0, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6598[] = { + gSpriteAffineAnim_83D6558, + gSpriteAffineAnim_83D6578, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 = +{ + .tileTag = 10186, + .paletteTag = 10186, + .oam = &gOamData_837DFBC, + .anims = gSpriteAnimTable_83D6550, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6598, + .callback = sub_80CB25C, +}; + void sub_80CB25C(struct Sprite* sprite) { sub_8078764(sprite, 0); @@ -23,7 +78,7 @@ void sub_80CB25C(struct Sprite* sprite) sprite->callback = sub_80CB298; } -void sub_80CB298(struct Sprite* sprite) +static void sub_80CB298(struct Sprite* sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -34,7 +89,7 @@ void sub_80CB298(struct Sprite* sprite) } } -void sub_80CB2D4(struct Sprite* sprite) +static void sub_80CB2D4(struct Sprite* sprite) { GetAnimBattlerSpriteId(1); if (!sprite->data[2]) diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c index 5163cbfad..d39520dac 100644 --- a/src/battle/anim/thought.c +++ b/src/battle/anim/thought.c @@ -8,11 +8,67 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CEF9C(struct Sprite* sprite); static void sub_80CF008(struct Sprite* sprite); // thought (thought bubble) // Used in Metronome and Taunt. +const union AnimCmd gSpriteAnim_83D71C0[] = +{ + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71D4[] = +{ + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71E8[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71FC[] = +{ + ANIMCMD_FRAME(48, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7210[] = +{ + gSpriteAnim_83D71C0, + gSpriteAnim_83D71E8, + gSpriteAnim_83D71D4, + gSpriteAnim_83D71FC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220 = +{ + .tileTag = 10209, + .paletteTag = 10209, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7210, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CEF9C, +}; + void sub_80CEF44(u8 bank, struct Sprite* sprite) { if (GetBattlerSide(bank) == 0) @@ -41,7 +97,7 @@ void sub_80CEF9C(struct Sprite* sprite) sprite->callback = sub_8078600; } -void sub_80CF008(struct Sprite* sprite) +static void sub_80CF008(struct Sprite* sprite) { if (--sprite->data[0] == 0) { diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c index bc1fc4842..38dccb83f 100644 --- a/src/battle/anim/thrashing.c +++ b/src/battle/anim/thrashing.c @@ -8,14 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D77B0; - static void sub_80D0A8C(u8 taskId); static void sub_80D0B3C(u8 taskId); // thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.) // Used by Thrash. +const union AffineAnimCmd gSpriteAffineAnim_83D77B0[] = +{ + AFFINEANIMCMD_FRAME(-10, 9, 0, 7), + AFFINEANIMCMD_FRAME(20, -20, 0, 7), + AFFINEANIMCMD_FRAME(-20, 20, 0, 7), + AFFINEANIMCMD_FRAME(10, -9, 0, 7), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + // left/right movements void sub_80D0A4C(u8 taskId) { @@ -23,11 +31,11 @@ void sub_80D0A4C(u8 taskId) u8 spriteId = GetAnimBattlerSpriteId(0); task->data[0] = spriteId; task->data[1] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D77B0); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D77B0); task->func = sub_80D0A8C; } -void sub_80D0A8C(u8 taskId) +static void sub_80D0A8C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!sub_807992C(task)) @@ -54,7 +62,7 @@ void sub_80D0AB8(u8 taskId) task->func = sub_80D0B3C; } -void sub_80D0B3C(u8 taskId) +static void sub_80D0B3C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (++task->data[7] > 2) diff --git a/src/battle/anim/thunder.c b/src/battle/anim/thunder.c index 70d4dc232..9cd04e61f 100644 --- a/src/battle/anim/thunder.c +++ b/src/battle/anim/thunder.c @@ -7,11 +7,38 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u16 gBattleTypeFlags; +void sub_80D61C8(struct Sprite *sprite); static void sub_80D6218(struct Sprite *); // thunder (positions the lightning bolts) // Used in Thunder, Thunder Punch, and Tri Attack. +const union AnimCmd gSpriteAnim_83D97B4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D97CC[] = +{ + gSpriteAnim_83D97B4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0 = +{ + .tileTag = 10037, + .paletteTag = 10037, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D97CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D61C8, +}; + void sub_80D61C8(struct Sprite *sprite) { if (GetBattlerSide(gAnimBankAttacker) != 0) diff --git a/src/battle/anim/tile.c b/src/battle/anim/tile.c new file mode 100644 index 000000000..a10850808 --- /dev/null +++ b/src/battle/anim/tile.c @@ -0,0 +1,219 @@ +#include "global.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gBattlersCount; +extern u8 gHealthboxIDs[]; + +void sub_80CE09C(struct Sprite* sprite); +void sub_80CE17C(struct Sprite* sprite); +static void sub_80CE1AC(struct Sprite* sprite); + +// tile_in (flips a white tile from the scene into facing the player.) +// Used in Conversion. + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F08 = +{ + .tileTag = 10017, + .paletteTag = 10017, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const union AnimCmd gSpriteAnim_83D6F20[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6F38[] = +{ + gSpriteAnim_83D6F20, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F3C = +{ + .tileTag = 10030, + .paletteTag = 10030, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6F38, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const union AnimCmd gSpriteAnim_83D6F54[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6F68[] = +{ + gSpriteAnim_83D6F54, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6F6C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6F7C[] = +{ + gSpriteAffineAnim_83D6F6C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F80 = +{ + .tileTag = 10018, + .paletteTag = 10018, + .oam = &gOamData_837E104, + .anims = gSpriteAnimTable_83D6F68, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6F7C, + .callback = sub_80CE09C, +}; + +const union AnimCmd gSpriteAnim_83D6F98[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6FAC[] = +{ + gSpriteAnim_83D6F98, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FB0 = +{ + .tileTag = 10018, + .paletteTag = 10018, + .oam = &gOamData_837E104, + .anims = gSpriteAnimTable_83D6FAC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6F7C, + .callback = sub_80CE17C, +}; + +void sub_80CE09C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (IsContest()) + sprite->pos1.y += 10; + sprite->data[0]++; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyAnimSprite(sprite); +} + +void sub_80CE108(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} + +void sub_80CE17C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->animPaused = 1; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = sub_80CE1AC; +} + +static void sub_80CE1AC(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[0]--; + } + else + { + sprite->animPaused = 0; + sprite->data[0] = 30; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + } +} + +void sub_80CE210(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void unref_sub_80CE260(u8 taskId) +{ + u8 i; + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0) + sub_8043DB0(gHealthboxIDs[i]); + + if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1) + sub_8043DB0(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} + +void unref_sub_80CE2D4(u8 taskId) +{ + u8 i; + for (i = 0; i < gBattlersCount; i++) + { + sub_8043DFC(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c deleted file mode 100644 index b1d804317..000000000 --- a/src/battle/anim/tile_in.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -// tile_in (flips a white tile from the scene into facing the player.) -// Used in Conversion. - -void sub_80CE09C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1]; - if (IsContest()) - sprite->pos1.y += 10; - sprite->data[0]++; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - DestroyAnimSprite(sprite); -} - -void sub_80CE108(u8 taskId) -{ - if (gTasks[taskId].data[2] == 1) - { - gBattleAnimArgs[7] = 0xFFFF; - gTasks[taskId].data[2]++; - } - else if (gTasks[taskId].data[2] == 2) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); - if (gTasks[taskId].data[1] == 16) - gTasks[taskId].data[2]++; - } - } -} diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c deleted file mode 100644 index 04f51e556..000000000 --- a/src/battle/anim/tile_out.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_interface.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBattlersCount; -extern u8 gHealthboxIDs[]; - -static void sub_80CE1AC(struct Sprite* sprite); - -// tile_out (makes a tile fly inward into a center point.) -// Used in Conversion 2. - -void sub_80CE17C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->animPaused = 1; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_80CE1AC; -} - -void sub_80CE1AC(struct Sprite* sprite) -{ - if (sprite->data[0]) - { - sprite->data[0]--; - } - else - { - sprite->animPaused = 0; - sprite->data[0] = 30; - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->callback = StartTranslateAnimSpriteByDeltas; - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); - } -} - -void sub_80CE210(u8 taskId) -{ - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); - if (gTasks[taskId].data[1] == 16) - DestroyAnimVisualTask(taskId); - } -} - -void unref_sub_80CE260(u8 taskId) -{ - u8 i; - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0) - sub_8043DB0(gHealthboxIDs[i]); - - if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1) - sub_8043DB0(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} - -void unref_sub_80CE2D4(u8 taskId) -{ - u8 i; - for (i = 0; i < gBattlersCount; i++) - { - sub_8043DFC(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c index 34082cc2f..bfe0c8da2 100644 --- a/src/battle/anim/twinkle.c +++ b/src/battle/anim/twinkle.c @@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CE36C(struct Sprite* sprite); static void sub_80CE3B0(struct Sprite* sprite); // twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.) // Used in Moonlight. +const union AnimCmd gSpriteAnim_83D6FE0[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D6FF4[] = +{ + gSpriteAnim_83D6FE0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8 = +{ + .tileTag = 10195, + .paletteTag = 10195, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6FF4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CE36C, +}; + void sub_80CE36C(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[0]; @@ -25,7 +51,7 @@ void sub_80CE36C(struct Sprite* sprite) sprite->callback = sub_80CE3B0; } -void sub_80CE3B0(struct Sprite* sprite) +static void sub_80CE3B0(struct Sprite* sprite) { if (++sprite->data[1] > 1) { diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c index d7e5fbfe4..15050b54c 100644 --- a/src/battle/anim/unused_1.c +++ b/src/battle/anim/unused_1.c @@ -8,9 +8,73 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CC8C8(struct Sprite* sprite); + // unused effect file. // Seems to be a beta effect for Beat Up, possibly. +const union AffineAnimCmd gSpriteAffineAnim_83D6A58[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6A68[] = { + AFFINEANIMCMD_FRAME(256, 256, 32, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6A78[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6A88[] = { + AFFINEANIMCMD_FRAME(256, 256, 96, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6A98[] = { + AFFINEANIMCMD_FRAME(256, 256, -128, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6AA8[] = { + AFFINEANIMCMD_FRAME(256, 256, -96, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6AB8[] = { + AFFINEANIMCMD_FRAME(256, 256, -64, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D6AC8[] = { + AFFINEANIMCMD_FRAME(256, 256, -32, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6AD8[] = { + gSpriteAffineAnim_83D6A58, + gSpriteAffineAnim_83D6A68, + gSpriteAffineAnim_83D6A78, + gSpriteAffineAnim_83D6A88, + gSpriteAffineAnim_83D6A98, + gSpriteAffineAnim_83D6AA8, + gSpriteAffineAnim_83D6AB8, + gSpriteAffineAnim_83D6AC8, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6AF8 = +{ + .tileTag = 10143, + .paletteTag = 10143, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D6AD8, + .callback = sub_80CC8C8, +}; + void sub_80CC8C8(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c index 71e5e92d7..f4ebe0e74 100644 --- a/src/battle/anim/unused_2.c +++ b/src/battle/anim/unused_2.c @@ -8,11 +8,97 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CCC50(struct Sprite* sprite); static void sub_80CCCB4(struct Sprite* sprite); // unused_2 (unknown effect with music notes.) // possibly another unused effect. Unknown usage. +const union AnimCmd gSpriteAnim_83D6B58[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B60[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B68[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B70[] = +{ + ANIMCMD_FRAME(12, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B78[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B80[] = +{ + ANIMCMD_FRAME(20, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B88[] = +{ + ANIMCMD_FRAME(0, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B90[] = +{ + ANIMCMD_FRAME(4, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6B98[] = +{ + ANIMCMD_FRAME(8, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6BA0[] = +{ + ANIMCMD_FRAME(12, 1, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6BA8[] = +{ + gSpriteAnim_83D6B58, + gSpriteAnim_83D6B60, + gSpriteAnim_83D6B68, + gSpriteAnim_83D6B70, + gSpriteAnim_83D6B78, + gSpriteAnim_83D6B80, + gSpriteAnim_83D6B88, + gSpriteAnim_83D6B90, + gSpriteAnim_83D6B98, + gSpriteAnim_83D6BA0, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6BD0 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6BA8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CCC50, +}; + void unref_sub_80CCB6C(struct Sprite* sprite) { if (sprite->data[2] > 1) @@ -62,7 +148,7 @@ void sub_80CCC50(struct Sprite* sprite) sub_80CCCB4(sprite); } -void sub_80CCCB4(struct Sprite* sprite) +static void sub_80CCCB4(struct Sprite* sprite) { sprite->pos2.x = Cos(sprite->data[0], 100); sprite->pos2.y = Sin(sprite->data[0], 20); diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c index a89ed0246..1c3ab978e 100644 --- a/src/battle/anim/unused_3.c +++ b/src/battle/anim/unused_3.c @@ -8,10 +8,53 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CD274(struct Sprite* sprite); static void sub_80CD2D4(struct Sprite* sprite); // unused_3 (seems to be some sort of popping effect with a growing diamond shape) -// yet another unused effect... + +const union AnimCmd gSpriteAnim_83D6CB8[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(12, 10), + ANIMCMD_FRAME(16, 26), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(20, 5), + ANIMCMD_FRAME(24, 15), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D6CDC[] = +{ + ANIMCMD_FRAME(0, 10, .hFlip = TRUE), + ANIMCMD_FRAME(4, 10, .hFlip = TRUE), + ANIMCMD_FRAME(8, 10, .hFlip = TRUE), + ANIMCMD_FRAME(12, 10, .hFlip = TRUE), + ANIMCMD_FRAME(16, 26, .hFlip = TRUE), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(20, 5, .hFlip = TRUE), + ANIMCMD_FRAME(24, 15, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6D00[] = +{ + gSpriteAnim_83D6CB8, + gSpriteAnim_83D6CDC, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6D08 = +{ + .tileTag = 10032, + .paletteTag = 10032, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D6D00, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CD274, +}; void sub_80CD274(struct Sprite* sprite) { @@ -31,7 +74,7 @@ void sub_80CD274(struct Sprite* sprite) sprite->callback = sub_80CD2D4; } -void sub_80CD2D4(struct Sprite* sprite) +static void sub_80CD2D4(struct Sprite* sprite) { if (++sprite->data[0] > 30) { diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c deleted file mode 100644 index 63940f3e1..000000000 --- a/src/battle/anim/unused_4.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBankSpriteIds[]; - -static void sub_80CD9D4(struct Sprite* sprite); - -// unused_4 -// Unknown usage. - -void sub_80CD9C4(struct Sprite* sprite) -{ - sprite->data[0] = 0; - sprite->callback = sub_80CD9D4; -} - -void sub_80CD9D4(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - sprite->data[1] = 0; - sprite->data[2] = gBankSpriteIds[gAnimBankAttacker]; - sprite->data[3] = GetBattlerSide(gAnimBankAttacker); - sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; - sprite->data[5] = 0; - sub_8078E70(sprite->data[2], 0); - sprite->data[0]++; - case 1: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sprite->data[1] = 0; - sprite->data[4] *= -1; - sprite->data[0]++; - } - break; - case 2: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sub_8078F40(sprite->data[2]); - DestroyAnimSprite(sprite); - } - break; - } -} diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c index 421cdd6bf..af9a8a037 100644 --- a/src/battle/anim/unused_5.c +++ b/src/battle/anim/unused_5.c @@ -8,8 +8,21 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF280(struct Sprite* sprite); + // unused_5 +const struct SpriteTemplate gSpriteTemplate_83D7370 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF280, +}; + void sub_80CF280(struct Sprite* sprite) { sub_8078650(sprite); diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c index 37e2031b0..5b37d32c9 100644 --- a/src/battle/anim/unused_6.c +++ b/src/battle/anim/unused_6.c @@ -9,10 +9,34 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern void sub_80CEF44(u8 bank, struct Sprite* sprite); + +void sub_80CF2D0(struct Sprite* sprite); static void sub_80CF310(struct Sprite* sprite); // unused_6 +const union AnimCmd gSpriteAnim_83D7388[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7390[] = +{ + gSpriteAnim_83D7388, +}; + +const struct SpriteTemplate gSpriteTemplate_83D7394 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF2D0, +}; + void sub_80CF2D0(struct Sprite* sprite) { u8 bank; @@ -27,7 +51,7 @@ void sub_80CF2D0(struct Sprite* sprite) sprite->callback = sub_80CF310; } -void sub_80CF310(struct Sprite* sprite) +static void sub_80CF310(struct Sprite* sprite) { switch (sprite->data[0]) { diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c index a2f00db31..fa3facdda 100644 --- a/src/battle/anim/unused_7.c +++ b/src/battle/anim/unused_7.c @@ -10,9 +10,22 @@ extern u8 gAnimBankTarget; extern u8 gBankSpriteIds[]; +void sub_80CF3C4(struct Sprite* sprite); + // unused_7 -void sub_80CF374(struct Sprite* sprite) +const struct SpriteTemplate gSpriteTemplate_83D73AC = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF3C4, +}; + +static void sub_80CF374(struct Sprite* sprite) { s16 temp; gSprites[sprite->data[2]].pos2.x += sprite->data[1]; diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c index c67ec2754..a005bee1c 100644 --- a/src/battle/anim/unused_8.c +++ b/src/battle/anim/unused_8.c @@ -7,12 +7,62 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[]; +void sub_80CF458(struct Sprite* sprite); static void sub_80CF490(struct Sprite* sprite); static void sub_80CF4B8(struct Sprite* sprite); // unused_8 +const struct SpriteTemplate gSpriteTemplate_83D73C4 = +{ + .tileTag = 10145, + .paletteTag = 10145, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB1B0, + .callback = sub_80CF458, +}; + +const union AnimCmd gSpriteAnim_83D73DC[] = +{ + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D73F0[] = +{ + gSpriteAnim_83D73DC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D73F4[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D740C[] = +{ + gSpriteAffineAnim_83D73F4, +}; + +const struct SpriteTemplate gSpriteTemplate_83D7410 = +{ + .tileTag = 10007, + .paletteTag = 10007, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D73F0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D740C, + .callback = sub_80793C4, +}; + void sub_80CF458(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -23,7 +73,7 @@ void sub_80CF458(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF490); } -void sub_80CF490(struct Sprite* sprite) +static void sub_80CF490(struct Sprite* sprite) { sprite->data[0] = sprite->data[1]; sprite->data[2] = sprite->pos1.x; @@ -32,7 +82,7 @@ void sub_80CF490(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF4B8); } -void sub_80CF4B8(struct Sprite* sprite) +static void sub_80CF4B8(struct Sprite* sprite) { if (sprite->data[5] == 0) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c index 8e3f0a8b7..d8dda35b3 100644 --- a/src/battle/anim/unused_9.c +++ b/src/battle/anim/unused_9.c @@ -9,13 +9,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct SpriteTemplate gSpriteTemplate_83D75AC; - +void sub_80CFDFC(struct Sprite* sprite); static void sub_80CFE2C(struct Sprite* sprite); // unused_9? (Most likely an unused effect.) // I cannot find any reference to this sprite template used to call this. +const struct SpriteTemplate gSpriteTemplate_83D75AC = +{ + .tileTag = 10178, + .paletteTag = 10178, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CFDFC, +}; + void sub_80CFDFC(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); @@ -24,7 +34,7 @@ void sub_80CFDFC(struct Sprite* sprite) } #ifdef NONMATCHING -void sub_80CFE2C(struct Sprite* sprite) +static void sub_80CFE2C(struct Sprite* sprite) { u16 r7; u16 r5; @@ -46,7 +56,7 @@ void sub_80CFE2C(struct Sprite* sprite) } #else NAKED -void sub_80CFE2C(struct Sprite* sprite) +static void sub_80CFE2C(struct Sprite* sprite) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ diff --git a/src/battle/anim/uproar.c b/src/battle/anim/uproar.c index 538ca9b20..c78f89fef 100644 --- a/src/battle/anim/uproar.c +++ b/src/battle/anim/uproar.c @@ -6,19 +6,25 @@ extern s16 gBattleAnimArgs[8]; -extern const union AffineAnimCmd gUnknown_083D7CA8[]; +static void sub_80D2D3C(u8); -void sub_80D2D3C(u8); +const union AffineAnimCmd gSpriteAffineAnim_83D7CA8[] = +{ + AFFINEANIMCMD_FRAME(-12, 8, 0, 4), + AFFINEANIMCMD_FRAME(20, -20, 0, 4), + AFFINEANIMCMD_FRAME(-8, 12, 0, 4), + AFFINEANIMCMD_END, +}; void sub_80D2CF8(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - sub_80798F4(&gTasks[taskId], spriteId, gUnknown_083D7CA8); + sub_80798F4(&gTasks[taskId], spriteId, gSpriteAffineAnim_83D7CA8); gTasks[taskId].func = sub_80D2D3C; } -void sub_80D2D3C(u8 taskId) +static void sub_80D2D3C(u8 taskId) { if (!sub_807992C(&gTasks[taskId])) DestroyAnimVisualTask(taskId); diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c index a7e1883f3..0afe133f0 100644 --- a/src/battle/anim/water.c +++ b/src/battle/anim/water.c @@ -8,7 +8,187 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80D3874(struct Sprite *); +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[]; +extern const union AnimCmd *const gSpriteAnimTable_83D9BC8[]; + +void sub_80D37FC(struct Sprite *sprite); +void sub_80D3838(struct Sprite *sprite); +void sub_80D4044(struct Sprite *sprite); +void sub_80D452C(struct Sprite *sprite); +void sub_80D4BF0(struct Sprite *sprite); +void sub_80D4C64(struct Sprite *sprite); +static void sub_80D3874(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D9300[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9308[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9310[] = +{ + gSpriteAnim_83D9300, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9314[] = +{ + gSpriteAnim_83D9308, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9318 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837E04C, + .anims = gSpriteAnimTable_83D9310, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80794A8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9330 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837E10C, + .anims = gSpriteAnimTable_83D9314, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA318, + .callback = sub_80D37FC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9348 = +{ + .tileTag = 10141, + .paletteTag = 10141, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D9BC8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D3838, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9360 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4044, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9378 = +{ + .tileTag = 10268, + .paletteTag = 10268, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D452C, +}; + +const union AnimCmd gSpriteAnim_83D9390[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9398[] = +{ + ANIMCMD_FRAME(9, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D93A0[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D93A8[] = +{ + gSpriteAnim_83D9390, + gSpriteAnim_83D9398, +}; + +const union AnimCmd *const gSpriteAnimTable_83D93B0[] = +{ + gSpriteAnim_83D93A0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D93B4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D93CC[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D93E4[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D93FC[] = +{ + gSpriteAffineAnim_83D93B4, + gSpriteAffineAnim_83D93CC, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9404[] = +{ + gSpriteAffineAnim_83D93E4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9408 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_83D93A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D4BF0, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9420 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF84, + .anims = gSpriteAnimTable_83D93A8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D93FC, + .callback = sub_80D4C64, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9438 = +{ + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D93B0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9404, + .callback = sub_807A9BC, +}; void sub_80D37FC(struct Sprite *sprite) { diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c deleted file mode 100644 index 2cf68c34c..000000000 --- a/src/battle/anim/wave_finger.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -void sub_80CF088(struct Sprite* sprite); - -// wave_finger -// Used by Metronome. - -void sub_80CF040(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF088); - sprite->callback = sub_80785E4; -} - -void sub_80CF088(struct Sprite* sprite) -{ - if (++sprite->data[0] > 16) - { - StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; - } -} diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c index 08b24369d..e6e004932 100644 --- a/src/battle/anim/whip.c +++ b/src/battle/anim/whip.c @@ -8,16 +8,101 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CC82C(struct Sprite* sprite); +void sub_80CC884(struct Sprite* sprite); + // whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.) // Used by Slam and Vine Whip. -void sub_80CC810(struct Sprite* sprite) +const union AnimCmd gSpriteAnim_83D69AC[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_FRAME(112, 6), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D69C0[] = +{ + ANIMCMD_FRAME(64, 3, .hFlip = TRUE), + ANIMCMD_FRAME(80, 3, .hFlip = TRUE), + ANIMCMD_FRAME(96, 3, .hFlip = TRUE), + ANIMCMD_FRAME(112, 6, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D69D4[] = +{ + gSpriteAnim_83D69AC, + gSpriteAnim_83D69C0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69DC = +{ + .tileTag = 10056, + .paletteTag = 10056, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D69D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC884, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69F4 = +{ + .tileTag = 10287, + .paletteTag = 10287, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D69D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC884, +}; + +const union AnimCmd gSpriteAnim_83D6A0C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D6A24[] = +{ + gSpriteAnim_83D6A0C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6A28 = +{ + .tileTag = 10021, + .paletteTag = 10021, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6A24, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC82C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D6A40 = +{ + .tileTag = 10022, + .paletteTag = 10022, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D6A24, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CC82C, +}; + +static void sub_80CC810(struct Sprite* sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); } -// unused, beta effect for diagonal sprite movement? void sub_80CC82C(struct Sprite* sprite) { if (GetBattlerSide(gAnimBankAttacker) != 0) diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c index 5a51986c7..c96a3a86f 100644 --- a/src/battle/anim/wisp_fire.c +++ b/src/battle/anim/wisp_fire.c @@ -9,12 +9,45 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankTarget; extern u8 gAnimBankAttacker; - extern u8 gBankSpriteIds[]; -extern s8 gUnknown_083D9794[16]; -extern s8 gUnknown_083D97A4[16]; -void sub_80D5E4C(u8 taskId); +void sub_80D5CC0(struct Sprite *sprite); +static void sub_80D5E4C(u8 taskId); + +const union AnimCmd gSpriteAnim_83D9764[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D9778[] = +{ + gSpriteAnim_83D9764, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D977C = +{ + .tileTag = 10232, + .paletteTag = 10232, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D9778, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5CC0, +}; + +const s8 gUnknown_083D9794[16] = +{ + -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1, +}; + +const s8 gUnknown_083D97A4[16] = +{ + -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1, +}; void sub_80D5CC0(struct Sprite *sprite) { @@ -66,7 +99,7 @@ void sub_80D5DDC(u8 taskId) task->func = sub_80D5E4C; } -void sub_80D5E4C(u8 taskId) +static void sub_80D5E4C(u8 taskId) { struct Task *task = &gTasks[taskId]; diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c index 90b90acb7..32373ca2a 100644 --- a/src/battle/anim/wisp_orb.c +++ b/src/battle/anim/wisp_orb.c @@ -11,11 +11,58 @@ extern u8 gAnimBankTarget; extern u16 gBattleTypeFlags; extern u8 gUnknown_0202F7D2; +void sub_80D5B0C(struct Sprite *sprite); static void sub_80D5C5C(struct Sprite *); // wisp_orb (animates the wisp orbs) // Used in Will-O-Wisp +const union AnimCmd gSpriteAnim_83D9710[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83D9724[] = +{ + ANIMCMD_FRAME(16, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D972C[] = +{ + ANIMCMD_FRAME(20, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9734[] = +{ + ANIMCMD_FRAME(20, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D973C[] = +{ + gSpriteAnim_83D9710, + gSpriteAnim_83D9724, + gSpriteAnim_83D972C, + gSpriteAnim_83D9734, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D974C = +{ + .tileTag = 10231, + .paletteTag = 10231, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D973C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5B0C, +}; + void sub_80D5B0C(struct Sprite *sprite) { switch (sprite->data[0]) diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index cccedc89c..a10fd45b8 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -56,7 +56,6 @@ struct Struct_2017810 #define BG2CNT (*(vBgCnt *)REG_ADDR_BG2CNT) #define BG3CNT (*(vBgCnt *)REG_ADDR_BG3CNT) -extern struct OamData gOamData_837DF9C[]; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; @@ -129,7 +128,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { .tileTag = 55125, .paletteTag = 55125, - .oam = gOamData_837DF9C, + .oam = &gOamData_837DF9C, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -138,7 +137,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { .tileTag = 55126, .paletteTag = 55126, - .oam = gOamData_837DF9C, + .oam = &gOamData_837DF9C, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, |