diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-08 18:51:43 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-08 18:51:43 -0400 |
commit | 459f56eab50d34bf06c32ec06593340e0ce68702 (patch) | |
tree | 971dd46e127499e7cf2b3b5dc9ac91a3241b40fd /src/field_effect.c | |
parent | 3da6d1f0007a61e808a57bd33a5068a1a241bf5f (diff) |
Waterfall field effect
Diffstat (limited to 'src/field_effect.c')
-rwxr-xr-x | src/field_effect.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/field_effect.c b/src/field_effect.c index f3319169f..7c1c3f282 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -17,6 +17,7 @@ #include "field_player_avatar.h" #include "field_map_obj_helpers.h" #include "field_map_obj.h" +#include "metatile_behavior.h" #include "field_camera.h" #include "field_effect.h" @@ -1343,3 +1344,76 @@ bool8 sub_8086ED4(struct Task *task) } return FALSE; } + +void sub_8086F64(u8); +extern const bool8 (*gUnknown_0839F31C[5])(struct Task *, struct MapObject *); + +bool8 FldEff_UseWaterfall(void) +{ + u8 taskId; + taskId = CreateTask(sub_8086F64, 0xff); + gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + sub_8086F64(taskId); + return FALSE; +} + +void sub_8086F64(u8 taskId) +{ + while (gUnknown_0839F31C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])); +} + +bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return FALSE; +} + +bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject) +{ + ScriptContext2_Enable(); + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) + { + FieldObjectClearAnimIfSpecialAnimFinished(mapObject); + gUnknown_0202FF84[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + } + return FALSE; +} + +bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject) +{ + if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + return FALSE; + } + task->data[0]++; + return TRUE; +} + +bool8 sub_8087030(struct Task *task, struct MapObject *mapObject) +{ + FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH)); + task->data[0]++; + return FALSE; +} + +bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) +{ + if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + return FALSE; + } + if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E)) + { + task->data[0] = 3; + return TRUE; + } + ScriptContext2_Disable(); + gPlayerAvatar.unk6 = 0; + DestroyTask(FindTaskIdByFunc(sub_8086F64)); + FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); + return FALSE; +} |