mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-09 04:23:14 -05:00
Merge pull request #72 from pret/battle_anim_mon_movement
Battle anim mon movement
This commit is contained in:
commit
e33356d841
File diff suppressed because it is too large
Load Diff
|
|
@ -59,10 +59,13 @@ extern u8 gAnimFriendship;
|
|||
extern u16 gWeatherMoveAnim;
|
||||
extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
|
||||
extern u8 gAnimMoveTurn;
|
||||
extern u8 gAnimBankAttacker;
|
||||
extern u8 gAnimBankTarget;
|
||||
extern u8 gBattleAnimAttacker;
|
||||
extern u8 gBattleAnimTarget;
|
||||
extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
|
||||
extern u8 gUnknown_02038440;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u16 gUnknown_2037EEC;
|
||||
extern s32 gUnknown_2037EE8;
|
||||
|
||||
void ClearBattleAnimationVars(void);
|
||||
void DoMoveAnim(u16 move);
|
||||
|
|
@ -77,6 +80,7 @@ s8 BattleAnimAdjustPanning(s8 pan);
|
|||
s8 BattleAnimAdjustPanning2(s8 pan);
|
||||
s16 sub_80A52EC(s16 a);
|
||||
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
|
||||
bool8 sub_8072DF0(u8 battlerId);
|
||||
|
||||
// battle_anim_80FE840.s
|
||||
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
|
||||
|
|
@ -121,4 +125,14 @@ u8 ItemIdToBallId(u16 itemId);
|
|||
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
|
||||
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
|
||||
|
||||
// battle_anim_mons.s
|
||||
void sub_8074DC4(struct Sprite * sprite);
|
||||
void sub_8074E14(struct Sprite * sprite);
|
||||
void sub_80754B8(struct Sprite * sprite);
|
||||
void sub_80758E0(u8 spriteId, u8 b);
|
||||
void sub_8075980(u8 spriteId);
|
||||
void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
|
||||
bool8 sub_8073788(void);
|
||||
void sub_80759DC(u8 spriteId);
|
||||
|
||||
#endif // GUARD_BATTLE_ANIM_H
|
||||
|
|
|
|||
|
|
@ -139,7 +139,6 @@ SECTIONS {
|
|||
asm/map_name_popup.o(.text);
|
||||
src/item_menu_icons.o(.text);
|
||||
src/battle_anim_mon_movement.o(.text);
|
||||
asm/battle_anim_mon_movement.o(.text);
|
||||
src/item.o(.text);
|
||||
asm/shop.o(.text);
|
||||
src/berry.o(.text);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,32 @@
|
|||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
|
||||
#define abs(x) ((x) < 0 ? -(x) : (x))
|
||||
|
||||
void sub_8098A6C(u8 taskId);
|
||||
void sub_8098C08(u8 taskId);
|
||||
void sub_8098D54(u8 taskId);
|
||||
void sub_8098EF0(u8 taskId);
|
||||
void sub_8099004(u8 taskId);
|
||||
void sub_80990AC(struct Sprite * sprite);
|
||||
void sub_8099120(struct Sprite * sprite);
|
||||
void sub_8099144(struct Sprite * sprite);
|
||||
void sub_8099190(struct Sprite * sprite);
|
||||
void sub_80991B4(struct Sprite * sprite);
|
||||
void sub_8099270(struct Sprite * sprite);
|
||||
void sub_80992E0(struct Sprite * sprite);
|
||||
void sub_8099394(struct Sprite * sprite);
|
||||
void sub_809946C(struct Sprite * sprite);
|
||||
void sub_8099530(u8 taskId);
|
||||
void sub_8099594(u8 taskId);
|
||||
void sub_80996B8(u8 taskId);
|
||||
void sub_8099788(u8 taskId);
|
||||
void sub_8099908(u8 taskId);
|
||||
void sub_8099B54(u8 taskId);
|
||||
void sub_8099CB8(u8 taskId);
|
||||
|
||||
const struct SpriteTemplate gUnknown_83D4E4C[] = {
|
||||
{
|
||||
|
|
@ -19,3 +41,769 @@ const struct SpriteTemplate gUnknown_83D4E4C[] = {
|
|||
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099394
|
||||
}
|
||||
};
|
||||
|
||||
void sub_80989F8(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
if (spriteId == 0xFF)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
{
|
||||
gSprites[spriteId].pos2.x = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].pos2.y = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = sub_8098A6C;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8098A6C(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
if (gSprites[gTasks[taskId].data[0]].pos2.x == 0)
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4];
|
||||
else
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = 0;
|
||||
if (gSprites[gTasks[taskId].data[0]].pos2.y == 0)
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5];
|
||||
else
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = 0;
|
||||
gTasks[taskId].data[3] = gTasks[taskId].data[2];
|
||||
if (--gTasks[taskId].data[1] == 0)
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = 0;
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
else
|
||||
gTasks[taskId].data[3]--;
|
||||
}
|
||||
|
||||
void sub_8098B1C(u8 taskId)
|
||||
{
|
||||
bool8 abort = FALSE;
|
||||
u8 spriteId;
|
||||
u8 battlerId;
|
||||
|
||||
if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT)
|
||||
{
|
||||
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
if (spriteId == 0xFF)
|
||||
abort = TRUE;
|
||||
}
|
||||
else if (gBattleAnimArgs[0] != 8)
|
||||
{
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 4:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
break;
|
||||
case 5:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
break;
|
||||
case 6:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
break;
|
||||
default:
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
break;
|
||||
}
|
||||
if (!sub_8072DF0(battlerId))
|
||||
abort = TRUE;
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
}
|
||||
else
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
if (abort)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
{
|
||||
gSprites[spriteId].pos2.x = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].pos2.y = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = sub_8098C08;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8098C08(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
if (gSprites[gTasks[taskId].data[0]].pos2.x == gTasks[taskId].data[4])
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = -gTasks[taskId].data[4];
|
||||
else
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4];
|
||||
if (gSprites[gTasks[taskId].data[0]].pos2.y == gTasks[taskId].data[5])
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = -gTasks[taskId].data[5];
|
||||
else
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5];
|
||||
gTasks[taskId].data[3] = gTasks[taskId].data[2];
|
||||
if (--gTasks[taskId].data[1] == 0)
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x = 0;
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
else
|
||||
gTasks[taskId].data[3]--;
|
||||
}
|
||||
|
||||
void sub_8098CD0(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
if (spriteId == 0xFF)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
{
|
||||
gSprites[spriteId].pos2.x += gBattleAnimArgs[1];
|
||||
gSprites[spriteId].pos2.y += gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[3] = 0;
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
|
||||
gTasks[taskId].func = sub_8098D54;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8098D54(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
if (gTasks[taskId].data[1] & 1)
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5];
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6];
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5];
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6];
|
||||
}
|
||||
gTasks[taskId].data[3] = gTasks[taskId].data[4];
|
||||
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
|
||||
{
|
||||
if (gTasks[taskId].data[1] & 1)
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5] / 2;
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6] / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5] / 2;
|
||||
gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6] / 2;
|
||||
}
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
else
|
||||
gTasks[taskId].data[3]--;
|
||||
}
|
||||
|
||||
void sub_8098E90(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
gSprites[spriteId].pos2.x = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].func = sub_8098EF0;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
void sub_8098EF0(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
s16 data1 = gTasks[taskId].data[1];
|
||||
if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++)
|
||||
{
|
||||
gTasks[taskId].data[8] = 0;
|
||||
if (gSprites[spriteId].pos2.x == data1)
|
||||
data1 = -data1;
|
||||
gSprites[spriteId].pos2.x += data1;
|
||||
}
|
||||
gTasks[taskId].data[1] = data1;
|
||||
gTasks[taskId].data[9] += gTasks[taskId].data[3];
|
||||
gSprites[spriteId].pos2.y = gTasks[taskId].data[9] >> 8;
|
||||
if (--gTasks[taskId].data[4] == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_8098F84(u8 taskId)
|
||||
{
|
||||
u8 r6 = 1;
|
||||
u8 i;
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
if (gBattleAnimArgs[4] > 5)
|
||||
gBattleAnimArgs[4] = 5;
|
||||
for (i = 0; i < gBattleAnimArgs[4]; i++)
|
||||
r6 *= 2;
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = r6;
|
||||
gTasks[taskId].func = sub_8099004;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
void sub_8099004(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gSprites[spriteId].pos2.x = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]);
|
||||
gSprites[spriteId].pos2.y = -Cos(gTasks[taskId].data[5], gTasks[taskId].data[2]);
|
||||
gSprites[spriteId].pos2.y += gTasks[taskId].data[2];
|
||||
gTasks[taskId].data[5] += gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[5] &= 0xFF;
|
||||
if (gTasks[taskId].data[5] == 0)
|
||||
gTasks[taskId].data[3]--;
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
gSprites[spriteId].pos2.x = 0;
|
||||
gSprites[spriteId].pos2.y = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_809907C(u8 taskId)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
sub_8098F84(taskId);
|
||||
}
|
||||
|
||||
void sub_80990AC(struct Sprite * sprite)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
sprite->data[1] = -gBattleAnimArgs[1];
|
||||
else
|
||||
sprite->data[1] = gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[0];
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
sprite->data[4] = gBattleAnimArgs[0];
|
||||
StoreSpriteCallbackInData6(sprite, sub_8099120);
|
||||
sprite->callback = sub_8074DC4;
|
||||
}
|
||||
|
||||
void sub_8099120(struct Sprite * sprite)
|
||||
{
|
||||
sprite->data[0] = sprite->data[4];
|
||||
sprite->data[1] = -sprite->data[1];
|
||||
sprite->callback = sub_8074DC4;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
void sub_8099144(struct Sprite * sprite)
|
||||
{
|
||||
u8 spriteId;
|
||||
sprite->invisible = TRUE;
|
||||
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
|
||||
sprite->data[0] = gBattleAnimArgs[0];
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = gBattleAnimArgs[1];
|
||||
sprite->data[3] = spriteId;
|
||||
sprite->data[4] = gBattleAnimArgs[0];
|
||||
StoreSpriteCallbackInData6(sprite, sub_8099190);
|
||||
sprite->callback = sub_8074DC4;
|
||||
}
|
||||
|
||||
void sub_8099190(struct Sprite * sprite)
|
||||
{
|
||||
sprite->data[0] = sprite->data[4];
|
||||
sprite->data[2] = -sprite->data[2];
|
||||
sprite->callback = sub_8074DC4;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
void sub_80991B4(struct Sprite * sprite)
|
||||
{
|
||||
u8 spriteId;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
else
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
|
||||
sprite->data[2] = gSprites[spriteId].pos1.x;
|
||||
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
|
||||
sprite->data[4] = gSprites[spriteId].pos1.y;
|
||||
sub_80754B8(sprite);
|
||||
sprite->data[3] = 0;
|
||||
sprite->data[4] = 0;
|
||||
sprite->data[5] = gSprites[spriteId].pos2.x;
|
||||
sprite->data[6] = gSprites[spriteId].pos2.y;
|
||||
sprite->invisible = TRUE;
|
||||
if (gBattleAnimArgs[1] == 1)
|
||||
sprite->data[2] = 0;
|
||||
else if (gBattleAnimArgs[1] == 2)
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[7] = gBattleAnimArgs[1];
|
||||
sprite->data[7] |= spriteId << 8;
|
||||
sprite->callback = sub_8099270;
|
||||
}
|
||||
|
||||
void sub_8099270(struct Sprite * sprite)
|
||||
{
|
||||
u8 data7 = sprite->data[7];
|
||||
struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8];
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
if (data7 == 1 || data7 == 0)
|
||||
otherSprite->pos2.x = 0;
|
||||
if (data7 == 2 || data7 == 0)
|
||||
otherSprite->pos2.y = 0;
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[0]--;
|
||||
sprite->data[3] += sprite->data[1];
|
||||
sprite->data[4] += sprite->data[2];
|
||||
otherSprite->pos2.x = (sprite->data[3] >> 8) + sprite->data[5];
|
||||
otherSprite->pos2.y = (sprite->data[4] >> 8) + sprite->data[6];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80992E0(struct Sprite * sprite)
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 spriteId;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
if (gBattleAnimArgs[3] == 1)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
}
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[1] = gSprites[spriteId].pos1.x;
|
||||
sprite->data[2] = gSprites[spriteId].pos1.x + gBattleAnimArgs[1];
|
||||
sprite->data[3] = gSprites[spriteId].pos1.y;
|
||||
sprite->data[4] = gSprites[spriteId].pos1.y + gBattleAnimArgs[2];
|
||||
sub_80754B8(sprite);
|
||||
sprite->data[3] = 0;
|
||||
sprite->data[4] = 0;
|
||||
sprite->data[5] = spriteId;
|
||||
sprite->invisible = TRUE;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
sprite->callback = sub_8074E14;
|
||||
}
|
||||
|
||||
void sub_8099394(struct Sprite * sprite)
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 spriteId;
|
||||
sprite->invisible = TRUE;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
if (gBattleAnimArgs[3] == 1)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
}
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
|
||||
sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1];
|
||||
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
|
||||
sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2];
|
||||
sub_80754B8(sprite);
|
||||
sprite->data[3] = gSprites[spriteId].pos2.x << 8;
|
||||
sprite->data[4] = gSprites[spriteId].pos2.y << 8;
|
||||
sprite->data[5] = spriteId;
|
||||
sprite->data[6] = gBattleAnimArgs[5];
|
||||
if (gBattleAnimArgs[5] == 0)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
else
|
||||
StoreSpriteCallbackInData6(sprite, sub_809946C);
|
||||
sprite->callback = sub_8074E14;
|
||||
}
|
||||
|
||||
void sub_809946C(struct Sprite * sprite)
|
||||
{
|
||||
gSprites[sprite->data[5]].pos2.x = 0;
|
||||
gSprites[sprite->data[5]].pos2.y = 0;
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void sub_809949C(u8 taskId)
|
||||
{
|
||||
u16 r7 = 0x8000 / gBattleAnimArgs[3];
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[5] = -gBattleAnimArgs[5];
|
||||
}
|
||||
gTasks[taskId].data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1] * 256 / gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[5] * 256 / gBattleAnimArgs[6];
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[6];
|
||||
gTasks[taskId].data[7] = r7;
|
||||
gTasks[taskId].func = sub_8099530;
|
||||
}
|
||||
|
||||
void sub_8099530(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gTasks[taskId].data[11] += gTasks[taskId].data[1];
|
||||
gSprites[spriteId].pos2.x = gTasks[taskId].data[11] >> 8;
|
||||
gSprites[spriteId].pos2.y = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]);
|
||||
gTasks[taskId].data[10] += gTasks[taskId].data[7];
|
||||
if (--gTasks[taskId].data[3] == 0)
|
||||
gTasks[taskId].func = sub_8099594;
|
||||
}
|
||||
|
||||
void sub_8099594(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
if (gTasks[taskId].data[4] > 0)
|
||||
gTasks[taskId].data[4]--;
|
||||
else
|
||||
{
|
||||
spriteId = gTasks[taskId].data[0];
|
||||
gTasks[taskId].data[12] += gTasks[taskId].data[5];
|
||||
gSprites[spriteId].pos2.x = (gTasks[taskId].data[12] >> 8) + (gTasks[taskId].data[11] >> 8);
|
||||
if (--gTasks[taskId].data[6] == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80995FC(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
|
||||
break;
|
||||
case 2:
|
||||
if (!sub_8072DF0(gBattleAnimAttacker ^ BIT_FLANK))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ BIT_FLANK];
|
||||
break;
|
||||
case 3:
|
||||
if (!sub_8072DF0(gBattleAnimTarget ^ BIT_FLANK))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimTarget ^ BIT_FLANK];
|
||||
break;
|
||||
default:
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
else
|
||||
gTasks[taskId].data[1] = -gBattleAnimArgs[1];
|
||||
gTasks[taskId].func = sub_80996B8;
|
||||
}
|
||||
|
||||
void sub_80996B8(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gSprites[spriteId].pos2.x += gTasks[taskId].data[1];
|
||||
if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x < -0x20 || gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x > 0x110)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_8099704(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]);
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = spriteId;
|
||||
if (gBattleAnimArgs[4] == 0)
|
||||
gTasks[taskId].data[5] = gBattleAnimAttacker;
|
||||
else
|
||||
gTasks[taskId].data[5] = gBattleAnimTarget;
|
||||
gTasks[taskId].data[12] = 1;
|
||||
gTasks[taskId].func = sub_8099788;
|
||||
}
|
||||
|
||||
void sub_8099788(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
u32 r8;
|
||||
s16 r5;
|
||||
u16 tmp;
|
||||
|
||||
spriteId = gTasks[taskId].data[4];
|
||||
tmp = gTasks[taskId].data[10] + gTasks[taskId].data[2];
|
||||
gTasks[taskId].data[10] = tmp;
|
||||
r8 = tmp >> 8;
|
||||
r5 = Sin(r8, gTasks[taskId].data[1]);
|
||||
if (gTasks[taskId].data[0] == 0)
|
||||
{
|
||||
gSprites[spriteId].pos2.x = r5;
|
||||
}
|
||||
else if (GetBattlerSide(gTasks[taskId].data[5]) == B_SIDE_PLAYER)
|
||||
{
|
||||
gSprites[spriteId].pos2.y = abs(r5);
|
||||
}
|
||||
else
|
||||
gSprites[spriteId].pos2.y = -abs(r5);
|
||||
if ((r8 > 0x7F && gTasks[taskId].data[11] == 0 && gTasks[taskId].data[12] == 1) || (r8 < 0x7F && gTasks[taskId].data[11] == 1 && gTasks[taskId].data[12] == 0))
|
||||
{
|
||||
gTasks[taskId].data[11] ^= 1;
|
||||
gTasks[taskId].data[12] ^= 1;
|
||||
if (--gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
gSprites[spriteId].pos2.x = 0;
|
||||
gSprites[spriteId].pos2.y = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80998B0(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]);
|
||||
sub_80758E0(spriteId, gBattleAnimArgs[4]);
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[4] = spriteId;
|
||||
gTasks[taskId].data[10] = 0x100;
|
||||
gTasks[taskId].data[11] = 0x100;
|
||||
gTasks[taskId].func = sub_8099908;
|
||||
}
|
||||
|
||||
void sub_8099908(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
gTasks[taskId].data[10] += gTasks[taskId].data[0];
|
||||
gTasks[taskId].data[11] += gTasks[taskId].data[1];
|
||||
spriteId = gTasks[taskId].data[4];
|
||||
obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
|
||||
if (--gTasks[taskId].data[2] == 0)
|
||||
{
|
||||
if (gTasks[taskId].data[3] > 0)
|
||||
{
|
||||
gTasks[taskId].data[0] = -gTasks[taskId].data[0];
|
||||
gTasks[taskId].data[1] = -gTasks[taskId].data[1];
|
||||
gTasks[taskId].data[2] = gTasks[taskId].data[3];
|
||||
gTasks[taskId].data[3] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_8075980(spriteId);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8099980(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
|
||||
sub_80758E0(spriteId, 0);
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[0];
|
||||
if (gBattleAnimArgs[3] != 1)
|
||||
gTasks[taskId].data[3] = 0;
|
||||
else
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = spriteId;
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[3];
|
||||
if (sub_8073788())
|
||||
gTasks[taskId].data[7] = 1;
|
||||
else
|
||||
{
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : 0;
|
||||
else
|
||||
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER ? 1 : 0;
|
||||
}
|
||||
if (gTasks[taskId].data[7] && !sub_8073788())
|
||||
{
|
||||
s16 tmp;
|
||||
tmp = gTasks[taskId].data[3];
|
||||
gTasks[taskId].data[3] = -tmp;
|
||||
tmp = gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[4] = -tmp;
|
||||
}
|
||||
gTasks[taskId].func = sub_8099B54;
|
||||
}
|
||||
|
||||
void sub_8099A78(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
|
||||
sub_80758E0(spriteId, 0);
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[0];
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
}
|
||||
if (gBattleAnimArgs[3] != 1)
|
||||
gTasks[taskId].data[3] = 0;
|
||||
else
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = spriteId;
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[7] = 1;
|
||||
if (gTasks[taskId].data[7] )
|
||||
{
|
||||
s16 tmp;
|
||||
tmp = gTasks[taskId].data[3];
|
||||
gTasks[taskId].data[3] = -tmp;
|
||||
tmp = gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[4] = -tmp;
|
||||
}
|
||||
gTasks[taskId].func = sub_8099B54;
|
||||
}
|
||||
|
||||
void sub_8099B54(u8 taskId)
|
||||
{
|
||||
s16 tmp;
|
||||
gTasks[taskId].data[3] += gTasks[taskId].data[4];
|
||||
obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
|
||||
if (gTasks[taskId].data[7])
|
||||
sub_80759DC(gTasks[taskId].data[5]);
|
||||
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
|
||||
{
|
||||
switch (gTasks[taskId].data[6])
|
||||
{
|
||||
case 1:
|
||||
sub_8075980(gTasks[taskId].data[5]);
|
||||
// fallthrough
|
||||
case 0:
|
||||
default:
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
case 2:
|
||||
gTasks[taskId].data[1] = 0;
|
||||
tmp = gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[4] = -tmp;
|
||||
gTasks[taskId].data[6] = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8099BD4(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
gTasks[taskId].data[15] = gUnknown_2037EEC / 12;
|
||||
if (gTasks[taskId].data[15] < 1)
|
||||
gTasks[taskId].data[15] = 1;
|
||||
if (gTasks[taskId].data[15] > 16)
|
||||
gTasks[taskId].data[15] = 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[15] = gUnknown_2037EE8 / 12;
|
||||
if (gTasks[taskId].data[15] < 1)
|
||||
gTasks[taskId].data[15] = 1;
|
||||
if (gTasks[taskId].data[15] > 16)
|
||||
gTasks[taskId].data[15] = 16;
|
||||
}
|
||||
gTasks[taskId].data[14] = gTasks[taskId].data[15] / 2;
|
||||
gTasks[taskId].data[13] = gTasks[taskId].data[14] + (gTasks[taskId].data[15] & 1);
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].data[10] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[11] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[7] = GetAnimBankSpriteId(1);
|
||||
gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x;
|
||||
gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y;
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = sub_8099CB8;
|
||||
}
|
||||
|
||||
void sub_8099CB8(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
if (++task->data[0] > task->data[1])
|
||||
{
|
||||
task->data[0] = 0;
|
||||
task->data[12] = (task->data[12] + 1) & 1;
|
||||
if (task->data[10])
|
||||
{
|
||||
if (task->data[12])
|
||||
{
|
||||
gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13];
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14];
|
||||
}
|
||||
}
|
||||
if (task->data[11])
|
||||
{
|
||||
if (task->data[12])
|
||||
{
|
||||
gSprites[task->data[7]].pos2.y = task->data[15];
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[task->data[7]].pos2.y = 0;
|
||||
}
|
||||
}
|
||||
if (!--task->data[2])
|
||||
{
|
||||
gSprites[task->data[7]].pos2.x = 0;
|
||||
gSprites[task->data[7]].pos2.y = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user