summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-05-23 11:13:36 -0400
committerscnorton <scnorton@biociphers.org>2017-05-24 16:15:12 -0400
commit8155a807befd4f55f31a38a4535225221708783d (patch)
tree2501860e8ef52168dfa73c675b2ab8f78b929491
parent48a3b78f82095fb2bd77db7c1c296158deacd76e (diff)
Another set of functions related to adjusting coordinates
-rw-r--r--asm/field_map_obj.s227
-rwxr-xr-xinclude/field_map_obj.h2
-rwxr-xr-xsrc/field_map_obj.c65
3 files changed, 67 insertions, 227 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index eef8c69c7..6878512e6 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -1353,233 +1353,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
- thumb_func_start sub_8060234
-sub_8060234: @ 8060234
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08060280
- ldr r3, _08060278 @ =gSprites
- ldr r2, _0806027C @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x3C]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08060280
- movs r0, 0x1
- b _08060282
- .align 2, 0
-_08060278: .4byte gSprites
-_0806027C: .4byte gMapObjects
-_08060280:
- movs r0, 0
-_08060282:
- add sp, 0x4
- pop {r1}
- bx r1
- thumb_func_end sub_8060234
-
- thumb_func_start sub_8060288
-sub_8060288: @ 8060288
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080602C6
- ldr r3, _080602CC @ =gSprites
- ldr r2, _080602D0 @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x3C]
- movs r0, 0x4
- orrs r0, r2
- strh r0, [r1, 0x3C]
-_080602C6:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080602CC: .4byte gSprites
-_080602D0: .4byte gMapObjects
- thumb_func_end sub_8060288
-
- thumb_func_start MoveCoords
-MoveCoords: @ 80602D4
- push {r4,lr}
- lsls r0, 24
- ldr r3, _080602F4 @ =gDirectionToVector
- lsrs r0, 22
- adds r0, r3
- ldrh r3, [r0]
- ldrh r4, [r1]
- adds r3, r4
- strh r3, [r1]
- ldrh r0, [r0, 0x2]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080602F4: .4byte gDirectionToVector
- thumb_func_end MoveCoords
-
- thumb_func_start unref_sub_80602F8
-unref_sub_80602F8: @ 80602F8
- push {r4,lr}
- lsls r0, 24
- ldr r3, _0806031C @ =gDirectionToVector
- lsrs r0, 22
- adds r0, r3
- ldrh r3, [r0]
- lsls r3, 4
- ldrh r4, [r1]
- adds r3, r4
- strh r3, [r1]
- ldrh r0, [r0, 0x2]
- lsls r0, 4
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806031C: .4byte gDirectionToVector
- thumb_func_end unref_sub_80602F8
-
- thumb_func_start sub_8060320
-sub_8060320: @ 8060320
- push {r4-r7,lr}
- adds r4, r1, 0
- ldr r1, [sp, 0x14]
- lsls r0, 24
- lsls r3, 16
- lsrs r3, 16
- adds r7, r3, 0
- lsls r1, 16
- lsrs r6, r1, 16
- mov r12, r6
- ldr r1, _08060384 @ =gDirectionToVector
- lsrs r0, 22
- adds r5, r0, r1
- movs r0, 0
- ldrsh r1, [r5, r0]
- cmp r1, 0
- ble _0806034C
- lsls r0, r3, 16
- asrs r0, 16
- ldrh r3, [r4]
- adds r0, r3
- strh r0, [r4]
-_0806034C:
- cmp r1, 0
- bge _0806035A
- ldrh r1, [r4]
- lsls r0, r7, 16
- asrs r0, 16
- subs r1, r0
- strh r1, [r4]
-_0806035A:
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- cmp r1, 0
- ble _0806036C
- lsls r0, r6, 16
- asrs r0, 16
- ldrh r3, [r2]
- adds r0, r3
- strh r0, [r2]
-_0806036C:
- cmp r1, 0
- bge _0806037C
- ldrh r1, [r2]
- mov r3, r12
- lsls r0, r3, 16
- asrs r0, 16
- subs r1, r0
- strh r1, [r2]
-_0806037C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08060384: .4byte gDirectionToVector
- thumb_func_end sub_8060320
-
- thumb_func_start sub_8060388
-sub_8060388: @ 8060388
- push {r4,r5,lr}
- ldr r5, _080603C0 @ =gSaveBlock1
- ldrh r4, [r5]
- lsls r0, 16
- asrs r0, 16
- subs r0, r4
- lsls r0, 4
- strh r0, [r2]
- ldrh r0, [r5, 0x2]
- lsls r1, 16
- asrs r1, 16
- subs r1, r0
- lsls r1, 4
- strh r1, [r3]
- ldr r1, _080603C4 @ =gUnknown_0300489C
- ldrh r0, [r2]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r2]
- ldr r1, _080603C8 @ =gUnknown_03004898
- ldrh r0, [r3]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r3]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080603C0: .4byte gSaveBlock1
-_080603C4: .4byte gUnknown_0300489C
-_080603C8: .4byte gUnknown_03004898
- thumb_func_end sub_8060388
-
thumb_func_start sub_80603CC
sub_80603CC: @ 80603CC
push {r4-r7,lr}
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 80add1403..3a56ed636 100755
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -77,4 +77,6 @@ extern const u8 gUnknown_08375584[4];
extern const u8 gUnknown_0837567B[9];
+extern const struct Coords16 gDirectionToVector[];
+
#endif // GUARD_FIELD_MAP_OBJ_H
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index c94b5a180..8ca2970ab 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -3471,3 +3471,68 @@ bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s
}
return 0;
}
+
+bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2)
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4;
+ }
+}
+
+void MoveCoords(u8 direction, s16 *x, s16 *y)
+{
+ *x += gDirectionToVector[direction].x;
+ *y += gDirectionToVector[direction].y;
+}
+
+void unref_sub_80602F8(u8 direction, s16 *x, s16 *y)
+{
+ *x += gDirectionToVector[direction].x << 4;
+ *y += gDirectionToVector[direction].y << 4;
+}
+
+void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY)
+{
+ if (gDirectionToVector[direction].x > 0)
+ {
+ *x += deltaX;
+ }
+ if (gDirectionToVector[direction].x < 0)
+ {
+ *x -= deltaX;
+ }
+ if (gDirectionToVector[direction].y > 0)
+ {
+ *y += deltaY;
+ }
+ if (gDirectionToVector[direction].y < 0)
+ {
+ *y -= deltaY;
+ }
+}
+
+extern s16 gUnknown_03004898;
+extern s16 gUnknown_0300489C;
+
+void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2)
+{
+ *x2 = (x1 - gSaveBlock1.pos.x) << 4;
+ *y2 = (y1 - gSaveBlock1.pos.y) << 4;
+ *x2 -= gUnknown_0300489C;
+ *y2 -= gUnknown_03004898;
+}