summaryrefslogtreecommitdiff
path: root/src/field_effect.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-08 19:09:43 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-08 19:09:43 -0400
commit77c679492c15a5b30e4338d2366c2958d7cff4d9 (patch)
tree65910860d02e521f3631b75e167d9d46c7f7eb54 /src/field_effect.c
parent459f56eab50d34bf06c32ec06593340e0ce68702 (diff)
Dive field effect
Diffstat (limited to 'src/field_effect.c')
-rwxr-xr-xsrc/field_effect.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/field_effect.c b/src/field_effect.c
index 7c1c3f282..af6f5a36a 100755
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1417,3 +1417,51 @@ bool8 sub_8087058(struct Task *task, struct MapObject *mapObject)
FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
return FALSE;
}
+
+void Task_Dive(u8);
+extern const bool8 (*gUnknown_0839F330[3])(struct Task *);
+extern int dive_warp(struct MapPosition *, u16);
+
+bool8 FldEff_UseDive(void)
+{
+ u8 taskId;
+ taskId = CreateTask(Task_Dive, 0xff);
+ gTasks[taskId].data[15] = gUnknown_0202FF84[0];
+ gTasks[taskId].data[14] = gUnknown_0202FF84[1];
+ Task_Dive(taskId);
+ return FALSE;
+}
+
+void Task_Dive(u8 taskId)
+{
+ while (gUnknown_0839F330[gTasks[taskId].data[0]](&gTasks[taskId]));
+}
+
+bool8 sub_8087124(struct Task *task)
+{
+ gPlayerAvatar.unk6 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_2_unknown(struct Task *task)
+{
+ ScriptContext2_Enable();
+ gUnknown_0202FF84[0] = task->data[15];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_3_unknown(struct Task *task)
+{
+ struct MapPosition mapPosition;
+ PlayerGetDestCoords(&mapPosition.x, &mapPosition.y);
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E);
+ DestroyTask(FindTaskIdByFunc(Task_Dive));
+ FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
+ }
+ return FALSE;
+}