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/shock.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/shock.c')
-rw-r--r-- | src/battle/anim/shock.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/battle/anim/shock.c b/src/battle/anim/shock.c new file mode 100644 index 000000000..35c380f23 --- /dev/null +++ b/src/battle/anim/shock.c @@ -0,0 +1,106 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern struct OamMatrix gOamMatrices[]; + +extern void sub_80DA48C(struct Sprite *); + +// shock (moves the little electricity lines) +// Used in Shock. + +void sub_80D6294(struct Sprite *sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y -= gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078114; +} + +void sub_80D6328(struct Sprite *sprite) +{ + u8 slot; + u32 matrixNum; + s16 sineVal; + + switch (gBattleAnimArgs[4]) + { + case 0: + slot = gBattleAnimBankAttacker; + break; + case 1: + default: + slot = gBattleAnimBankTarget; + break; + case 2: + if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) + { + slot = gBattleAnimBankAttacker; + } + else + { + slot = gBattleAnimBankAttacker ^ 2; + } + break; + case 3: + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) + { + slot = gBattleAnimBankTarget ^ 2; + } + else + { + slot = gBattleAnimBankTarget; + } + break; + } + + if (gBattleAnimArgs[5] == 0) + { + sprite->pos1.x = sub_8077ABC(slot, 0); + sprite->pos1.y = sub_8077ABC(slot, 1); + } + else + { + sprite->pos1.x = sub_8077ABC(slot, 2); + sprite->pos1.y = sub_8077ABC(slot, 3); + } + + sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8; + sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8; + + if (gBattleAnimArgs[6] & 1) + { + sprite->oam.priority = sub_8079ED4(slot) + 1; + } + + matrixNum = sprite->oam.matrixNum; + sineVal = gSineTable[gBattleAnimArgs[2]]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64]; + gOamMatrices[matrixNum].b = sineVal; + gOamMatrices[matrixNum].c = -sineVal; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = sub_80DA48C; +} |