diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-05-05 19:03:19 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-05-05 19:03:19 -0700 |
commit | e2ea3d44cad21c699e9958586d3282c5e66ecfe1 (patch) | |
tree | 2146caaa2140fcb773b46278b6aeec6903f92ea9 /src | |
parent | f2b6948bb2ddfa2781290e3ca75ab5de93caccba (diff) |
Start decompiling battle_anim_812C144
Diffstat (limited to 'src')
-rwxr-xr-x | src/battle/battle_anim_812C144.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c new file mode 100755 index 000000000..4714f5b09 --- /dev/null +++ b/src/battle/battle_anim_812C144.c @@ -0,0 +1,110 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern u8 sub_8046234(s16 x, s16 y, u8 a3); + +static void sub_812C184(struct Sprite *sprite); +static void sub_812C268(struct Sprite *sprite); +static void sub_812C2A4(struct Sprite *sprite); +extern void sub_812C380(struct Sprite *sprite); + +void sub_812C144(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + + if (gBattleAnimArgs[3] == 0) + sprite->data[0] = gBattleAnimArgs[2]; + else + sprite->data[0] = -gBattleAnimArgs[2]; + + sprite->data[1] = gBattleAnimArgs[4]; + sprite->callback = sub_812C184; +} + +static void sub_812C184(struct Sprite *sprite) +{ + if (sprite->data[1] > 0) + { + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[0]; + sprite->invisible ^= 1; + sprite->data[1]--; + } + else + { + DestroyAnimSprite(sprite); + } +} + +void sub_812C1D0(u8 taskId) +{ + sub_8046234( + GetBattlerSpriteCoord(gAnimBankTarget, 2) + 8, + GetBattlerSpriteCoord(gAnimBankTarget, 3) + 8, + 0); + DestroyAnimVisualTask(taskId); + +} + +void sub_812C220(struct Sprite *sprite) +{ + sprite->data[0] = 90; + sprite->callback = WaitAnimForDuration; + sprite->data[1] = 7; + StoreSpriteCallbackInData(sprite, sub_812C268); + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; +} + +static void sub_812C268(struct Sprite *sprite) +{ + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; + if (--sprite->data[1] < 0) + { + sprite->invisible = 1; + sprite->callback = sub_812C2A4; + } +} + +static void sub_812C2A4(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} + +void sub_812C2BC(struct Sprite *sprite) +{ + u16 rotation; + u8 x = GetBattlerSpriteCoord(gAnimBankTarget, 2); + u8 y = GetBattlerSpriteCoord(gAnimBankTarget, 3); + + sub_8078764(sprite, 1); + + rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y); + rotation += 0x6000; + if (IsContest()) + rotation += 0x4000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, rotation); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = x; + sprite->data[4] = y; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +void sub_812C358(struct Sprite *sprite) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x1000; + sprite->data[0] = 4; + sprite->callback = sub_812C380; +} |