diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | asm/field_map_obj.s | 114 | ||||
-rw-r--r-- | include/field_ground_effect.h | 1 | ||||
-rwxr-xr-x | include/field_map_obj.h | 2 | ||||
-rwxr-xr-x | src/field_map_obj.c | 31 |
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; +} |