Wrote up some details on moon locations, which use a different method of navigation (coordinate and distance-based). Requires some special handling of boundaries and pathfinding (e.g. you can’t walk up a cliff).
Something like:
LunarLocale {
int x, // Canonical X coordinate
int y, // Canonical Y coordinate
rect bounds, // Rectangle defining the bounds (size) of the locale
bool blocksMovement, // Whether the bounds block movement through it
int visibleRange, // How far away the locale is
bool fastTravelAllowed, // Whether the player can fast travel to the location
bool discovered, // Whether the player has discovered the location
}