Document battle_anim_bug.c
This commit is contained in:
parent
e09423fadf
commit
050a9415c7
@ -312,6 +312,34 @@
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro create_megahorn_horn_sprite anim_battler:req, subpriority_offset:req, x1:req, y1:req, x2:req, y2:req, duration:req
|
||||
createsprite gMegahornHornSpriteTemplate, \anim_battler, \subpriority_offset, \x1, \y1, \x2, \y2, \duration
|
||||
.endm
|
||||
|
||||
.macro create_leech_life_needle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req
|
||||
createsprite gLeechLifeNeedleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration
|
||||
.endm
|
||||
|
||||
.macro create_web_thread_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, unk2:req, amplitude:req, targets_both:req
|
||||
createsprite gWebThreadSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \unk2, \amplitude, \targets_both
|
||||
.endm
|
||||
|
||||
.macro create_string_wrap_sprite anim_battler:req, subpriority_offset:req, x:req, y:req
|
||||
createsprite gStringWrapSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y
|
||||
.endm
|
||||
|
||||
.macro create_linear_stinger_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req
|
||||
createsprite gLinearStingerSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration
|
||||
.endm
|
||||
|
||||
.macro create_pin_missile_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, wave_amplitude:req
|
||||
createsprite gPinMissileSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \wave_amplitude
|
||||
.endm
|
||||
|
||||
.macro create_tail_glow_orb_sprite anim_battler:req, subpriority_offset:req, relative_to:req
|
||||
createsprite gTailGlowOrbSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to
|
||||
.endm
|
||||
|
||||
.macro create_confusion_duck_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_offset:req, wave_period:req, duration:req
|
||||
createsprite gConfusionDuckSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_offset, \wave_period, \duration
|
||||
.endm
|
||||
|
||||
@ -706,15 +706,15 @@ Move_PIN_MISSILE:
|
||||
splitbgprio ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
|
||||
createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32
|
||||
create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=-8, target_y=-8, duration=20, wave_amplitude=-32
|
||||
delay 15
|
||||
createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 8, 8, 20, -40
|
||||
create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=8, target_y=8, duration=20, wave_amplitude=-40
|
||||
delay 4
|
||||
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
|
||||
create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-8, y=-8, relative_to=ANIM_TARGET, animation=2
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1
|
||||
delay 9
|
||||
createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 0, 0, 20, -32
|
||||
create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=0, target_y=0, duration=20, wave_amplitude=-32
|
||||
delay 4
|
||||
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
|
||||
create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=8, relative_to=ANIM_TARGET, animation=2
|
||||
@ -821,7 +821,7 @@ Move_POISON_STING:
|
||||
splitbgprio ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20
|
||||
create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=20, initial_y=0, target_x=-8, target_y=0, duration=20
|
||||
waitforvisualfinish
|
||||
create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1
|
||||
@ -840,8 +840,8 @@ Move_TWINEEDLE:
|
||||
splitbgprio ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 6, 2
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 10, -4, 0, -4, 20
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 12, 10, 12, 20
|
||||
create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=10, initial_y=-4, target_x=0, target_y=-4, duration=20
|
||||
create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=20, initial_y=12, target_x=10, target_y=12, duration=20
|
||||
delay 20
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1
|
||||
create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=-4, relative_to=ANIM_TARGET, animation=3
|
||||
@ -1307,9 +1307,9 @@ Move_SPIKE_CANNON:
|
||||
waitforvisualfinish
|
||||
loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 5, 3
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 10, -8, -8, -8, 20
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 0, 0, 20
|
||||
createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 26, 8, 8, 8, 20
|
||||
create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=10, initial_y=-8, target_x=-8, target_y=-8, duration=20
|
||||
create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=18, initial_y=0, target_x=0, target_y=0, duration=20
|
||||
create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=26, initial_y=8, target_x=8, target_y=8, duration=20
|
||||
waitforvisualfinish
|
||||
create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=-8, y=-8, relative_to=ANIM_TARGET, animation=2
|
||||
create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2
|
||||
@ -3893,7 +3893,7 @@ Move_TAIL_GLOW:
|
||||
setalpha 12, 8
|
||||
simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK
|
||||
waitforvisualfinish
|
||||
createsprite gTailGlowOrbSpriteTemplate, ANIM_ATTACKER, 66, ANIM_ATTACKER
|
||||
create_tail_glow_orb_sprite ANIM_ATTACKER, 66, relative_to=ANIM_ATTACKER
|
||||
delay 18
|
||||
loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 16, 6
|
||||
waitforvisualfinish
|
||||
@ -5884,7 +5884,7 @@ Move_LEECH_LIFE:
|
||||
splitbgprio_foes ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
delay 1
|
||||
createsprite gLeechLifeNeedleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 12
|
||||
create_leech_life_needle_sprite ANIM_ATTACKER, 2, x=-20, y=15, duration=12
|
||||
waitforvisualfinish
|
||||
create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2
|
||||
playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET
|
||||
@ -6117,7 +6117,7 @@ MegahornContinue:
|
||||
delay 10
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 6
|
||||
delay 3
|
||||
createsprite gMegahornHornSpriteTemplate, ANIM_ATTACKER, 3, -42, 25, 0, 0, 6
|
||||
create_megahorn_horn_sprite ANIM_ATTACKER, 3, x1=-42, y1=25, x2=0, y2=0, duration=6
|
||||
delay 4
|
||||
playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET
|
||||
create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0
|
||||
@ -7452,11 +7452,11 @@ Move_STRING_SHOT:
|
||||
call StringShotThread
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
|
||||
createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, 10
|
||||
create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=10
|
||||
delay 4
|
||||
createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, -2
|
||||
create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=-2
|
||||
delay 4
|
||||
createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, 22
|
||||
create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=22
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
delay 1
|
||||
@ -7465,7 +7465,7 @@ Move_STRING_SHOT:
|
||||
end
|
||||
|
||||
StringShotThread:
|
||||
createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 1
|
||||
create_web_thread_sprite ANIM_TARGET, 2, x=20, y=0, unk2=512, amplitude=20, targets_both=TRUE
|
||||
delay 1
|
||||
return
|
||||
|
||||
@ -7502,7 +7502,7 @@ Move_SPIDER_WEB:
|
||||
end
|
||||
|
||||
SpiderWebThread:
|
||||
createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 0
|
||||
create_web_thread_sprite ANIM_TARGET, 2, x=20, y=0, unk2=512, amplitude=20, targets_both=FALSE
|
||||
delay 1
|
||||
return
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_anim_internal.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "trig.h"
|
||||
#include "constants/rgb.h"
|
||||
@ -197,27 +198,29 @@ const struct SpriteTemplate gTailGlowOrbSpriteTemplate =
|
||||
|
||||
static void AnimMegahornHorn(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(x1, y1, x2, y2, duration);
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, 2);
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
cmd->x2 = -cmd->x2;
|
||||
cmd->x1 = -cmd->x1;
|
||||
}
|
||||
else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
cmd->y1 = -cmd->y1;
|
||||
cmd->x2 = -cmd->x2;
|
||||
cmd->y2 = -cmd->y2;
|
||||
cmd->x1 = -cmd->x1;
|
||||
}
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x1;
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y1;
|
||||
sprite->data[0] = cmd->duration;
|
||||
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x2;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y2;
|
||||
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
@ -225,20 +228,22 @@ static void AnimMegahornHorn(struct Sprite *sprite)
|
||||
|
||||
static void AnimLeechLifeNeedle(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(x, y, duration);
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
cmd->x = -cmd->x;
|
||||
StartSpriteAffineAnim(sprite, 2);
|
||||
}
|
||||
else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
cmd->y = -cmd->y;
|
||||
cmd->x = -cmd->x;
|
||||
}
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x;
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y;
|
||||
sprite->data[0] = cmd->duration;
|
||||
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@ -249,22 +254,20 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite)
|
||||
|
||||
// Creates a single web thread that travels from attacker to target.
|
||||
// Used by MOVE_STRING_SHOT and MOVE_SPIDER_WEB in their first move phase.
|
||||
// arg 0: x
|
||||
// arg 1: y
|
||||
// arg 2: controls the left-to-right movement
|
||||
// arg 3: amplitude
|
||||
// arg 4: if targets both opponents
|
||||
static void AnimTranslateWebThread(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(x, y, unk2, amplitude, targetsBoth);
|
||||
|
||||
if (IsContest())
|
||||
gBattleAnimArgs[2] /= 2;
|
||||
cmd->unk2 /= 2;
|
||||
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[0] = cmd->unk2;
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[3] = sprite->y;
|
||||
|
||||
if (!gBattleAnimArgs[4])
|
||||
if (!cmd->targetsBoth)
|
||||
{
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@ -275,7 +278,7 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
|
||||
}
|
||||
|
||||
InitAnimLinearTranslationWithSpeed(sprite);
|
||||
sprite->data[5] = gBattleAnimArgs[3];
|
||||
sprite->data[5] = cmd->amplitude;
|
||||
sprite->callback = AnimTranslateWebThread_Step;
|
||||
}
|
||||
|
||||
@ -294,13 +297,15 @@ static void AnimTranslateWebThread_Step(struct Sprite *sprite)
|
||||
// Second stage of String Shot
|
||||
static void AnimStringWrap(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(x, y);
|
||||
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
|
||||
if (GetBattlerSide(gBattleAnimAttacker))
|
||||
sprite->x -= gBattleAnimArgs[0];
|
||||
sprite->x -= cmd->x;
|
||||
else
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->x += cmd->x;
|
||||
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
sprite->y += cmd->y;
|
||||
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||||
sprite->y += 8;
|
||||
|
||||
@ -358,27 +363,24 @@ static void AnimSpiderWeb_End(struct Sprite *sprite)
|
||||
|
||||
// Translates a stinger sprite linearly to a destination location. The sprite is
|
||||
// initially rotated so that it appears to be traveling in a straight line.
|
||||
// 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
|
||||
static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(initialX, intialY, targetX, targetY, duration);
|
||||
|
||||
s16 lVarX, lVarY;
|
||||
u16 rot;
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
cmd->targetX = -cmd->targetX;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker))
|
||||
{
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
cmd->targetX = -cmd->targetX;
|
||||
cmd->intialY = -cmd->intialY;
|
||||
cmd->targetY = -cmd->targetY;
|
||||
}
|
||||
}
|
||||
|
||||
@ -387,20 +389,20 @@ static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|
||||
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
|
||||
{
|
||||
gBattleAnimArgs[2] *= -1;
|
||||
gBattleAnimArgs[0] *= -1;
|
||||
cmd->targetX *= -1;
|
||||
cmd->initialX *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
|
||||
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX;
|
||||
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY;
|
||||
rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y);
|
||||
rot += 0xC000;
|
||||
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[0] = cmd->duration;
|
||||
sprite->data[2] = lVarX;
|
||||
sprite->data[4] = lVarY;
|
||||
|
||||
@ -409,23 +411,19 @@ static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
}
|
||||
|
||||
// Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling.
|
||||
// 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
|
||||
static void AnimMissileArc(struct Sprite *sprite)
|
||||
{
|
||||
CMD_ARGS(initialX, intialY, targetX, targetY, duration, waveAmplitude);
|
||||
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
|
||||
if (GetBattlerSide(gBattleAnimAttacker))
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
cmd->targetX = -cmd->targetX;
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
sprite->data[5] = gBattleAnimArgs[5];
|
||||
sprite->data[0] = cmd->duration;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY;
|
||||
sprite->data[5] = cmd->waveAmplitude;
|
||||
InitAnimArcTranslation(sprite);
|
||||
|
||||
sprite->callback = AnimMissileArc_Step;
|
||||
@ -471,7 +469,9 @@ static void AnimMissileArc_Step(struct Sprite *sprite)
|
||||
|
||||
static void AnimTailGlowOrb(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
CMD_ARGS(relativeTo);
|
||||
|
||||
if (cmd->relativeTo == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user