diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f29a2dfb06..9375b7be9a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2328,7 +2328,10 @@ .2byte \itemId .endm - @ return current (posType = 0) or map (posType = 1) position of object to VAR_0x8007 (x), VAR_0x8008 (y) + CURRENT_POSITION = FALSE + TEMPLATE_POSITION = TRUE + + @ Stores the CURRENT / TEMPLATE position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y) .macro getobjectxy localId:req, posType:req setvar VAR_0x8000, \localId setvar VAR_0x8001, \posType diff --git a/src/field_specials.c b/src/field_specials.c index 78ac17678b..98a909d725 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4268,47 +4268,48 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -// get position (0 for current, 1 for map) of object event, return to VAR_0x8007, VAR_0x8008 void GetObjectPosition(void) { - u16 localId = gSpecialVar_0x8000; - u16 useTemplate = gSpecialVar_0x8001; + u32 localId = gSpecialVar_0x8000; + u32 useTemplate = gSpecialVar_0x8001; + u32 objectId; + struct ObjectEvent* objEvent; - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; - if (!useTemplate) - { - /* current position */ - const u16 objId = GetObjectEventIdByLocalId(localId); - const struct ObjectEvent *objEvent = &gObjectEvents[objId]; - *x = objEvent->currentCoords.x - 7; // subtract out camera size - *y = objEvent->currentCoords.y - 7; - } - else - { - const struct ObjectEventTemplate *objTemplate = - FindObjectEventTemplateByLocalId(localId, - gSaveBlock1Ptr->objectEventTemplates, - gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; - } + if (useTemplate) + { + const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + return; + } + + objectId = GetObjectEventIdByLocalId(localId); + objEvent = &gObjectEvents[objectId]; + *x = objEvent->currentCoords.x - 7; + *y = objEvent->currentCoords.y - 7; } -// special to check if there is any object at a given position -u16 CheckObjectAtXY(void) +bool32 CheckObjectAtXY(void) { - u16 x = gSpecialVar_0x8005 + 7; - u16 y = gSpecialVar_0x8006 + 7; - u32 i; + u32 x = gSpecialVar_0x8005 + 7; + u32 y = gSpecialVar_0x8006 + 7; + u32 i; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { - if (gObjectEvents[i].active && gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y) - return TRUE; - } - return FALSE; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (!gObjectEvents[i].active) + return FALSE; + + if (gObjectEvents[i].currentCoords.x != x) + return FALSE; + + if (gObjectEvents[i].currentCoords.y != y) + return FALSE; + } + return TRUE; } bool8 GetSeenMon(void)