Fixed crash in cur_obj_follow_path()

This commit is contained in:
MysterD 2022-03-04 20:47:43 -08:00
parent 15d657a7be
commit 394d1970c5

View file

@ -2138,17 +2138,24 @@ s32 cur_obj_follow_path(UNUSED s32 unusedArg) {
startWaypoint = o->oPathedStartWaypoint; startWaypoint = o->oPathedStartWaypoint;
lastWaypoint = o->oPathedPrevWaypoint; lastWaypoint = o->oPathedPrevWaypoint;
if ((lastWaypoint + 1)->flags != WAYPOINT_FLAGS_END) { struct Waypoint *tmpWaypoint = (lastWaypoint + 1);
targetWaypoint = lastWaypoint + 1; if (tmpWaypoint != NULL && tmpWaypoint->flags != WAYPOINT_FLAGS_END) {
targetWaypoint = tmpWaypoint;
} else { } else {
targetWaypoint = startWaypoint; targetWaypoint = startWaypoint;
} }
o->oPathedPrevWaypointFlags = lastWaypoint->flags | WAYPOINT_FLAGS_INITIALIZED; if (targetWaypoint == NULL) {
return PATH_NONE;
}
prevToNextX = targetWaypoint->pos[0] - lastWaypoint->pos[0]; if (lastWaypoint != NULL) {
prevToNextY = targetWaypoint->pos[1] - lastWaypoint->pos[1]; o->oPathedPrevWaypointFlags = lastWaypoint->flags | WAYPOINT_FLAGS_INITIALIZED;
prevToNextZ = targetWaypoint->pos[2] - lastWaypoint->pos[2]; }
prevToNextX = targetWaypoint->pos[0] - (lastWaypoint != NULL) ? lastWaypoint->pos[0] : 0;
prevToNextY = targetWaypoint->pos[1] - (lastWaypoint != NULL) ? lastWaypoint->pos[1] : 0;
prevToNextZ = targetWaypoint->pos[2] - (lastWaypoint != NULL) ? lastWaypoint->pos[2] : 0;
objToNextX = targetWaypoint->pos[0] - o->oPosX; objToNextX = targetWaypoint->pos[0] - o->oPosX;
objToNextY = targetWaypoint->pos[1] - o->oPosY; objToNextY = targetWaypoint->pos[1] - o->oPosY;
@ -2161,7 +2168,8 @@ s32 cur_obj_follow_path(UNUSED s32 unusedArg) {
// If dot(prevToNext, objToNext) <= 0 (i.e. reached other side of target waypoint) // If dot(prevToNext, objToNext) <= 0 (i.e. reached other side of target waypoint)
if (prevToNextX * objToNextX + prevToNextY * objToNextY + prevToNextZ * objToNextZ <= 0.0f) { if (prevToNextX * objToNextX + prevToNextY * objToNextY + prevToNextZ * objToNextZ <= 0.0f) {
o->oPathedPrevWaypoint = targetWaypoint; o->oPathedPrevWaypoint = targetWaypoint;
if ((targetWaypoint + 1)->flags == WAYPOINT_FLAGS_END) { tmpWaypoint = (targetWaypoint + 1);
if (tmpWaypoint != NULL && tmpWaypoint->flags == WAYPOINT_FLAGS_END) {
return PATH_REACHED_END; return PATH_REACHED_END;
} else { } else {
return PATH_REACHED_WAYPOINT; return PATH_REACHED_WAYPOINT;