#include "global.h" #include "rom_8077ABC.h" #include "trig.h" #include "battle_anim.h" 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 = ANIM_TAG_SEED, .paletteTag = ANIM_TAG_SEED, .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 // arg 1: initial y pixel offset // arg 2: target x pixel offset // arg 3: target y pixel offset // arg 4: duration // arg 5: wave amplitude void AnimLeechSeed(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); if (GetBattlerSide(gAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[2]; sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); sprite->callback = AnimLeechSeedStep; } static void AnimLeechSeedStep(struct Sprite* sprite) { if (TranslateAnimArc(sprite)) { sprite->invisible = 1; sprite->data[0] = 10; sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, AnimLeechSeedSprouts); } } static void AnimLeechSeedSprouts(struct Sprite* sprite) { sprite->invisible = 0; StartSpriteAnim(sprite, 1); sprite->data[0] = 60; sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); }