summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-27 08:26:08 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-27 08:26:08 -0400
commita3c3267a9c915f86b986df90e747e12a90bcf5b5 (patch)
tree6ce2973bc7dff263b457f38306895f9a2c4efed6
parent2c4dc3b5be3b45a50387b1b0677d8f4b64391575 (diff)
PerStepCallback_806A07C
-rwxr-xr-xasm/field_tasks.s135
-rwxr-xr-xsrc/field_tasks.c46
2 files changed, 46 insertions, 135 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 188b67c64..99c54a0d4 100755
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -6,141 +6,6 @@
.text
- thumb_func_start PerStepCallback_806A07C
-PerStepCallback_806A07C: @ 806A07C
- 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, _0806A164 @ =gTasks + 0x8
- adds r5, r1, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 16
- lsrs r6, r0, 16
- ldrh r1, [r5, 0x8]
- movs r3, 0x8
- ldrsh r0, [r5, r3]
- adds r7, r4, 0
- cmp r0, 0
- beq _0806A0CE
- subs r0, r1, 0x1
- strh r0, [r5, 0x8]
- lsls r0, 16
- cmp r0, 0
- bne _0806A0CE
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- movs r2, 0xC
- ldrsh r1, [r5, r2]
- bl sub_806A040
-_0806A0CE:
- ldrh r1, [r5, 0xE]
- movs r3, 0xE
- ldrsh r0, [r5, r3]
- cmp r0, 0
- beq _0806A0EE
- subs r0, r1, 0x1
- strh r0, [r5, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0806A0EE
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- movs r2, 0x12
- ldrsh r1, [r5, r2]
- bl sub_806A040
-_0806A0EE:
- lsls r0, r6, 24
- lsrs r6, r0, 24
- adds r0, r6, 0
- bl MetatileBehavior_IsCrackedFloorHole
- lsls r0, 24
- cmp r0, 0
- beq _0806A106
- ldr r0, _0806A168 @ =0x00004022
- movs r1, 0
- bl VarSet
-_0806A106:
- mov r0, sp
- ldrh r2, [r0]
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0x4
- ldrsh r0, [r5, r3]
- cmp r1, r0
- bne _0806A122
- movs r0, 0
- ldrsh r1, [r7, r0]
- movs r3, 0x6
- ldrsh r0, [r5, r3]
- cmp r1, r0
- beq _0806A182
-_0806A122:
- strh r2, [r5, 0x4]
- adds r4, r7, 0
- ldrh r0, [r4]
- strh r0, [r5, 0x6]
- adds r0, r6, 0
- bl MetatileBehavior_IsCrackedFloor
- lsls r0, 24
- cmp r0, 0
- beq _0806A182
- bl GetPlayerSpeed
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- beq _0806A14A
- ldr r0, _0806A168 @ =0x00004022
- movs r1, 0
- bl VarSet
-_0806A14A:
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0806A16C
- movs r0, 0x3
- strh r0, [r5, 0x8]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r5, 0xA]
- ldrh r0, [r4]
- strh r0, [r5, 0xC]
- b _0806A182
- .align 2, 0
-_0806A164: .4byte gTasks + 0x8
-_0806A168: .4byte 0x00004022
-_0806A16C:
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _0806A182
- movs r0, 0x3
- strh r0, [r5, 0xE]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r5, 0x10]
- ldrh r0, [r7]
- strh r0, [r5, 0x12]
-_0806A182:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end PerStepCallback_806A07C
-
thumb_func_start sub_806A18C
sub_806A18C: @ 806A18C
push {r4,r5,lr}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 021f2c070..653d3ffd9 100755
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -6,6 +6,7 @@
#include "task.h"
#include "main.h"
#include "vars.h"
+#include "bike.h"
#include "item.h"
#include "items.h"
#include "event_data.h"
@@ -730,3 +731,48 @@ void sub_806A040(s16 x, s16 y)
MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237);
CurrentMapDrawMetatileAt(x, y);
}
+
+void PerStepCallback_806A07C(u8 taskId)
+{
+ s16 x, y;
+ u16 behavior;
+ s16 *data = gTasks[taskId].data;
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (data[4] != 0 && (--data[4]) == 0)
+ {
+ sub_806A040(data[5], data[6]);
+ }
+ if (data[7] != 0 && (--data[7]) == 0)
+ {
+ sub_806A040(data[8], data[9]);
+ }
+ if (MetatileBehavior_IsCrackedFloorHole(behavior))
+ {
+ VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
+ }
+ if ((x != data[2] || y != data[3]))
+ {
+ data[2] = x;
+ data[3] = y;
+ if (MetatileBehavior_IsCrackedFloor(behavior))
+ {
+ if (GetPlayerSpeed() != 4)
+ {
+ VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
+ }
+ if (data[4] == 0)
+ {
+ data[4] = 3;
+ data[5] = x;
+ data[6] = y;
+ }
+ else if (data[7] == 0)
+ {
+ data[7] = 3;
+ data[8] = x;
+ data[9] = y;
+ }
+ }
+ }
+}