#ifndef WAYPOINTS_H #define WAYPOINTS_H typedef struct { /* 0x00 */ s16 posX; /* 0x02 */ s16 posY; /* 0x04 */ s16 posZ; /* 0x06 */ u16 trackSegment; } TrackWaypoint; // size = 0x08 /** * These are per-path arrays that contain some information relating to waypoints * The arrays in D_80164550 contain X/Y/Z and track segment information * The arrays in D_80164560 and D_80164570 track some other X/Y/Z, but the track segment is always 0 (so, untracked/unused) * Its unclear how these arrays relate to each other **/ extern TrackWaypoint *D_80164550[]; extern TrackWaypoint *D_80164560[]; extern TrackWaypoint *D_80164570[]; /** * Don't know what exactly these are, but like D_80164550, D_80164560, and D_80164570 * they track something about the waypoints on a per-path basis **/ // Waypoint types? extern s16 *D_80164580[]; // Based on func_80010DBC this may be angles between waypoints // D_80164590[i] = atan2(waypoint_i, waypoint_i+1)? extern s16 *D_80164590[]; // No idea. Adjacency list? extern s16 *D_801645A0[]; /** * Certain parts of the waypoint logic will copy some path/player specific data to a temporary variable. * For example: D_80164490 is always a value from D_80164550. Depending on which path * a given player is on, the specific value may change **/ // Shadows values from gNearestWaypointByPlayerId extern s16 D_80162FCE; // Shadows values from gPathIndexByPlayerId extern s32 D_80163448; // Shadows values from gPathIndexByPlayerId, but is an array extern u16 D_80165310[]; // Shadows values from gNearestWaypointByPlayerId, but is an array extern s16 D_80165320[]; // Don't think this really belongs with waypoint stuff, but don't know where else to put it extern s16 D_80165330[]; // Shadows values from D_80164560 extern TrackWaypoint *D_801631D0; // Shadows values from D_80164570 extern TrackWaypoint *D_801631D4; // Shadows values from D_80164580 extern s16 *D_801631D8; // Shadows values from D_80164590 extern u16 *D_801631DC; // Shadowd values from gWaypointCountByPathIndex extern u16 D_80164430; // Shadows values from D_80164550 extern TrackWaypoint *D_80164490; // Shadows values from D_801645A0 extern s16 *D_801645E0; extern u16 gNearestWaypointByPlayerId[]; // D_80164438 // Total waypoints passed by playerId? extern s32 D_80164450[]; extern u16 gPathIndexByPlayerId[]; // D_801645B0 extern u16 gWaypointCountByPathIndex[]; // D_801645C8 // These values are only used when the camera is in "cinematic" mode extern s16 gNearestWaypointByCameraId[]; // D_80164668 /** * Stuff that may not be directly related to waypoints, but are only referenced in code_80005FD0. * So they are at least waypoint adjacent. **/ // Tracks something on a per-player basis, no idea what though extern f32 D_80163068[]; // Track segment by playerId, although it curiously does NOT track values for human players // So, in 2 Player Grand Prix, the first 2 entries are always 0 extern u16 D_80163318[]; // Seems to be a per-path overcount of the waypoint count extern s32 D_80163368[]; // Seemingly the Z position of the 1st waypoint in the 0th path? extern f32 D_8016344C; // These seem to track whether a player has entered or exited the "unknown" zone in yoshi's valley // See func_80009000 and func_800090F0 // Is 1 when a player is in the "unknown" zone in yoshi's valley extern s16 D_80163490[]; // Is 1 when a player leaves the "unknown" zone in yoshi's valley extern s16 D_801634A8[]; // Tracks whether a given player is in the "unknown" zone of yoshi's valley extern s16 D_801644F8[]; #endif