summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--asm/field_map_obj.s114
-rw-r--r--include/field_ground_effect.h1
-rwxr-xr-xinclude/field_map_obj.h2
-rwxr-xr-xsrc/field_map_obj.c31
5 files changed, 35 insertions, 114 deletions
diff --git a/.gitignore b/.gitignore
index 78af8c737..5b70a4586 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,4 @@ types_*.taghl
*.sa*
Thumbs.db
build/*
+.idea/codeStyleSettings.xml
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 4359ea6e8..eef8c69c7 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -1353,120 +1353,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
- thumb_func_start IsMetatileDirectionallyImpassable
-IsMetatileDirectionallyImpassable: @ 8060160
- push {r4-r7,lr}
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r3, 24
- ldr r1, _080601A8 @ =gUnknown_08375684
- lsrs r3, 22
- subs r5, r3, 0x4
- adds r1, r5, r1
- ldrb r0, [r0, 0x1E]
- ldr r1, [r1]
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080601A2
- ldr r4, _080601AC @ =gUnknown_08375694
- adds r4, r5, r4
- lsls r0, r6, 16
- asrs r0, 16
- lsls r1, r7, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [r4]
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- beq _080601B0
-_080601A2:
- movs r0, 0x1
- b _080601B2
- .align 2, 0
-_080601A8: .4byte gUnknown_08375684
-_080601AC: .4byte gUnknown_08375694
-_080601B0:
- movs r0, 0
-_080601B2:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end IsMetatileDirectionallyImpassable
-
- thumb_func_start CheckForCollisionBetweenFieldObjects
-CheckForCollisionBetweenFieldObjects: @ 80601B8
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- movs r4, 0
- lsls r2, 16
- asrs r5, r2, 16
-_080601C6:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- ldr r1, _0806021C @ =gMapObjects
- adds r2, r0, r1
- ldrb r0, [r2]
- lsls r0, 31
- cmp r0, 0
- beq _08060220
- cmp r2, r6
- beq _08060220
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- lsls r0, r7, 16
- asrs r3, r0, 16
- cmp r1, r3
- bne _080601F0
- movs r1, 0x12
- ldrsh r0, [r2, r1]
- cmp r0, r5
- beq _08060200
-_080601F0:
- movs r1, 0x14
- ldrsh r0, [r2, r1]
- cmp r0, r3
- bne _08060220
- movs r1, 0x16
- ldrsh r0, [r2, r1]
- cmp r0, r5
- bne _08060220
-_08060200:
- ldrb r0, [r6, 0xB]
- lsls r0, 28
- lsrs r0, 28
- ldrb r1, [r2, 0xB]
- lsls r1, 28
- lsrs r1, 28
- bl AreZCoordsCompatible
- lsls r0, 24
- cmp r0, 0
- beq _08060220
- movs r0, 0x1
- b _0806022C
- .align 2, 0
-_0806021C: .4byte gMapObjects
-_08060220:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080601C6
- movs r0, 0
-_0806022C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CheckForCollisionBetweenFieldObjects
-
thumb_func_start sub_8060234
sub_8060234: @ 8060234
push {lr}
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
index 590923041..8a69426b3 100644
--- a/include/field_ground_effect.h
+++ b/include/field_ground_effect.h
@@ -6,5 +6,6 @@
#define POKERUBY_FIELD_GROUND_EFFECT_H
bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y);
+bool8 AreZCoordsCompatible(u8 z1, u8 z2);
#endif //POKERUBY_FIELD_GROUND_EFFECT_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 559183cd3..80add1403 100755
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -35,6 +35,8 @@ void npc_reset(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375240[4];
extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3);
+extern bool8 (*const gUnknown_08375684[4])(u8);
+extern bool8 (*const gUnknown_08375694[4])(u8);
extern const u8 gUnknown_083752A0[2];
extern const u8 gUnknown_083752C0[2];
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 1f48c9aad..c94b5a180 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -3440,3 +3440,34 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x,
}
return 0;
}
+
+bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
+{
+ if (gUnknown_08375684[direction - 1](mapObject->mapobj_unk_1E) || gUnknown_08375694[direction - 1](MapGridGetMetatileBehaviorAt(x, y)))
+ {
+ return 1;
+ }
+ return 0;
+}
+
+bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y)
+{
+ struct MapObject *mapObject2;
+ u8 i;
+ for (i=0; i<16; i++)
+ {
+ mapObject2 = &gMapObjects[i];
+ if (mapObject2->active && mapObject2 != mapObject)
+ {
+ if ((mapObject2->coords2.x != x || mapObject2->coords2.y != y) && (mapObject2->coords3.x != x || mapObject2->coords3.y != y))
+ {
+ continue;
+ }
+ if (AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0))
+ {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}