diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-27 09:43:57 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-27 09:43:57 -0400 |
commit | 41cc0382a43161c0c66ddaf73742ecec8dcbdcc6 (patch) | |
tree | 8deae383568e4b087951b85ce40a0efac566fff9 | |
parent | 0687a65dc9b67d99d7bb8bdb656ce0c358a57f66 (diff) |
Finish decompiling field_tasks.s
-rwxr-xr-x | asm/field_tasks.s | 177 | ||||
-rw-r--r-- | include/field_camera.h | 2 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rwxr-xr-x | src/field_tasks.c | 63 |
4 files changed, 65 insertions, 178 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s deleted file mode 100755 index 3b5eb1021..000000000 --- a/asm/field_tasks.s +++ /dev/null @@ -1,177 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - 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. diff --git a/include/field_camera.h b/include/field_camera.h index 9021b579e..4ce207541 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -11,6 +11,8 @@ struct CameraSomething s32 unk14; }; +extern struct Camera gUnknown_0202E844; + void move_tilemap_camera_to_upper_left_corner(void); void sub_8057A58(void); void sub_8057B14(u16 *a, u16 *b); diff --git a/ld_script.txt b/ld_script.txt index 77f404893..ba1b6f532 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -105,7 +105,6 @@ SECTIONS { src/event_data.o(.text); src/coord_event_weather.o(.text); src/field_tasks.o(.text); - asm/field_tasks.o(.text); src/clock.o(.text); asm/reset_rtc_screen.o(.text); asm/party_menu.o(.text); diff --git a/src/field_tasks.c b/src/field_tasks.c index 8ddef126b..caf2ce6b9 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -794,3 +794,66 @@ void sub_806A18C(s16 *data, s16 x, s16 y) CurrentMapDrawMetatileAt(x, y); MapGridSetMetatileIdAt(x, y, 0xe8); } + +void Task_MuddySlope(u8 taskId) +{ + s16 x, y, x2, y2; + int i; + u16 mapIndices; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + mapIndices = (gSaveBlock1.location.mapGroup << 8) | gSaveBlock1.location.mapNum; + switch (data[1]) + { + case 0: + data[0] = mapIndices; + data[2] = x; + data[3] = y; + data[1] = 1; + data[4] = 0; + data[7] = 0; + data[10] = 0; + data[13] = 0; + break; + case 1: + if (data[2] != x || data[3] != y) + { + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y))) + { + for (i=4; i<14; i+=3) + { + if (data[i] == 0) + { + data[i] = 32; + data[i + 1] = x; + data[i + 2] = y; + break; + } + } + } + } + break; + } + if (gUnknown_0202E844.field_0 && mapIndices != data[0]) + { + data[0] = mapIndices; + x2 = gUnknown_0202E844.x; + y2 = gUnknown_0202E844.y; + } + else + { + x2 = 0; + y2 = 0; + } + for (i=4; i<14; i+=3) + { + if (data[i]) + { + data[i + 1] -= x2; + data[i + 2] -= y2; + sub_806A18C(&data[i], data[i + 1], data[i + 2]); + } + } +} |