diff options
-rwxr-xr-x | asm/field_tasks.s | 105 | ||||
-rwxr-xr-x[-rw-r--r--] | include/field_effect_helpers.h | 1 | ||||
-rwxr-xr-x | src/field_tasks.c | 35 |
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)++; + } + } + } + } +} |