mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-12 15:06:42 -05:00
197 lines
5.3 KiB
C
197 lines
5.3 KiB
C
#include "global.h"
|
|
#include "bike.h"
|
|
#include "script.h"
|
|
#include "task.h"
|
|
#include "field_player_avatar.h"
|
|
#include "event_object_movement.h"
|
|
#include "field_effect.h"
|
|
#include "field_effect_helpers.h"
|
|
#include "quest_log.h"
|
|
|
|
static void sub_81504A8(void);
|
|
static void sub_81504E8(void);
|
|
static void sub_8150530(void);
|
|
static void sub_81505C4(u8 taskId);
|
|
static void sub_8150708(void);
|
|
static void sub_815077C(void);
|
|
static void sub_8150794(u8 taskId);
|
|
static void sub_81507CC(void);
|
|
static void sub_81507D8(void);
|
|
static void sub_81507E4(void);
|
|
static void sub_81507F0(void);
|
|
static void sub_81507BC(struct ObjectEvent *a0, u8 a1);
|
|
|
|
static void (*const gUnknown_8471EDC[])(void) = {
|
|
sub_81504A8,
|
|
sub_81504E8,
|
|
sub_8150530,
|
|
sub_8150708,
|
|
sub_81507CC,
|
|
sub_81507D8,
|
|
sub_81507E4,
|
|
sub_81507F0,
|
|
sub_815077C
|
|
};
|
|
|
|
void sub_8150454(u8 a0)
|
|
{
|
|
if (a0 < ARRAY_COUNT(gUnknown_8471EDC))
|
|
gUnknown_8471EDC[a0]();
|
|
}
|
|
|
|
bool8 sub_8150474(u8 a0)
|
|
{
|
|
if (gUnknown_3005E88 == 2)
|
|
{
|
|
sub_8112720(a0);
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void sub_8150498(u8 a0)
|
|
{
|
|
return sub_8150454(a0);
|
|
}
|
|
|
|
static void sub_81504A8(void)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
|
|
ObjectEventTurn(objectEvent, objectEvent->placeholder18);
|
|
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
|
|
}
|
|
|
|
static void sub_81504E8(void)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(1));
|
|
ObjectEventTurn(objectEvent, objectEvent->placeholder18);
|
|
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE);
|
|
sub_80BD620(0, 0);
|
|
}
|
|
|
|
static void sub_8150530(void)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
|
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
|
|
|
|
if (gUnknown_3005E88 == 1 || gUnknown_3005E88 == 3)
|
|
{
|
|
u8 taskId;
|
|
ScriptContext2_Enable();
|
|
gPlayerAvatar.preventStep = TRUE;
|
|
taskId = CreateTask(sub_81505C4, 0xFF);
|
|
gTasks[taskId].data[0] = 0;
|
|
}
|
|
else
|
|
{
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
|
|
StartSpriteAnim(sprite, sub_80634F0(objectEvent->facingDirection));
|
|
}
|
|
}
|
|
|
|
static void sub_81505C4(u8 taskId)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
|
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
{
|
|
case 0:
|
|
ObjectEventClearAnimIfSpecialAnimActive(objectEvent);
|
|
objectEvent->enableAnim = TRUE;
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
|
|
StartSpriteAnim(sprite, sub_80634F0(objectEvent->facingDirection));
|
|
gTasks[taskId].data[0]++;
|
|
gTasks[taskId].data[1] = 0;
|
|
break;
|
|
case 1:
|
|
sub_805D9C4(sprite);
|
|
if (gTasks[taskId].data[1] < 60)
|
|
gTasks[taskId].data[1]++;
|
|
else
|
|
gTasks[taskId].data[0]++;
|
|
break;
|
|
case 2:
|
|
StartSpriteAnim(sprite, sub_8063500(GetPlayerFacingDirection()));
|
|
gTasks[taskId].data[0]++;
|
|
break;
|
|
case 3:
|
|
sub_805D9C4(sprite);
|
|
if (sprite->animEnded)
|
|
{
|
|
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
|
|
else
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
|
|
ObjectEventTurn(objectEvent, objectEvent->placeholder18);
|
|
sprite->pos2.x = 0;
|
|
sprite->pos2.y = 0;
|
|
ScriptContext2_Disable();
|
|
DestroyTask(taskId);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_8150708(void)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
|
u8 fieldEffectId;
|
|
|
|
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
|
|
{
|
|
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
|
|
ObjectEventTurn(objectEvent, objectEvent->placeholder18);
|
|
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
|
|
gFieldEffectArguments[0] = objectEvent->currentCoords.x;
|
|
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
|
|
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
|
|
fieldEffectId = FieldEffectStart(FLDEFF_SURF_BLOB);
|
|
objectEvent->mapobj_unk_1A = fieldEffectId;
|
|
sub_80DC44C(fieldEffectId, 1);
|
|
}
|
|
}
|
|
|
|
static void sub_815077C(void)
|
|
{
|
|
FieldEffectStart(FLDEFF_USE_VS_SEEKER);
|
|
CreateTask(sub_8150794, 0x00);
|
|
}
|
|
|
|
static void sub_8150794(u8 taskId)
|
|
{
|
|
if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER))
|
|
{
|
|
UnfreezeObjectEvents();
|
|
ScriptContext2_Disable();
|
|
DestroyTask(taskId);
|
|
}
|
|
}
|
|
|
|
static void sub_81507BC(struct ObjectEvent * a0, u8 a1)
|
|
{
|
|
ObjectEventSetGraphicsId(a0, a1);
|
|
}
|
|
|
|
static void sub_81507CC(void)
|
|
{
|
|
sub_805D154(1);
|
|
}
|
|
|
|
static void sub_81507D8(void)
|
|
{
|
|
sub_805D154(2);
|
|
}
|
|
|
|
static void sub_81507E4(void)
|
|
{
|
|
sub_805D154(3);
|
|
}
|
|
|
|
static void sub_81507F0(void)
|
|
{
|
|
sub_805D154(4);
|
|
}
|