IsCoordOutsideFieldObjectMovementRect

This commit is contained in:
PikalaxALT 2017-09-16 21:04:52 -04:00
parent 7d58ce75ad
commit 3e472ccc8b
2 changed files with 31 additions and 68 deletions

View File

@ -5,71 +5,6 @@
.text
thumb_func_start IsCoordOutsideFieldObjectMovementRect
@ bool8 IsCoordOutsideFieldObjectMovementRect(struct npc_state *fieldObject, u16 x, u16 y)
IsCoordOutsideFieldObjectMovementRect: @ 8092D58
push {r4,r5,lr}
adds r4, r0, 0
lsls r1, 16
lsrs r3, r1, 16
lsls r2, 16
lsrs r5, r2, 16
ldrb r1, [r4, 0x19]
movs r0, 0xF
ands r0, r1
cmp r0, 0
beq _08092D90
lsls r1, 28
lsrs r2, r1, 28
ldrh r0, [r4, 0xC]
subs r2, r0, r2
lsrs r1, 28
adds r0, r1
lsls r0, 16
lsrs r1, r0, 16
lsls r2, 16
lsls r0, r3, 16
asrs r3, r0, 16
cmp r2, r0
bgt _08092DBC
lsls r0, r1, 16
asrs r0, 16
cmp r0, r3
blt _08092DBC
_08092D90:
ldrb r1, [r4, 0x19]
movs r0, 0xF0
ands r0, r1
cmp r0, 0
beq _08092DC0
lsls r1, 24
lsrs r2, r1, 28
ldrh r0, [r4, 0xE]
subs r2, r0, r2
lsrs r1, 28
adds r0, r1
lsls r0, 16
lsrs r1, r0, 16
lsls r2, 16
lsls r0, r5, 16
asrs r3, r0, 16
cmp r2, r0
bgt _08092DBC
lsls r0, r1, 16
asrs r0, 16
cmp r0, r3
bge _08092DC0
_08092DBC:
movs r0, 0x1
b _08092DC2
_08092DC0:
movs r0, 0
_08092DC2:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end IsCoordOutsideFieldObjectMovementRect
thumb_func_start IsMetatileDirectionallyImpassable
@ bool8 IsMetatileDirectionallyImpassable(struct npc_state *fieldObject, u16 x, u16 y, u8 direction)
IsMetatileDirectionallyImpassable: @ 8092DC8

View File

@ -121,7 +121,7 @@ void DoGroundEffects_OnFinishStep(struct MapObject *, struct Sprite *);
void npc_obj_transfer_image_anim_pause_flag(struct MapObject *, struct Sprite *);
void FieldObjectUpdateSubpriority(struct MapObject *, struct Sprite *);
bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject *fieldObject, s16 x, s16 y);
bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *fieldObject, s16 x, s16 y);
bool8 IsMetatileDirectionallyImpassable(struct MapObject *, s16, s16, u8);
bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *, s16, s16);
@ -3657,7 +3657,7 @@ u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u32 dirn)
u8 direction;
direction = dirn;
if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y))
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
{
return 1;
}
@ -3685,7 +3685,7 @@ u8 sub_8092C8C(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
u8 retval;
retval = 0x00;
if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y))
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
{
retval |= 1;
}
@ -3704,6 +3704,34 @@ u8 sub_8092C8C(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
return retval;
}
bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y)
{
s16 left;
s16 right;
s16 top;
s16 bottom;
if (mapObject->mapobj_unk_19 != 0)
{
left = mapObject->coords1.x - mapObject->mapobj_unk_19;
right = mapObject->coords1.x + mapObject->mapobj_unk_19;
if (left > x || right < x)
{
return TRUE;
}
}
if (mapObject->mapobj_unk_19b != 0)
{
top = mapObject->coords1.y - mapObject->mapobj_unk_19b;
bottom = mapObject->coords1.y + mapObject->mapobj_unk_19b;
if (top > y || bottom < y)
{
return TRUE;
}
}
return FALSE;
}
asm(".section .text.get_face_direction_anim_id");
void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *);