make linkDirection more robust to member reordering
This commit is contained in:
@@ -1301,8 +1301,8 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem
|
||||
objectEvent->previousCoords.y = y;
|
||||
objectEvent->currentElevation = template->elevation;
|
||||
objectEvent->previousElevation = template->elevation;
|
||||
objectEvent->rangeX = template->movementRangeX;
|
||||
objectEvent->rangeY = template->movementRangeY;
|
||||
objectEvent->range.rangeX = template->movementRangeX;
|
||||
objectEvent->range.rangeY = template->movementRangeY;
|
||||
objectEvent->trainerType = template->trainerType;
|
||||
objectEvent->mapNum = mapNum;
|
||||
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
|
||||
@@ -1311,10 +1311,10 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem
|
||||
SetObjectEventDynamicGraphicsId(objectEvent);
|
||||
if (sMovementTypeHasRange[objectEvent->movementType])
|
||||
{
|
||||
if (objectEvent->rangeX == 0)
|
||||
objectEvent->rangeX++;
|
||||
if (objectEvent->rangeY == 0)
|
||||
objectEvent->rangeY++;
|
||||
if (objectEvent->range.rangeX == 0)
|
||||
objectEvent->range.rangeX++;
|
||||
if (objectEvent->range.rangeY == 0)
|
||||
objectEvent->range.rangeY++;
|
||||
}
|
||||
return objectEventId;
|
||||
}
|
||||
@@ -4682,18 +4682,18 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv
|
||||
s16 top;
|
||||
s16 bottom;
|
||||
|
||||
if (objectEvent->rangeX != 0)
|
||||
if (objectEvent->range.rangeX != 0)
|
||||
{
|
||||
left = objectEvent->initialCoords.x - objectEvent->rangeX;
|
||||
right = objectEvent->initialCoords.x + objectEvent->rangeX;
|
||||
left = objectEvent->initialCoords.x - objectEvent->range.rangeX;
|
||||
right = objectEvent->initialCoords.x + objectEvent->range.rangeX;
|
||||
|
||||
if (left > x || right < x)
|
||||
return TRUE;
|
||||
}
|
||||
if (objectEvent->rangeY != 0)
|
||||
if (objectEvent->range.rangeY != 0)
|
||||
{
|
||||
top = objectEvent->initialCoords.y - objectEvent->rangeY;
|
||||
bottom = objectEvent->initialCoords.y + objectEvent->rangeY;
|
||||
top = objectEvent->initialCoords.y - objectEvent->range.rangeY;
|
||||
bottom = objectEvent->initialCoords.y + objectEvent->range.rangeY;
|
||||
|
||||
if (top > y || bottom < y)
|
||||
return TRUE;
|
||||
|
||||
@@ -2931,7 +2931,7 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent)
|
||||
// conflict with the usual Event Object struct, thus the definitions.
|
||||
#define linkGender(obj) obj->singleMovementActive
|
||||
// not even one can reference *byte* aligned bitfield members...
|
||||
#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX
|
||||
#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), range)] // -> rangeX
|
||||
|
||||
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender)
|
||||
{
|
||||
|
||||
@@ -389,15 +389,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap
|
||||
return 0;
|
||||
}
|
||||
|
||||
rangeX = trainerObj->rangeX;
|
||||
rangeY = trainerObj->rangeY;
|
||||
trainerObj->rangeX = 0;
|
||||
trainerObj->rangeY = 0;
|
||||
rangeX = trainerObj->range.rangeX;
|
||||
rangeY = trainerObj->range.rangeY;
|
||||
trainerObj->range.rangeX = 0;
|
||||
trainerObj->range.rangeY = 0;
|
||||
|
||||
collision = GetCollisionAtCoords(trainerObj, x, y, direction);
|
||||
|
||||
trainerObj->rangeX = rangeX;
|
||||
trainerObj->rangeY = rangeY;
|
||||
trainerObj->range.rangeX = rangeX;
|
||||
trainerObj->range.rangeY = rangeY;
|
||||
if (collision == COLLISION_OBJECT_EVENT)
|
||||
return approachDistance;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user