diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/field_effect.c | 72 | ||||
-rw-r--r-- | src/quest_log_player.c | 4 | ||||
-rw-r--r-- | src/vs_seeker.c | 4 |
3 files changed, 76 insertions, 4 deletions
diff --git a/src/field_effect.c b/src/field_effect.c index 9695e4900..3b710167d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2967,3 +2967,75 @@ void UseSurfEffect_5(struct Task * task) HelpSystem_SetSomeVariable2(22); } } + +void Task_FldEffUseVsSeeker(u8 taskId); +void UseVsSeekerEffect_1(struct Task * task); +void UseVsSeekerEffect_2(struct Task * task); +void UseVsSeekerEffect_3(struct Task * task); +void UseVsSeekerEffect_4(struct Task * task); + +void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { + UseVsSeekerEffect_1, + UseVsSeekerEffect_2, + UseVsSeekerEffect_3, + UseVsSeekerEffect_4 +}; + +u32 FldEff_UseVsSeeker(void) +{ + if (gQuestLogState == QL_STATE_1) + sub_811278C(8, 89); + CreateTask(Task_FldEffUseVsSeeker, 0xFF); + return 0; +} + +void Task_FldEffUseVsSeeker(u8 taskId) +{ + sUseVsSeekerEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseVsSeekerEffect_1(struct Task * task) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; +} + +void UseVsSeekerEffect_2(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) + { + sub_805CBE8(); + ObjectEventSetHeldMovement(playerObj, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseVsSeekerEffect_3(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(1)); + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(2)); + else + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(0)); + ObjectEventForceSetSpecialAnim(playerObj, GetFaceDirectionMovementAction(playerObj->facingDirection)); + task->data[0]++; + } +} + +void UseVsSeekerEffect_4(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + gPlayerAvatar.preventStep = FALSE; + FieldEffectActiveListRemove(FLDEFF_USE_VS_SEEKER); + DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker)); + } +} diff --git a/src/quest_log_player.c b/src/quest_log_player.c index c6b5db4f9..ccf0565fb 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -156,13 +156,13 @@ static void sub_8150708(void) static void sub_815077C(void) { - FieldEffectStart(FLDEFF_UNK_41); + FieldEffectStart(FLDEFF_USE_VS_SEEKER); CreateTask(sub_8150794, 0x00); } static void sub_8150794(u8 taskId) { - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { UnfreezeObjectEvents(); ScriptContext2_Disable(); diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 135a11575..1424cfe29 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -748,7 +748,7 @@ void Task_VsSeeker_0(u8 taskId) else if (respval == 2) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff); - FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum + FieldEffectStart(FLDEFF_USE_VS_SEEKER); // TODO: name this enum gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; } @@ -774,7 +774,7 @@ static void Task_VsSeeker_2(u8 taskId) data[2]++; } - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { data[1] = 0; data[2] = 0; |