Improved checkobjectat

This commit is contained in:
pkmnsnfrn 2024-08-11 20:16:27 -07:00
parent 7869cb4137
commit ebae09f0a6
2 changed files with 38 additions and 34 deletions

View file

@ -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

View file

@ -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)