summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-26 22:26:02 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-26 22:26:02 -0400
commit57a6a5e6564aec89ab45f2d4c3b911f59f7db210 (patch)
tree206ae4351827c32d143f194f5a728a9f8fdce667
parentb8c5ff4a42662ca8810d10e2509cff7923d73d08 (diff)
PerStepCallback_8069F64
-rwxr-xr-xasm/field_tasks.s105
-rwxr-xr-x[-rw-r--r--]include/field_effect_helpers.h1
-rwxr-xr-xsrc/field_tasks.c35
3 files changed, 36 insertions, 105 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 6549ea29d..a1541d822 100755
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -6,111 +6,6 @@
.text
- thumb_func_start PerStepCallback_8069F64
-PerStepCallback_8069F64: @ 8069F64
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08069FE8 @ =gTasks + 0x8
- adds r5, r1, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- ldrh r2, [r0]
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0x2
- ldrsh r0, [r5, r3]
- cmp r1, r0
- bne _08069F9E
- movs r0, 0
- ldrsh r1, [r4, r0]
- movs r3, 0x4
- ldrsh r0, [r5, r3]
- cmp r1, r0
- beq _0806A02A
-_08069F9E:
- strh r2, [r5, 0x2]
- ldrh r0, [r4]
- strh r0, [r5, 0x4]
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsAshGrass
- lsls r0, 24
- cmp r0, 0
- beq _0806A02A
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileIdAt
- ldr r1, _08069FEC @ =0x0000020a
- cmp r0, r1
- bne _08069FF4
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r4, r2]
- ldr r2, _08069FF0 @ =0x00000212
- movs r3, 0x4
- bl ash
- b _0806A006
- .align 2, 0
-_08069FE8: .4byte gTasks + 0x8
-_08069FEC: .4byte 0x0000020a
-_08069FF0: .4byte 0x00000212
-_08069FF4:
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r4, r2]
- ldr r2, _0806A034 @ =0x00000206
- movs r3, 0x4
- bl ash
-_0806A006:
- movs r0, 0x87
- lsls r0, 1
- movs r1, 0x1
- bl CheckBagHasItem
- lsls r0, 24
- cmp r0, 0
- beq _0806A02A
- ldr r0, _0806A038 @ =0x00004048
- bl GetVarPointer
- adds r2, r0, 0
- ldrh r1, [r2]
- ldr r0, _0806A03C @ =0x0000270e
- cmp r1, r0
- bhi _0806A02A
- adds r0, r1, 0x1
- strh r0, [r2]
-_0806A02A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806A034: .4byte 0x00000206
-_0806A038: .4byte 0x00004048
-_0806A03C: .4byte 0x0000270e
- thumb_func_end PerStepCallback_8069F64
-
thumb_func_start sub_806A040
sub_806A040: @ 806A040
push {r4,r5,lr}
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 56838fc3a..895d861e2 100644..100755
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -9,5 +9,6 @@ void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y);
void sub_8127ED0(u8, u8);
void sub_8127F28(u8, u8, s16);
u8 sub_8128124(u8 id);
+void ash(s16, s16, u16, u8);
#endif // GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/src/field_tasks.c b/src/field_tasks.c
index f68c6bbe4..ea70cf227 100755
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -6,11 +6,14 @@
#include "task.h"
#include "main.h"
#include "vars.h"
+#include "item.h"
+#include "items.h"
#include "event_data.h"
#include "rom4.h"
#include "clock.h"
#include "script.h"
#include "field_special_scene.h"
+#include "field_effect_helpers.h"
#include "secret_base.h"
#include "metatile_behavior.h"
#include "fieldmap.h"
@@ -689,3 +692,35 @@ void PerStepCallback_8069DD4(u8 taskId)
break;
}
}
+
+void PerStepCallback_8069F64(u8 taskId)
+{
+ s16 x, y;
+ u16 *var;
+ s16 *data = gTasks[taskId].data;
+ PlayerGetDestCoords(&x, &y);
+ if (x != data[1] || y != data[2])
+ {
+ data[1] = x;
+ data[2] = y;
+ if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
+ {
+ if (MapGridGetMetatileIdAt(x, y) == 0x20a)
+ {
+ ash(x, y, 0x212, 4);
+ }
+ else
+ {
+ ash(x, y, 0x206, 4);
+ }
+ if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
+ {
+ var = GetVarPointer(VAR_ASH_GATHER_COUNT);
+ if (*var < 9999)
+ {
+ (*var)++;
+ }
+ }
+ }
+ }
+}