.include "constants/gba_constants.inc" .include "constants/species_constants.inc" .include "asm/macros.inc" .syntax unified .text thumb_func_start PerStepCallback_8069DD4 PerStepCallback_8069DD4: @ 8069DD4 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, _08069DF8 @ =gTasks + 0x8 adds r5, r1, r0 movs r1, 0x2 ldrsh r0, [r5, r1] cmp r0, 0x1 beq _08069E20 cmp r0, 0x1 bgt _08069DFC cmp r0, 0 beq _08069E08 b _08069F56 .align 2, 0 _08069DF8: .4byte gTasks + 0x8 _08069DFC: cmp r0, 0x2 beq _08069EB6 cmp r0, 0x3 bne _08069E06 b _08069F10 _08069E06: b _08069F56 _08069E08: mov r4, sp adds r4, 0x2 mov r0, sp adds r1, r4, 0 bl PlayerGetDestCoords mov r0, sp ldrh r0, [r0] strh r0, [r5, 0x4] ldrh r0, [r4] strh r0, [r5, 0x6] b _08069F52 _08069E20: mov r7, sp adds r7, 0x2 mov r0, sp adds r1, r7, 0 bl PlayerGetDestCoords mov r0, sp ldrh r2, [r0] movs r3, 0 ldrsh r1, [r0, r3] movs r3, 0x4 ldrsh r0, [r5, r3] cmp r1, r0 bne _08069E4A movs r0, 0 ldrsh r1, [r7, r0] movs r3, 0x6 ldrsh r0, [r5, r3] cmp r1, r0 bne _08069E4A b _08069F56 _08069E4A: strh r2, [r5, 0x4] ldrh r0, [r7] strh r0, [r5, 0x6] mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] movs r2, 0 ldrsh r1, [r7, r2] bl MapGridGetMetatileBehaviorAt adds r4, r0, 0 lsls r4, 16 lsrs r4, 16 ldr r0, _08069E8C @ =0x00004022 bl GetVarPointer adds r6, r0, 0 lsls r4, 24 lsrs r4, 24 adds r0, r4, 0 bl MetatileBehavior_IsThinIce lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bne _08069E90 ldrh r0, [r6] adds r0, 0x1 strh r0, [r6] movs r0, 0x4 strh r0, [r5, 0xC] movs r0, 0x2 b _08069EA8 .align 2, 0 _08069E8C: .4byte 0x00004022 _08069E90: adds r0, r4, 0 bl MetatileBehavior_IsCrackedIce lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bne _08069F56 movs r0, 0 strh r0, [r6] movs r0, 0x4 strh r0, [r5, 0xC] movs r0, 0x3 _08069EA8: strh r0, [r5, 0x2] mov r0, sp ldrh r0, [r0] strh r0, [r5, 0x8] ldrh r0, [r7] strh r0, [r5, 0xA] b _08069F56 _08069EB6: ldrh r1, [r5, 0xC] movs r3, 0xC ldrsh r0, [r5, r3] cmp r0, 0 bne _08069F1A mov r1, sp ldrh r0, [r5, 0x8] strh r0, [r1] mov r4, sp adds r4, 0x2 ldrh r0, [r5, 0xA] strh r0, [r4] movs r0, 0x2A bl PlaySE mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] movs r2, 0 ldrsh r1, [r4, r2] ldr r2, _08069F0C @ =0x0000020e bl MapGridSetMetatileIdAt mov r0, sp movs r3, 0 ldrsh r0, [r0, r3] movs r2, 0 ldrsh r1, [r4, r2] bl CurrentMapDrawMetatileAt mov r0, sp ldrh r0, [r0] subs r0, 0x7 lsls r0, 16 asrs r0, 16 ldrh r1, [r4] subs r1, 0x7 lsls r1, 16 asrs r1, 16 bl sub_8069CFC b _08069F52 .align 2, 0 _08069F0C: .4byte 0x0000020e _08069F10: ldrh r1, [r5, 0xC] movs r3, 0xC ldrsh r0, [r5, r3] cmp r0, 0 beq _08069F20 _08069F1A: subs r0, r1, 0x1 strh r0, [r5, 0xC] b _08069F56 _08069F20: mov r1, sp ldrh r0, [r5, 0x8] strh r0, [r1] mov r4, sp adds r4, 0x2 ldrh r0, [r5, 0xA] strh r0, [r4] movs r0, 0x29 bl PlaySE mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] movs r2, 0 ldrsh r1, [r4, r2] ldr r2, _08069F60 @ =0x00000206 bl MapGridSetMetatileIdAt mov r0, sp movs r3, 0 ldrsh r0, [r0, r3] movs r2, 0 ldrsh r1, [r4, r2] bl CurrentMapDrawMetatileAt _08069F52: movs r0, 0x1 strh r0, [r5, 0x2] _08069F56: add sp, 0x4 pop {r4-r7} pop {r0} bx r0 .align 2, 0 _08069F60: .4byte 0x00000206 thumb_func_end PerStepCallback_8069DD4 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} lsls r0, 16 asrs r5, r0, 16 lsls r1, 16 asrs r4, r1, 16 adds r0, r5, 0 adds r1, r4, 0 bl MapGridGetMetatileIdAt ldr r1, _0806A074 @ =0x0000022f ldr r2, _0806A078 @ =0x00000237 cmp r0, r1 bne _0806A05C subs r2, 0x31 _0806A05C: adds r0, r5, 0 adds r1, r4, 0 bl MapGridSetMetatileIdAt adds r0, r5, 0 adds r1, r4, 0 bl CurrentMapDrawMetatileAt pop {r4,r5} pop {r0} bx r0 .align 2, 0 _0806A074: .4byte 0x0000022f _0806A078: .4byte 0x00000237 thumb_func_end sub_806A040 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} adds r3, r0, 0 lsls r1, 16 lsrs r5, r1, 16 lsls r2, 16 lsrs r4, r2, 16 ldrh r0, [r3] subs r0, 0x1 strh r0, [r3] lsls r0, 16 cmp r0, 0 bne _0806A1A8 movs r2, 0xE8 b _0806A1BC _0806A1A8: ldr r1, _0806A1E4 @ =gUnknown_08376418 movs r2, 0 ldrsh r0, [r3, r2] cmp r0, 0 bge _0806A1B4 adds r0, 0x7 _0806A1B4: asrs r0, 3 lsls r0, 1 adds r0, r1 ldrh r2, [r0] _0806A1BC: lsls r5, 16 asrs r5, 16 lsls r4, 16 asrs r4, 16 adds r0, r5, 0 adds r1, r4, 0 bl MapGridSetMetatileIdAt adds r0, r5, 0 adds r1, r4, 0 bl CurrentMapDrawMetatileAt adds r0, r5, 0 adds r1, r4, 0 movs r2, 0xE8 bl MapGridSetMetatileIdAt pop {r4,r5} pop {r0} bx r0 .align 2, 0 _0806A1E4: .4byte gUnknown_08376418 thumb_func_end sub_806A18C thumb_func_start Task_MuddySlope Task_MuddySlope: @ 806A1E8 push {r4-r7,lr} mov r7, r8 push {r7} sub sp, 0x4 lsls r0, 24 lsrs r0, 24 lsls r1, r0, 2 adds r1, r0 lsls r1, 3 ldr r0, _0806A230 @ =gTasks + 0x8 adds r4, r1, r0 mov r5, sp adds r5, 0x2 mov r0, sp adds r1, r5, 0 bl PlayerGetDestCoords ldr r0, _0806A234 @ =gSaveBlock1 movs r1, 0x4 ldrsb r1, [r0, r1] lsls r1, 8 ldrb r0, [r0, 0x5] lsls r0, 24 asrs r0, 24 orrs r0, r1 lsls r0, 16 lsrs r7, r0, 16 movs r0, 0x2 ldrsh r1, [r4, r0] mov r8, r5 cmp r1, 0 beq _0806A238 cmp r1, 0x1 beq _0806A264 b _0806A2B8 .align 2, 0 _0806A230: .4byte gTasks + 0x8 _0806A234: .4byte gSaveBlock1 _0806A238: strh r7, [r4] mov r0, sp ldrh r0, [r0] strh r0, [r4, 0x4] ldrh r0, [r5] strh r0, [r4, 0x6] movs r0, 0x1 strh r0, [r4, 0x2] strh r1, [r4, 0x8] strh r1, [r4, 0xE] strh r1, [r4, 0x14] strh r1, [r4, 0x1A] b _0806A2B8 _0806A252: movs r0, 0x20 strh r0, [r1] mov r0, sp ldrh r0, [r0] strh r0, [r1, 0x2] mov r2, r8 ldrh r0, [r2] strh r0, [r1, 0x4] b _0806A2B8 _0806A264: mov r0, sp movs r3, 0x4 ldrsh r1, [r4, r3] ldrh r2, [r0] movs r3, 0 ldrsh r0, [r0, r3] cmp r1, r0 bne _0806A280 movs r0, 0x6 ldrsh r1, [r4, r0] movs r3, 0 ldrsh r0, [r5, r3] cmp r1, r0 beq _0806A2B8 _0806A280: strh r2, [r4, 0x4] ldrh r0, [r5] strh r0, [r4, 0x6] mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] movs r2, 0 ldrsh r1, [r5, r2] bl MapGridGetMetatileBehaviorAt lsls r0, 24 lsrs r0, 24 bl MetatileBehavior_IsMuddySlope lsls r0, 24 cmp r0, 0 beq _0806A2B8 movs r6, 0x4 adds r1, r4, 0 adds r1, 0x8 _0806A2A8: movs r3, 0 ldrsh r0, [r1, r3] cmp r0, 0 beq _0806A252 adds r1, 0x6 adds r6, 0x3 cmp r6, 0xD ble _0806A2A8 _0806A2B8: ldr r2, _0806A2D4 @ =gUnknown_0202E844 ldrb r1, [r2] movs r0, 0x1 ands r0, r1 cmp r0, 0 beq _0806A2D8 movs r1, 0 ldrsh r0, [r4, r1] cmp r7, r0 beq _0806A2D8 strh r7, [r4] ldrh r0, [r2, 0x4] ldrh r1, [r2, 0x8] b _0806A2DC .align 2, 0 _0806A2D4: .4byte gUnknown_0202E844 _0806A2D8: movs r0, 0 movs r1, 0 _0806A2DC: lsls r0, 16 asrs r0, 16 mov r8, r0 lsls r0, r1, 16 asrs r7, r0, 16 adds r5, r4, 0 adds r5, 0x8 adds r4, r5, 0 movs r6, 0x9 _0806A2EE: movs r2, 0 ldrsh r0, [r4, r2] cmp r0, 0 beq _0806A312 ldrh r0, [r4, 0x2] mov r3, r8 subs r0, r3 strh r0, [r4, 0x2] ldrh r0, [r4, 0x4] subs r0, r7 strh r0, [r4, 0x4] movs r0, 0x2 ldrsh r1, [r4, r0] movs r3, 0x4 ldrsh r2, [r4, r3] adds r0, r5, 0 bl sub_806A18C _0806A312: adds r4, 0x6 adds r5, 0x6 subs r6, 0x3 cmp r6, 0 bge _0806A2EE add sp, 0x4 pop {r3} mov r8, r3 pop {r4-r7} pop {r0} bx r0 thumb_func_end Task_MuddySlope .align 2, 0 @ Don't pad with nop.