diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c7a4133ea8..d3e260e192 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -210,8 +210,11 @@ struct ObjectEvent /*0x14*/ struct Coords16 previousCoords; /*0x18*/ u16 facingDirection:4; // current direction? u16 movementDirection:4; - u16 rangeX:4; - u16 rangeY:4; + struct __attribute__((packed)) + { + u16 rangeX:4; + u16 rangeY:4; + } range; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; /*0x1C*/ u8 movementActionId; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index b3ffb76193..3f8594945e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -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; diff --git a/src/overworld.c b/src/overworld.c index e2c47530be..355c776a26 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -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) { diff --git a/src/trainer_see.c b/src/trainer_see.c index 212cbbdec3..059e13ed7d 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -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;