diff options
author | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-04 04:15:17 +0100 |
---|---|---|
committer | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-04 04:15:17 +0100 |
commit | 4a01c3233aa8758a9a56fa419642c8bc4590d09a (patch) | |
tree | a6dc19d15e947fd9df7c5f1177257bd3d9d7cbba /src/battle/anim/poison.c | |
parent | 56f960f67679071712dd7d2cd6140eb8833e7344 (diff) |
Decompiled poison.s
Diffstat (limited to 'src/battle/anim/poison.c')
-rw-r--r-- | src/battle/anim/poison.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c new file mode 100644 index 000000000..c53fb2a8b --- /dev/null +++ b/src/battle/anim/poison.c @@ -0,0 +1,115 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +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); +void sub_80D9FF0(struct Sprite *sprite); + +void sub_80D9D70(struct Sprite *sprite) { + if (!gBattleAnimArgs[3]) { + StartSpriteAnim(sprite, 2); + } + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9DD4; +} + +void sub_80D9DD4(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9DF0(struct Sprite *sprite) { + s16 l1, l2; + if (!gBattleAnimArgs[3]) { + StartSpriteAnim(sprite, 2); + } + sub_80787B0(sprite, 1); + sub_807A3FC(gAnimBankTarget, 1, &l1, &l2); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + } + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = l1 + gBattleAnimArgs[4]; + sprite->data[4] = l2 + gBattleAnimArgs[5]; + sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9E78; +} + +void sub_80D9E78(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9E94(struct Sprite *sprite) { + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1]; + sub_8078A5C(sprite); + sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2]; + sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2]; + sprite->callback = sub_80D9EE8; +} + +void sub_80D9EE8(struct Sprite *sprite) { + sub_8078394(sprite); + sprite->data[1] -= sprite->data[5]; + sprite->data[2] -= sprite->data[6]; + if (!sprite->data[0]) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9F14(struct Sprite *sprite) { + sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + sprite->data[0]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +void sub_80D9F88(struct Sprite *sprite) { + if (!gBattleAnimArgs[2]) { + sub_8078764(sprite, TRUE); + } else { + sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->callback = sub_80D9FF0; +} + +void sub_80D9FF0(struct Sprite *sprite) { + sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF; + sprite->pos2.x = Sin(sprite->data[0], 4); + sprite->data[1] += 0x30; + sprite->pos2.y = -(sprite->data[1] >> 8); + if (sprite->affineAnimEnded) { + DestroyAnimSprite(sprite); + } +}
\ No newline at end of file |