The viewer uses the engine's projection, not the console's

It was drawing the map mirrored. The X flip came from the setup console's
picture of Brewer's Bane, which is an illustration and not a screenshot -
the game does not draw it that way round.

What the game does: L4GaugeImagePrimitive::Draw plots
MoveToAbsolute(dest->x, dest->z), so the screen axes are view-space X and
Z, and the graphics view's origin is bottom left with Y increasing upward
- BackgroundLine draws endpoints.bottomLeft to endpoints.topRight, and
the port's zero-degree blit is documented with the origin in the bottom
left corner. So +X runs right and +Z runs up.

Also added the heading the real display has. NavDisplay centres on the
vehicle and turns with it, inverting the viewer's transform and taking
yaw only unless rockAndRoll is set; the viewer defaults to heading 0,
which is the north-up case, and Q/E/R turn it. Panning and dragging now
work in what you see rather than in world axes, so up stays up when the
map is turned.

TRACKS.html is left following the console pictures on purpose: nine of
those cards are the console pictures, so the reconstructed nine have to
sit beside them consistently. The two disagree by a mirror and each is
right for what it is, which both READMEs now say.
This commit is contained in:
Cyd
2026-08-07 13:12:57 -05:00
parent dc74fb3867
commit 4979193528
4 changed files with 119 additions and 29 deletions
+17
View File
@@ -28,6 +28,8 @@
<span><kbd>&uarr;</kbd><kbd>&darr;</kbd><kbd>&larr;</kbd><kbd>&rarr;</kbd></span><span>pan N/S/E/W</span>
<span><kbd>+</kbd><kbd>-</kbd></span><span>zoom</span>
<span><kbd>[</kbd><kbd>]</kbd></span><span>previous / next track</span>
<span><kbd>Q</kbd><kbd>E</kbd></span><span>turn the map &plusmn;15&deg;</span>
<span><kbd>R</kbd></span><span>heading back to zero</span>
<span><kbd>F</kbd></span><span>fit the course</span>
<span><kbd>A</kbd></span><span>fit everything, strays included</span>
<span><kbd>G</kbd></span><span>GPS / NavDisplay LOD</span>
@@ -51,6 +53,21 @@
<p class="note">Colours are the game's own: palette indices resolved through
<code>secpal.pcc</code>, the palette the pod's secondary port is configured
with. The walls are grey because index 51 is grey.</p>
<p class="note"><b>+X runs right and +Z runs up</b>, which is the engine's
projection and not a choice: <code>L4GaugeImagePrimitive::Draw</code> plots
<code>(dest-&gt;x, dest-&gt;z)</code>, and the graphics view has its origin at
the bottom left with Y increasing upward. Note the setup console's own
pictures of the tracks are <em>mirrored</em> against this &mdash; they are
illustrations, not screenshots. The plans in <code>TRACKS.html</code> follow
the console pictures so the drawn and reconstructed cards agree with each
other; this viewer follows the game.</p>
<p class="note"><b>Heading.</b> The real nav display centres on your vehicle
and turns with it &mdash; it inverts the viewer's transform, taking yaw only
unless <code>rockAndRoll</code> is set. Free panning at heading 0 is the
north-up case; <kbd>Q</kbd> and <kbd>E</kbd> turn the map to see what it looks
like underway.</p>
</aside>
<script id="data" type="application/json">{data}</script>