Improved checkobjectat
This commit is contained in:
parent
7869cb4137
commit
ebae09f0a6
2 changed files with 38 additions and 34 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue