summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-27 09:43:57 -0400
committerscnorton <scnorton@biociphers.org>2017-06-27 09:43:57 -0400
commit41cc0382a43161c0c66ddaf73742ecec8dcbdcc6 (patch)
tree8deae383568e4b087951b85ce40a0efac566fff9
parent0687a65dc9b67d99d7bb8bdb656ce0c358a57f66 (diff)
Finish decompiling field_tasks.s
-rwxr-xr-xasm/field_tasks.s177
-rw-r--r--include/field_camera.h2
-rwxr-xr-xld_script.txt1
-rwxr-xr-xsrc/field_tasks.c63
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]);
+ }
+ }
+}