diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-12-20 15:54:25 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-20 15:54:25 -0600 |
commit | 871ae4c283ec8bc7730df52790b5ca53baa82230 (patch) | |
tree | 6899e26a068d4854a026e3d13b7c51c36b68208a /src/battle/anim/bubble.c | |
parent | 3c5f725de49371aced1788a21f5e53df5b498b5f (diff) | |
parent | 5e6bfe67a87e041ebdc9e0b573d1ae1f22b79d59 (diff) |
Merge pull request #494 from huderlem/battle_anim
Decompile small battle_anim effects
Diffstat (limited to 'src/battle/anim/bubble.c')
-rw-r--r-- | src/battle/anim/bubble.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c new file mode 100644 index 000000000..5da0d9929 --- /dev/null +++ b/src/battle/anim/bubble.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "util.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D32E8(struct Sprite *sprite); +static void sub_80D3370(struct Sprite *sprite); +static void sub_80D3398(struct Sprite *sprite); + +// bubble (indidivual bubble that floats around) +// Used in Bubble and Bubblebeam + +void sub_80D31C8(struct Sprite* sprite) +{ + u8 newSpriteId; + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1]; + } + + sprite->animPaused = 1; + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[6]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + + obj_translate_based_on_private_1_2_3_4(sprite); + + newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + sprite->data[5] = newSpriteId; + + sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]); + sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]); + + gSprites[newSpriteId].data[0] = gBattleAnimArgs[2]; + gSprites[newSpriteId].data[1] = gBattleAnimArgs[3]; + gSprites[newSpriteId].data[2] = gBattleAnimArgs[5]; + gSprites[newSpriteId].data[3] = (u8)gBattleAnimArgs[4] * 256; + gSprites[newSpriteId].data[4] = gBattleAnimArgs[6]; + + sprite->callback = sub_80D32E8; + sprite->callback(sprite); +} + +static void sub_80D32E8(struct Sprite *sprite) +{ + u8 spriteId = sprite->data[5]; + + u8 counter = gSprites[spriteId].data[4]; + u16 index = gSprites[spriteId].data[3]; + + sprite->data[0] = 1; + sub_8078B5C(sprite); + + sprite->pos2.x += Sin(index / 256, gSprites[spriteId].data[0]); + sprite->pos2.y += Cos(index / 256, gSprites[spriteId].data[1]); + + gSprites[spriteId].data[3] = gSprites[spriteId].data[2] + index; + + if (--counter != 0) + { + gSprites[spriteId].data[4] = counter; + } + else + { + sprite->callback = sub_80D3370; + DestroySprite(&gSprites[spriteId]); + } +} + +static void sub_80D3370(struct Sprite *sprite) +{ + sprite->animPaused = 0; + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, sub_80D3398); +} + +static void sub_80D3398(struct Sprite *sprite) +{ + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} |