[LEAK-INFORMED] match InitObjectEventStateFromTemplate

additionally, port range fixes from emerald as well as a couple other
things
This commit is contained in:
Kurausukun
2021-03-18 22:30:59 -04:00
parent a2367448b8
commit f41d7b222c
5 changed files with 90 additions and 311 deletions
+45 -266
View File
@@ -1326,53 +1326,63 @@ static u8 GetObjectEventIdByLocalId(u8 localId)
return OBJECT_EVENTS_COUNT;
}
#ifdef NONMATCHING
static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup)
{
struct ObjectEvent *objectEvent;
struct ObjectEventTemplate *template2 = template;
const struct MapHeader *mapHeader;
u8 objectEventId;
u8 var0;
u8 elevation;
u8 inConnection;
s16 x;
s16 y;
s16 var;
s16 x2;
s16 y2;
s16 elevation2;
s16 x3;
s16 y3;
if(template->inConnection == 0xFF)
var0 = 0;
elevation = 0;
x2 = 0;
y2 = 0;
x3 = 0;
y3 = 0;
inConnection = template->inConnection;
if (inConnection == 0xFF)
{
var = 1;
mapNum = template2->trainerType;
mapGroup = template2->trainerRange_berryTreeId & 0xFF;
elevation2 = template2->elevation;
x = template2->x;
y = template2->y;
x2 = template2->x;
y2 = template2->y;
template = &Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->events->objectEvents[elevation2 - 1];
var0 = 1;
elevation = template->elevation;
mapNum = template->trainerType;
mapGroup = template->trainerRange_berryTreeId & 0xFF;
x2 = template->x;
y2 = template->y;
x3 = template->x;
y3 = template->y;
mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
template = &(mapHeader->events->objectEvents[elevation - 1]);
}
if (GetAvailableObjectEventId(template->localId, mapNum, mapGroup, &objectEventId)
&& !sub_805E238(template, var, x2, y2))
|| !sub_805E238(template, var0, x3, y3))
return OBJECT_EVENTS_COUNT;
objectEvent = &gObjectEvents[objectEventId];
ClearObjectEvent(objectEvent);
if (var)
{
x = x2 * 0x10000 + 0x7000;
y = y2 * 0x10000 + 0x7000;
}
else
if (var0)
{
x = x2 + 7;
y = y2 + 7;
}
else
{
x = template->x + 7;
y = template->y + 7;
}
objectEvent->active = TRUE;
objectEvent->triggerGroundEffectsOnMove = TRUE;
objectEvent->graphicsId = template->graphicsId;
objectEvent->movementType = template->movementType;
objectEvent->localId = template->localId;
objectEvent->mapNum = mapNum;
// objectEvent++; objectEvent--; is a trick used in pokeruby and pokeemerald here
objectEvent->mapGroup = mapGroup;
objectEvent->initialCoords.x = x;
objectEvent->initialCoords.y = y;
@@ -1382,258 +1392,27 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
objectEvent->previousCoords.y = y;
objectEvent->currentElevation = template->elevation;
objectEvent->previousElevation = template->elevation;
objectEvent->range.as_nybbles.x = template->movementRangeX;
objectEvent->range.as_nybbles.y = template->movementRangeY;
objectEvent->rangeX = template->movementRangeX;
objectEvent->rangeY = template->movementRangeY;
objectEvent->trainerType = template->trainerType;
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
objectEvent->mapNum = mapNum; // oops (yes this is required for matching)
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
SetObjectEventDynamicGraphicsId(objectEvent);
/*#ifndef NONMATCHING
asm("":::"r5", "r6"); is a trick used in pokeruby and pokeemerald here
#endif*/
if (gRangedMovementTypes[objectEvent->movementType])
{
if (objectEvent->range.as_nybbles.x == 0)
if (objectEvent->rangeX == 0)
{
objectEvent->range.as_nybbles.x++;
objectEvent->rangeX++;
}
if (objectEvent->range.as_nybbles.y == 0)
if (objectEvent->rangeY == 0)
{
objectEvent->range.as_nybbles.y++;
objectEvent->rangeY++;
}
}
return objectEventId;
}
#else
NAKED
static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup)
{
asm_unified("\n\
push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0xC\n\
adds r5, r0, 0\n\
lsls r1, 24\n\
lsrs r7, r1, 24\n\
lsls r2, 24\n\
lsrs r6, r2, 24\n\
movs r0, 0\n\
mov r10, r0\n\
mov r8, r0\n\
mov r9, r0\n\
movs r1, 0\n\
str r1, [sp, 0x4]\n\
str r0, [sp, 0x8]\n\
ldrb r0, [r5, 0x2]\n\
cmp r0, 0xFF\n\
bne _0805E0DA\n\
movs r1, 0x1\n\
mov r10, r1\n\
ldrb r4, [r5, 0x8]\n\
ldrb r7, [r5, 0xC]\n\
ldrb r6, [r5, 0xE]\n\
ldrh r0, [r5, 0x4]\n\
mov r8, r0\n\
ldrh r5, [r5, 0x6]\n\
mov r9, r5\n\
mov r1, r8\n\
str r1, [sp, 0x4]\n\
mov r0, r9\n\
str r0, [sp, 0x8]\n\
adds r0, r6, 0\n\
adds r1, r7, 0\n\
bl Overworld_GetMapHeaderByGroupAndId\n\
ldr r1, [r0, 0x4]\n\
lsls r0, r4, 1\n\
adds r0, r4\n\
lsls r0, 3\n\
subs r0, 0x18\n\
ldr r1, [r1, 0x4]\n\
adds r5, r1, r0\n\
_0805E0DA:\n\
ldrb r0, [r5]\n\
adds r1, r7, 0\n\
adds r2, r6, 0\n\
mov r3, sp\n\
bl GetAvailableObjectEventId\n\
lsls r0, 24\n\
cmp r0, 0\n\
bne _0805E106\n\
ldr r1, [sp, 0x4]\n\
lsls r2, r1, 16\n\
asrs r2, 16\n\
ldr r0, [sp, 0x8]\n\
lsls r3, r0, 16\n\
asrs r3, 16\n\
adds r0, r5, 0\n\
mov r1, r10\n\
bl sub_805E238\n\
lsls r0, 24\n\
cmp r0, 0\n\
bne _0805E10A\n\
_0805E106:\n\
movs r0, 0x10\n\
b _0805E220\n\
_0805E10A:\n\
mov r0, sp\n\
ldrb r1, [r0]\n\
lsls r0, r1, 3\n\
adds r0, r1\n\
lsls r0, 2\n\
ldr r1, _0805E13C @ =gObjectEvents\n\
adds r4, r0, r1\n\
adds r0, r4, 0\n\
bl ClearObjectEvent\n\
mov r1, r10\n\
cmp r1, 0\n\
beq _0805E140\n\
mov r1, r8\n\
lsls r0, r1, 16\n\
movs r1, 0xE0\n\
lsls r1, 11\n\
adds r0, r1\n\
lsrs r3, r0, 16\n\
mov r1, r9\n\
lsls r0, r1, 16\n\
movs r1, 0xE0\n\
lsls r1, 11\n\
adds r0, r1\n\
b _0805E14E\n\
.align 2, 0\n\
_0805E13C: .4byte gObjectEvents\n\
_0805E140:\n\
ldrh r0, [r5, 0x4]\n\
adds r0, 0x7\n\
lsls r0, 16\n\
lsrs r3, r0, 16\n\
ldrh r0, [r5, 0x6]\n\
adds r0, 0x7\n\
lsls r0, 16\n\
_0805E14E:\n\
lsrs r2, r0, 16\n\
ldrb r0, [r4]\n\
movs r1, 0x1\n\
orrs r0, r1\n\
movs r1, 0x4\n\
orrs r0, r1\n\
strb r0, [r4]\n\
ldrb r0, [r5, 0x1]\n\
strb r0, [r4, 0x5]\n\
ldrb r0, [r5, 0x9]\n\
strb r0, [r4, 0x6]\n\
ldrb r0, [r5]\n\
strb r0, [r4, 0x8]\n\
strb r7, [r4, 0x9]\n\
strb r6, [r4, 0xA]\n\
strh r3, [r4, 0xC]\n\
strh r2, [r4, 0xE]\n\
strh r3, [r4, 0x10]\n\
strh r2, [r4, 0x12]\n\
strh r3, [r4, 0x14]\n\
strh r2, [r4, 0x16]\n\
ldrb r0, [r5, 0x8]\n\
movs r6, 0xF\n\
adds r1, r6, 0\n\
ands r1, r0\n\
ldrb r2, [r4, 0xB]\n\
movs r0, 0x10\n\
negs r0, r0\n\
mov r8, r0\n\
ands r0, r2\n\
orrs r0, r1\n\
strb r0, [r4, 0xB]\n\
ldrb r1, [r5, 0x8]\n\
lsls r1, 4\n\
ands r0, r6\n\
orrs r0, r1\n\
strb r0, [r4, 0xB]\n\
ldrb r1, [r5, 0xA]\n\
lsls r1, 28\n\
movs r0, 0xF\n\
mov r9, r0\n\
lsrs r1, 28\n\
ldrb r2, [r4, 0x19]\n\
mov r0, r8\n\
ands r0, r2\n\
orrs r0, r1\n\
strb r0, [r4, 0x19]\n\
ldrb r1, [r5, 0xA]\n\
lsrs r1, 4\n\
lsls r1, 4\n\
ands r0, r6\n\
orrs r0, r1\n\
strb r0, [r4, 0x19]\n\
ldrh r0, [r5, 0xC]\n\
strb r0, [r4, 0x7]\n\
ldrh r0, [r5, 0xE]\n\
strb r0, [r4, 0x1D]\n\
ldr r1, _0805E230 @ =gInitialMovementTypeFacingDirections\n\
ldrb r0, [r5, 0x9]\n\
adds r0, r1\n\
ldrb r1, [r0]\n\
adds r0, r4, 0\n\
adds r0, 0x20\n\
strb r1, [r0]\n\
ldrb r1, [r0]\n\
adds r0, r4, 0\n\
bl SetObjectEventDirection\n\
adds r0, r4, 0\n\
bl SetObjectEventDynamicGraphicsId\n\
ldr r1, _0805E234 @ =gRangedMovementTypes\n\
ldrb r0, [r4, 0x6]\n\
adds r0, r1\n\
ldrb r0, [r0]\n\
cmp r0, 0\n\
beq _0805E21C\n\
ldrb r2, [r4, 0x19]\n\
adds r0, r6, 0\n\
ands r0, r2\n\
cmp r0, 0\n\
bne _0805E204\n\
lsls r0, r2, 28\n\
lsrs r0, 28\n\
adds r0, 0x1\n\
mov r1, r9\n\
ands r0, r1\n\
mov r1, r8\n\
ands r1, r2\n\
orrs r1, r0\n\
strb r1, [r4, 0x19]\n\
_0805E204:\n\
ldrb r2, [r4, 0x19]\n\
movs r0, 0xF0\n\
ands r0, r2\n\
cmp r0, 0\n\
bne _0805E21C\n\
lsrs r1, r2, 4\n\
adds r1, 0x1\n\
lsls r1, 4\n\
adds r0, r6, 0\n\
ands r0, r2\n\
orrs r0, r1\n\
strb r0, [r4, 0x19]\n\
_0805E21C:\n\
mov r0, sp\n\
ldrb r0, [r0]\n\
_0805E220:\n\
add sp, 0xC\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
_0805E230: .4byte gInitialMovementTypeFacingDirections\n\
_0805E234: .4byte gRangedMovementTypes\n\
");
}
#endif
static bool8 sub_805E238(struct ObjectEventTemplate *template, u8 var, s16 x, s16 y)
{
@@ -5140,19 +4919,19 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv
s16 top;
s16 bottom;
if (objectEvent->range.as_nybbles.x != 0)
if (objectEvent->rangeX != 0)
{
left = objectEvent->initialCoords.x - objectEvent->range.as_nybbles.x;
right = objectEvent->initialCoords.x + objectEvent->range.as_nybbles.x;
left = objectEvent->initialCoords.x - objectEvent->rangeX;
right = objectEvent->initialCoords.x + objectEvent->rangeX;
if (left > x || right < x)
{
return TRUE;
}
}
if (objectEvent->range.as_nybbles.y != 0)
if (objectEvent->rangeY != 0)
{
top = objectEvent->initialCoords.y - objectEvent->range.as_nybbles.y;
bottom = objectEvent->initialCoords.y + objectEvent->range.as_nybbles.y;
top = objectEvent->initialCoords.y - objectEvent->rangeY;
bottom = objectEvent->initialCoords.y + objectEvent->rangeY;
if (top > y || bottom < y)
{
return TRUE;
+34 -27
View File
@@ -194,7 +194,7 @@ static void CreateConfirmLeaveTradeRoomPrompt(void);
static void InitLinkRoomStartMenuScript(void);
static void InitMenuBasedScript(const u8 *script);
static void sub_80581DC(const u8 *script);
static void sub_8058230(void);
static void RunTerminateLinkScript(void);
static void SpawnLinkPlayerObjectEvent(u8 i, s16 x, s16 y, u8 gender);
static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y);
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
@@ -2673,7 +2673,7 @@ static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlay
if (trainer->isLocalPlayer)
{
SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
sub_8058230();
RunTerminateLinkScript();
}
return;
}
@@ -3170,7 +3170,7 @@ static void InitMenuBasedScript(const u8 *script)
ScriptContext2_Enable();
}
static void sub_8058230(void)
static void RunTerminateLinkScript(void)
{
ScriptContext1_SetupScript(TradeCenter_TerminateLink);
ScriptContext2_Enable();
@@ -3260,7 +3260,14 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent)
memset(objEvent, 0, sizeof(struct ObjectEvent));
}
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
// Note: Emerald reuses the direction and range variables during Link mode
// as special gender and direction values. The types and placement
// 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
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender)
{
u8 objEventId = GetFirstInactiveObjectEventId();
struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
@@ -3275,8 +3282,8 @@ static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE;
objEvent->active = TRUE;
objEvent->singleMovementActive = a4;
objEvent->range.as_byte = 2;
linkGender(objEvent) = gender;
linkDirection(objEvent) = DIR_NORTH;
objEvent->spriteId = MAX_SPRITES;
InitLinkPlayerObjectEventPos(objEvent, x, y);
@@ -3293,17 +3300,17 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1
ObjectEventUpdateZCoord(objEvent);
}
static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 range)
static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir)
{
if (gLinkPlayerObjectEvents[linkPlayerId].active)
{
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
objEvent->range.as_byte = range;
linkDirection(objEvent) = dir;
}
}
static void DestroyLinkPlayerOBject(u8 linkPlayerId)
static void DestroyLinkPlayerObject(u8 linkPlayerId)
{
struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
u8 objEventId = linkPlayerObjEvent->objEventId;
@@ -3334,7 +3341,7 @@ static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId)
{
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
return objEvent->range.as_byte;
return linkDirection(objEvent);
}
static u8 GetLinkPlayerElevation(u8 linkPlayerId)
@@ -3393,35 +3400,35 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing)
}
}
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir);
}
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
return FACING_UP;
}
// Duplicate Function
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir);
}
static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
return FALSE;
}
static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
s16 x, y;
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y);
linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent));
ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y);
if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, objEvent->range.as_byte, x, y))
if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y))
{
return FALSE;
}
@@ -3434,9 +3441,9 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer
}
}
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
{
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent));
return FALSE;
}
@@ -3450,7 +3457,7 @@ static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent
{
objEvent->directionSequenceIndex--;
linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FROZEN;
MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
MoveCoords(linkDirection(objEvent), &objEvent->initialCoords.x, &objEvent->initialCoords.y);
if (!objEvent->directionSequenceIndex)
{
ShiftStillObjectEventCoords(objEvent);
@@ -3510,12 +3517,12 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
if (gameVersion == VERSION_FIRE_RED || gameVersion == VERSION_LEAF_GREEN)
{
objEvent->spriteId = AddPseudoObjectEvent(
GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive),
GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)),
SpriteCB_LinkPlayer, 0, 0, 0);
}
else
{
objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
}
sprite = &gSprites[objEvent->spriteId];
@@ -3535,9 +3542,9 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite)
sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(linkDirection(objEvent)));
else
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent)));
UpdateObjectEventSpriteVisibility(sprite, 0);
if (objEvent->triggerGroundEffectsOnMove)
+2 -2
View File
@@ -93,8 +93,8 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str
{
gObjectEvents[i].initialCoords.x = templates[j].x + 7;
gObjectEvents[i].initialCoords.y = templates[j].y + 7;
gObjectEvents[i].range.as_nybbles.x = templates[j].movementRangeX;
gObjectEvents[i].range.as_nybbles.y = templates[j].movementRangeY;
gObjectEvents[i].rangeX = templates[j].movementRangeX;
gObjectEvents[i].rangeY = templates[j].movementRangeY;
}
}
+6 -6
View File
@@ -219,15 +219,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap
}
// preserve mapobj_unk_19 before clearing.
unk19_temp = trainerObj->range.as_nybbles.x;
unk19b_temp = trainerObj->range.as_nybbles.y;
trainerObj->range.as_nybbles.x = 0;
trainerObj->range.as_nybbles.y = 0;
unk19_temp = trainerObj->rangeX;
unk19b_temp = trainerObj->rangeY;
trainerObj->rangeX = 0;
trainerObj->rangeY = 0;
collision = GetCollisionAtCoords(trainerObj, x, y, direction);
trainerObj->range.as_nybbles.x = unk19_temp;
trainerObj->range.as_nybbles.y = unk19b_temp;
trainerObj->rangeX = unk19_temp;
trainerObj->rangeY = unk19b_temp;
if (collision == 4)
return approachDistance;