summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/field_tasks.s186
-rwxr-xr-xsrc/field_tasks.c60
2 files changed, 60 insertions, 186 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 6a7176104..5b6e5a81d 100755
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -6,192 +6,6 @@
.text
- thumb_func_start PerStepCallback_8069864
-PerStepCallback_8069864: @ 8069864
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08069898 @ =gTasks + 0x8
- adds r4, r1, r0
- mov r5, sp
- adds r5, 0x2
- mov r0, sp
- adds r1, r5, 0
- bl PlayerGetDestCoords
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- adds r6, r5, 0
- cmp r0, 0x1
- beq _080698BE
- cmp r0, 0x1
- bgt _0806989C
- cmp r0, 0
- beq _080698A2
- b _080699CE
- .align 2, 0
-_08069898: .4byte gTasks + 0x8
-_0806989C:
- cmp r0, 0x2
- beq _0806998C
- b _080699CE
-_080698A2:
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x4]
- ldrh r0, [r5]
- strh r0, [r4, 0x6]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r3, 0
- ldrsh r1, [r5, r3]
- movs r2, 0x1
- bl sub_80696E4
- b _080699CA
-_080698BE:
- mov r0, sp
- movs r7, 0
- ldrsh r1, [r0, r7]
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080698D8
- movs r3, 0
- ldrsh r1, [r5, r3]
- movs r7, 0x6
- ldrsh r0, [r4, r7]
- cmp r1, r0
- beq _080699CE
-_080698D8:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r5, 0x6
- ldrsh r3, [r4, r5]
- bl sub_806972C
- cmp r0, 0
- beq _08069920
- movs r7, 0x4
- ldrsh r0, [r4, r7]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- movs r2, 0x1
- bl sub_80696C0
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- movs r5, 0x6
- ldrsh r1, [r4, r5]
- movs r2, 0
- bl sub_8069708
- ldrh r0, [r4, 0x4]
- strh r0, [r4, 0x8]
- ldrh r0, [r4, 0x6]
- strh r0, [r4, 0xA]
- movs r0, 0x2
- strh r0, [r4, 0x2]
- movs r0, 0x8
- strh r0, [r4, 0xC]
- b _0806992A
-_08069920:
- movs r7, 0x1
- negs r7, r7
- adds r0, r7, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xA]
-_0806992A:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r5, r6, 0
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r7, 0x6
- ldrsh r3, [r4, r7]
- bl sub_80697C8
- cmp r0, 0
- beq _0806995E
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r2, 0x1
- bl sub_80696C0
- movs r0, 0x2
- strh r0, [r4, 0x2]
- movs r0, 0x8
- strh r0, [r4, 0xC]
-_0806995E:
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x4]
- ldrh r0, [r6]
- strh r0, [r4, 0x6]
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r5, 0
- ldrsh r1, [r6, r5]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsPacifidlogLog
- lsls r0, 24
- cmp r0, 0
- beq _080699CE
- movs r0, 0x46
- bl PlaySE
- b _080699CE
-_0806998C:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080699CE
- mov r0, sp
- movs r7, 0
- ldrsh r0, [r0, r7]
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r2, 0x1
- bl sub_80696E4
- movs r3, 0x8
- ldrsh r0, [r4, r3]
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _080699CA
- movs r5, 0xA
- ldrsh r0, [r4, r5]
- cmp r0, r1
- beq _080699CA
- movs r7, 0x8
- ldrsh r0, [r4, r7]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- movs r2, 0x1
- bl sub_8069708
-_080699CA:
- movs r0, 0x1
- strh r0, [r4, 0x2]
-_080699CE:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end PerStepCallback_8069864
-
thumb_func_start sub_80699D8
sub_80699D8: @ 80699D8
push {r4,r5,lr}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 34cbc9796..407fa7776 100755
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -12,7 +12,10 @@
#include "secret_base.h"
#include "metatile_behavior.h"
#include "fieldmap.h"
+#include "field_player_avatar.h"
#include "field_camera.h"
+#include "songs.h"
+#include "sound.h"
#include "field_tasks.h"
void DummyPerStepCallback(u8);
@@ -351,3 +354,60 @@ bool8 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2)
}
return TRUE;
}
+
+void PerStepCallback_8069864(u8 taskId)
+{
+ s16 x, y;
+ s16 *data = gTasks[taskId].data;
+ PlayerGetDestCoords(&x, &y);
+ switch (data[1])
+ {
+ case 0:
+ data[2] = x;
+ data[3] = y;
+ sub_80696E4(x, y, TRUE);
+ data[1] = 1;
+ break;
+ case 1:
+ if (x != data[2] || y != data[3])
+ {
+ if (sub_806972C(x, y, data[2], data[3]))
+ {
+ sub_80696C0(data[2], data[3], TRUE);
+ sub_8069708(data[2], data[3], FALSE);
+ data[4] = data[2];
+ data[5] = data[3];
+ data[1] = 2;
+ data[6] = 8;
+ }
+ else
+ {
+ data[4] = -1;
+ data[5] = -1;
+ }
+ if (sub_80697C8(x, y, data[2], data[3]))
+ {
+ sub_80696C0(x, y, TRUE);
+ data[1] = 2;
+ data[6] = 8;
+ }
+ data[2] = x;
+ data[3] = y;
+ if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y)))
+ {
+ PlaySE(SE_MIZU);
+ }
+ break;
+ }
+ case 2:
+ if ((--data[6]) == 0)
+ {
+ sub_80696E4(x, y, TRUE);
+ if (data[4] != -1 && data[5] != -1)
+ {
+ sub_8069708(data[4], data[5], TRUE);
+ }
+ data[1] = 1;
+ }
+ }
+}