Fly field effect
This commit is contained in:
-1545
File diff suppressed because it is too large
Load Diff
@@ -6,60 +6,6 @@
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
sUseFlyEffectFuncs:: @ 83CC178 dataptr (incomplete)
|
||||
.4byte UseFlyEffect_1
|
||||
.4byte UseFlyEffect_2
|
||||
.4byte UseFlyEffect_3
|
||||
.4byte UseFlyEffect_4
|
||||
.4byte UseFlyEffect_5
|
||||
.4byte UseFlyEffect_6
|
||||
.4byte UseFlyEffect_7
|
||||
.4byte UseFlyEffect_8
|
||||
.4byte UseFlyEffect_9
|
||||
|
||||
gUnknown_83CC19C:: @ 83CC19C affineanimcmd
|
||||
obj_rot_scal_anim_frame 8, 8, 226, 0
|
||||
obj_rot_scal_anim_frame 28, 28, 0, 30
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_83CC1B4:: @ 83CC1B4 affineanimcmd
|
||||
obj_rot_scal_anim_frame 256, 256, 64, 0
|
||||
obj_rot_scal_anim_frame -10, -10, 0, 22
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
.align 2
|
||||
gUnknown_83CC1CC:: @ 83CC1CC dataptr
|
||||
.4byte gUnknown_83CC19C
|
||||
.4byte gUnknown_83CC1B4
|
||||
|
||||
.align 2
|
||||
gUnknown_83CC1D4:: @ 83CC1D4 dataptr
|
||||
.4byte sub_80874C8
|
||||
.4byte sub_80875C8
|
||||
.4byte sub_8087644
|
||||
.4byte sub_8087698
|
||||
.4byte sub_8087710
|
||||
.4byte sub_8087748
|
||||
.4byte fishE
|
||||
|
||||
gUnknown_83CC1F0:: @ 83CC1F0 data16
|
||||
.2byte 0xfffe, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8, 0xfff8, 0xfff8, 0xfff9, 0xfff9, 0xfffa, 0xfffb, 0xfffd, 0xfffe, 0x0000, 0x0002
|
||||
.2byte 0x0004, 0x0008
|
||||
|
||||
gUnknown_83CC214:: @ 83CC214 affineanimcmd
|
||||
obj_rot_scal_anim_frame 24, 24, 0, 1
|
||||
obj_rot_scal_anim_jump 0
|
||||
|
||||
gUnknown_83CC224:: @ 83CC224 affineanimcmd
|
||||
obj_rot_scal_anim_frame 512, 512, 0, 1
|
||||
obj_rot_scal_anim_frame -16, -16, 0, 1
|
||||
obj_rot_scal_anim_jump 1
|
||||
|
||||
.align 2
|
||||
gUnknown_83CC23C:: @ 83CC23C dataptr
|
||||
.4byte gUnknown_83CC214
|
||||
.4byte gUnknown_83CC224
|
||||
|
||||
gUnknown_83CC244:: @ 83CC244 dataptr
|
||||
.4byte sub_8087C00
|
||||
.4byte sub_8087C2C
|
||||
|
||||
@@ -131,5 +131,6 @@ extern const struct OamData gObjectEventBaseOam_32x32;
|
||||
extern const struct UCoords16 gUnknown_83A64C8[];
|
||||
extern const u16 gUnknown_8398648[];
|
||||
extern const u16 gUnknown_8398688[];
|
||||
void sub_805F724(struct ObjectEvent *, s16 x, s16 y);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
u8 sub_8154228(void);
|
||||
bool8 sub_8155DA0(struct ObjectEvent *);
|
||||
void sub_80DC44C(u8, u8);
|
||||
void sub_80DC478(u8, u8);
|
||||
void StartAshFieldEffect(s16, s16, u16, s16);
|
||||
|
||||
#endif //GUARD_FIELD_EFFECT_HELPERS_H
|
||||
|
||||
@@ -3039,3 +3039,588 @@ void UseVsSeekerEffect_4(struct Task * task)
|
||||
DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker));
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8086D94(struct Sprite * sprite);
|
||||
|
||||
u8 FldEff_NpcFlyOut(void)
|
||||
{
|
||||
u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1);
|
||||
struct Sprite * sprite = &gSprites[spriteId];
|
||||
|
||||
sprite->oam.paletteNum = 0;
|
||||
sprite->oam.priority = 1;
|
||||
sprite->callback = sub_8086D94;
|
||||
sprite->data[1] = gFieldEffectArguments[0];
|
||||
PlaySE(SE_W019);
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
void sub_8086D94(struct Sprite * sprite)
|
||||
{
|
||||
struct Sprite * npcSprite;
|
||||
|
||||
sprite->pos2.x = Cos(sprite->data[2], 0x8c);
|
||||
sprite->pos2.y = Sin(sprite->data[2], 0x48);
|
||||
sprite->data[2] = (sprite->data[2] + 4) & 0xff;
|
||||
if (sprite->data[0])
|
||||
{
|
||||
npcSprite = &gSprites[sprite->data[1]];
|
||||
npcSprite->coordOffsetEnabled = 0;
|
||||
npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x;
|
||||
npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
|
||||
npcSprite->pos2.x = 0;
|
||||
npcSprite->pos2.y = 0;
|
||||
}
|
||||
if (sprite->data[2] >= 0x80)
|
||||
{
|
||||
FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
|
||||
}
|
||||
}
|
||||
|
||||
void Task_UseFly(u8 taskId);
|
||||
void UseFlyEffect_1(struct Task * task);
|
||||
void UseFlyEffect_2(struct Task * task);
|
||||
void UseFlyEffect_3(struct Task * task);
|
||||
void UseFlyEffect_4(struct Task * task);
|
||||
void UseFlyEffect_5(struct Task * task);
|
||||
void UseFlyEffect_6(struct Task * task);
|
||||
void UseFlyEffect_7(struct Task * task);
|
||||
void UseFlyEffect_8(struct Task * task);
|
||||
void UseFlyEffect_9(struct Task * task);
|
||||
u8 sub_8087168(void);
|
||||
bool8 sub_80871AC(u8 flyBlobSpriteId);
|
||||
void sub_80871C8(u8 flyBlobSpriteId);
|
||||
void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId);
|
||||
void sub_8087220(struct Sprite * sprite);
|
||||
void sub_80872F0(struct Sprite * sprite);
|
||||
void sub_80877FC(struct Sprite * sprite, u8 affineAnimId);
|
||||
void sub_8087828(struct Sprite * sprite);
|
||||
|
||||
void (*const sUseFlyEffectFuncs[])(struct Task * ) = {
|
||||
UseFlyEffect_1,
|
||||
UseFlyEffect_2,
|
||||
UseFlyEffect_3,
|
||||
UseFlyEffect_4,
|
||||
UseFlyEffect_5,
|
||||
UseFlyEffect_6,
|
||||
UseFlyEffect_7,
|
||||
UseFlyEffect_8,
|
||||
UseFlyEffect_9
|
||||
};
|
||||
|
||||
u8 FldEff_UseFly(void)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_UseFly, 0xfe);
|
||||
gTasks[taskId].data[1] = gFieldEffectArguments[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Task_UseFly(u8 taskId)
|
||||
{
|
||||
sUseFlyEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
|
||||
}
|
||||
|
||||
void UseFlyEffect_1(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
|
||||
{
|
||||
task->data[15] = gPlayerAvatar.flags;
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
SetPlayerAvatarStateMask(1);
|
||||
sub_805CB70();
|
||||
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_2(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
|
||||
{
|
||||
task->data[0]++;
|
||||
gFieldEffectArguments[0] = task->data[1];
|
||||
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_3(struct Task * task)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (task->data[15] & 0x08)
|
||||
{
|
||||
sub_80DC44C(objectEvent->mapobj_unk_1A, 2);
|
||||
sub_80DC478(objectEvent->mapobj_unk_1A, 0);
|
||||
}
|
||||
task->data[1] = sub_8087168();
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_4(struct Task * task)
|
||||
{
|
||||
if (sub_80871AC(task->data[1]))
|
||||
{
|
||||
task->data[0]++;
|
||||
task->data[2] = 16;
|
||||
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_5(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent))
|
||||
{
|
||||
task->data[0]++;
|
||||
PlaySE(SE_W019);
|
||||
sub_80871C8(task->data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_6(struct Task * task)
|
||||
{
|
||||
if ((++task->data[2]) >= 8)
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
|
||||
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
|
||||
objectEvent->inanimate = 1;
|
||||
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT);
|
||||
task->data[0]++;
|
||||
task->data[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_7(struct Task * task)
|
||||
{
|
||||
if ((++task->data[2]) >= 10)
|
||||
{
|
||||
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
ObjectEventClearAnimIfSpecialAnimActive(objectEvent);
|
||||
objectEvent->inanimate = 0;
|
||||
objectEvent->hasShadow = 0;
|
||||
sub_8087204(task->data[1], objectEvent->spriteId);
|
||||
StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 1);
|
||||
sub_80877FC(&gSprites[task->data[1]], 0);
|
||||
gSprites[task->data[1]].callback = sub_8087828;
|
||||
CameraObjectReset2();
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_8(struct Task * task)
|
||||
{
|
||||
if (sub_80871AC(task->data[1]))
|
||||
{
|
||||
WarpFadeOutScreen();
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void UseFlyEffect_9(struct Task * task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_FLY);
|
||||
DestroyTask(FindTaskIdByFunc(Task_UseFly));
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_8087168(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1);
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->oam.paletteNum = 0;
|
||||
sprite->oam.priority = 1;
|
||||
sprite->callback = sub_8087220;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u8 sub_80871AC(u8 spriteId)
|
||||
{
|
||||
return gSprites[spriteId].data[7];
|
||||
}
|
||||
|
||||
void sub_80871C8(u8 spriteId)
|
||||
{
|
||||
struct Sprite * sprite;
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->callback = sub_80872F0;
|
||||
sprite->pos1.x = 0x78;
|
||||
sprite->pos1.y = 0x00;
|
||||
sprite->pos2.x = 0;
|
||||
sprite->pos2.y = 0;
|
||||
memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */);
|
||||
sprite->data[6] = 0x40;
|
||||
}
|
||||
|
||||
void sub_8087204(u8 a0, u8 a1)
|
||||
{
|
||||
gSprites[a0].data[6] = a1;
|
||||
}
|
||||
|
||||
const union AffineAnimCmd gUnknown_83CC19C[] = {
|
||||
AFFINEANIMCMD_FRAME( 8, 8, 226, 0),
|
||||
AFFINEANIMCMD_FRAME(28, 28, 0, 30),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_83CC1B4[] = {
|
||||
AFFINEANIMCMD_FRAME(256, 256, 64, 0),
|
||||
AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_83CC1CC[] = {
|
||||
gUnknown_83CC19C,
|
||||
gUnknown_83CC1B4
|
||||
};
|
||||
|
||||
void sub_8087220(struct Sprite * sprite)
|
||||
{
|
||||
if (sprite->data[7] == 0)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
sprite->affineAnims = gUnknown_83CC1CC;
|
||||
InitSpriteAffineAnim(sprite);
|
||||
StartSpriteAffineAnim(sprite, 0);
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
sprite->pos1.x = 0x80;
|
||||
else
|
||||
sprite->pos1.x = 0x76;
|
||||
sprite->pos1.y = -0x30;
|
||||
sprite->data[0]++;
|
||||
sprite->data[1] = 0x40;
|
||||
sprite->data[2] = 0x100;
|
||||
}
|
||||
sprite->data[1] += (sprite->data[2] >> 8);
|
||||
sprite->pos2.x = Cos(sprite->data[1], 0x78);
|
||||
sprite->pos2.y = Sin(sprite->data[1], 0x78);
|
||||
if (sprite->data[2] < 0x800)
|
||||
{
|
||||
sprite->data[2] += 0x60;
|
||||
}
|
||||
if (sprite->data[1] > 0x81)
|
||||
{
|
||||
sprite->data[7]++;
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80872F0(struct Sprite * sprite)
|
||||
{
|
||||
sprite->pos2.x = Cos(sprite->data[2], 0x8c);
|
||||
sprite->pos2.y = Sin(sprite->data[2], 0x48);
|
||||
sprite->data[2] = (sprite->data[2] + 4) & 0xff;
|
||||
if (sprite->data[6] != MAX_SPRITES)
|
||||
{
|
||||
struct Sprite * sprite1 = &gSprites[sprite->data[6]];
|
||||
sprite1->coordOffsetEnabled = 0;
|
||||
sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x;
|
||||
sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
|
||||
sprite1->pos2.x = 0;
|
||||
sprite1->pos2.y = 0;
|
||||
}
|
||||
if (sprite->data[2] >= 0x80)
|
||||
{
|
||||
sprite->data[7] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8087364(struct Sprite * sprite)
|
||||
{
|
||||
if (sprite->data[7] == 0)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
sprite->affineAnims = gUnknown_83CC1CC;
|
||||
InitSpriteAffineAnim(sprite);
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
sprite->pos1.x = 0x70;
|
||||
else
|
||||
sprite->pos1.x = 0x64;
|
||||
sprite->pos1.y = -0x20;
|
||||
sprite->data[0]++;
|
||||
sprite->data[1] = 0xf0;
|
||||
sprite->data[2] = 0x800;
|
||||
sprite->data[4] = 0x80;
|
||||
}
|
||||
sprite->data[1] += sprite->data[2] >> 8;
|
||||
sprite->data[3] += sprite->data[2] >> 8;
|
||||
sprite->data[1] &= 0xff;
|
||||
sprite->pos2.x = Cos(sprite->data[1], 0x20);
|
||||
sprite->pos2.y = Sin(sprite->data[1], 0x78);
|
||||
if (sprite->data[2] > 0x100)
|
||||
{
|
||||
sprite->data[2] -= sprite->data[4];
|
||||
}
|
||||
if (sprite->data[4] < 0x100)
|
||||
{
|
||||
sprite->data[4] += 24;
|
||||
}
|
||||
if (sprite->data[2] < 0x100)
|
||||
{
|
||||
sprite->data[2] = 0x100;
|
||||
}
|
||||
if (sprite->data[3] >= 60)
|
||||
{
|
||||
sprite->data[7]++;
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8087458(u8 spriteId)
|
||||
{
|
||||
sub_80871C8(spriteId);
|
||||
gSprites[spriteId].callback = sub_8087364;
|
||||
}
|
||||
|
||||
void Task_FldEffFlyIn(u8 taskId);
|
||||
void FlyInEffect_1(struct Task * task);
|
||||
void FlyInEffect_2(struct Task * task);
|
||||
void FlyInEffect_3(struct Task * task);
|
||||
void FlyInEffect_4(struct Task * task);
|
||||
void FlyInEffect_5(struct Task * task);
|
||||
void FlyInEffect_6(struct Task * task);
|
||||
void FlyInEffect_7(struct Task * task);
|
||||
void sub_80878C0(struct Sprite * sprite);
|
||||
|
||||
void (*const sFlyInEffectFuncs[])(struct Task * task) = {
|
||||
FlyInEffect_1,
|
||||
FlyInEffect_2,
|
||||
FlyInEffect_3,
|
||||
FlyInEffect_4,
|
||||
FlyInEffect_5,
|
||||
FlyInEffect_6,
|
||||
FlyInEffect_7
|
||||
};
|
||||
|
||||
u32 FldEff_FlyIn(void)
|
||||
{
|
||||
CreateTask(Task_FldEffFlyIn, 0xfe);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Task_FldEffFlyIn(u8 taskId)
|
||||
{
|
||||
sFlyInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
|
||||
}
|
||||
|
||||
void FlyInEffect_1(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent;
|
||||
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
|
||||
{
|
||||
task->data[0]++;
|
||||
task->data[2] = 33;
|
||||
task->data[15] = gPlayerAvatar.flags;
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
SetPlayerAvatarStateMask(0x01);
|
||||
if (task->data[15] & 0x08)
|
||||
{
|
||||
sub_80DC44C(objectEvent->mapobj_unk_1A, 0);
|
||||
}
|
||||
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
|
||||
CameraObjectReset2();
|
||||
ObjectEventTurn(objectEvent, DIR_WEST);
|
||||
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
|
||||
objectEvent->invisible = FALSE;
|
||||
task->data[1] = sub_8087168();
|
||||
sub_80871C8(task->data[1]);
|
||||
sub_8087204(task->data[1], objectEvent->spriteId);
|
||||
StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 2);
|
||||
sub_80877FC(&gSprites[task->data[1]], 1);
|
||||
gSprites[task->data[1]].callback = sub_8087828;
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_2(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent;
|
||||
struct Sprite * sprite;
|
||||
sub_80878C0(&gSprites[task->data[1]]);
|
||||
if (task->data[2] == 0 || (--task->data[2]) == 0)
|
||||
{
|
||||
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
sprite = &gSprites[objectEvent->spriteId];
|
||||
sub_8087204(task->data[1], 0x40);
|
||||
sprite->pos1.x += sprite->pos2.x;
|
||||
sprite->pos1.y += sprite->pos2.y;
|
||||
sprite->pos2.x = 0;
|
||||
sprite->pos2.y = 0;
|
||||
task->data[0]++;
|
||||
task->data[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_3(struct Task * task)
|
||||
{
|
||||
s16 gUnknown_83CC1F0[18] = {
|
||||
-2,
|
||||
-4,
|
||||
-5,
|
||||
-6,
|
||||
-7,
|
||||
-8,
|
||||
-8,
|
||||
-8,
|
||||
-7,
|
||||
-7,
|
||||
-6,
|
||||
-5,
|
||||
-3,
|
||||
-2,
|
||||
0,
|
||||
2,
|
||||
4,
|
||||
8
|
||||
};
|
||||
struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId];
|
||||
sprite->pos2.y = gUnknown_83CC1F0[task->data[2]];
|
||||
if ((++task->data[2]) >= 18)
|
||||
{
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_4(struct Task * task)
|
||||
{
|
||||
struct ObjectEvent * objectEvent;
|
||||
struct Sprite * sprite;
|
||||
if (sub_80871AC(task->data[1]))
|
||||
{
|
||||
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
sprite = &gSprites[objectEvent->spriteId];
|
||||
objectEvent->inanimate = 0;
|
||||
sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y);
|
||||
sprite->pos2.x = 0;
|
||||
sprite->pos2.y = 0;
|
||||
sprite->coordOffsetEnabled = 1;
|
||||
sub_805CB70();
|
||||
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
|
||||
task->data[0]++;
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_5(struct Task * task)
|
||||
{
|
||||
if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId]))
|
||||
{
|
||||
task->data[0]++;
|
||||
sub_8087458(task->data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_6(struct Task * task)
|
||||
{
|
||||
if (sub_80871AC(task->data[1]))
|
||||
{
|
||||
DestroySprite(&gSprites[task->data[1]]);
|
||||
task->data[0]++;
|
||||
task->data[1] = 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
void FlyInEffect_7(struct Task * task)
|
||||
{
|
||||
u8 state;
|
||||
struct ObjectEvent * objectEvent;
|
||||
if ((--task->data[1]) == 0)
|
||||
{
|
||||
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
state = 0;
|
||||
if (task->data[15] & 0x08)
|
||||
{
|
||||
state = 2;
|
||||
sub_80DC44C(objectEvent->mapobj_unk_1A, 1);
|
||||
}
|
||||
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state));
|
||||
ObjectEventTurn(objectEvent, DIR_SOUTH);
|
||||
gPlayerAvatar.flags = task->data[15];
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
FieldEffectActiveListRemove(FLDEFF_FLY_IN);
|
||||
DestroyTask(FindTaskIdByFunc(Task_FldEffFlyIn));
|
||||
}
|
||||
}
|
||||
|
||||
const union AffineAnimCmd gUnknown_83CC214[] = {
|
||||
AFFINEANIMCMD_FRAME(24, 24, 0, 1),
|
||||
AFFINEANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_83CC224[] = {
|
||||
AFFINEANIMCMD_FRAME(512, 512, 0, 1),
|
||||
AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
|
||||
AFFINEANIMCMD_JUMP(1)
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_83CC23C[] = {
|
||||
gUnknown_83CC214,
|
||||
gUnknown_83CC224
|
||||
};
|
||||
|
||||
void sub_80877FC(struct Sprite * sprite, u8 affineAnimId)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
sprite->affineAnims = gUnknown_83CC23C;
|
||||
InitSpriteAffineAnim(sprite);
|
||||
StartSpriteAffineAnim(sprite, affineAnimId);
|
||||
}
|
||||
|
||||
void sub_8087828(struct Sprite * sprite)
|
||||
{
|
||||
struct Sprite * sprite2;
|
||||
sprite->pos2.x = Cos(sprite->data[2], 0xB4);
|
||||
sprite->pos2.y = Sin(sprite->data[2], 0x48);
|
||||
sprite->data[2] += 2;
|
||||
sprite->data[2] &= 0xFF;
|
||||
if (sprite->data[6] != MAX_SPRITES)
|
||||
{
|
||||
sprite2 = &gSprites[sprite->data[6]];
|
||||
sprite2->coordOffsetEnabled = FALSE;
|
||||
sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x;
|
||||
sprite2->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
|
||||
sprite2->pos2.x = 0;
|
||||
sprite2->pos2.y = 0;
|
||||
}
|
||||
if (sprite->data[2] >= 0x80)
|
||||
{
|
||||
sprite->data[7] = 1;
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80878C0(struct Sprite * sprite)
|
||||
{
|
||||
if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
|
||||
{
|
||||
if (gOamMatrices[sprite->oam.matrixNum].a == 0x100 || gOamMatrices[sprite->oam.matrixNum].d == 0x100)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
|
||||
StartSpriteAnim(sprite, 0);
|
||||
sprite->callback = sub_80872F0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user