Drawing what the map screen draws never was going to give a map. Nearly every placement in every track is one piece, cn3, and its gauge image is two 25x5 bars at x 19.5..44.5 and -44.5..-19.5 - not a wall along the route but a wall across it with a 39 unit gate in the middle. The collision solid agrees exactly. A few hundred of those is a row of ticks. The gate is the point: cn3's origin sits in the opening, so every placement marks somewhere the race passes through. Walking the gates nearest to nearest, from the end furthest out, draws the track itself - Brewer's Bane comes out as its L with the junction chambers, Zaxxis as a circuit, and the small arena as the maze it always was. Guarded, because chaining nearest neighbours across a regular grid invents a maze-like path out of nothing but visit order. Each track is tested first on how many neighbours a gate has within 1.6x the typical spacing: a corridor gives 2, a floor of obstacles gives 4 or more. The separation is not close - seventeen tracks score 1 or 2, the demolition arena scores 8 on an exact 100 unit grid and keeps its wall blocks. Most of the arcade tracks really are near-straight canyon runs, a few hundred units wide and several thousand long. The plans say so now rather than implying otherwise.
82 lines
4.8 KiB
Smarty
82 lines
4.8 KiB
Smarty
<!doctype html>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Red Planet - the tracks</title>
|
|
<style>{css}</style>
|
|
|
|
<header class="top">
|
|
<div class="wrap">
|
|
<p class="eyebrow">Red Planet 4.12 · plans drawn from RPL4.RES</p>
|
|
<h1>Every track,<br><em>seen from above</em></h1>
|
|
<p class="lede">There are no track maps in the game's files — the console had
|
|
pictures of them and those pictures did not survive. But the track itself knows
|
|
where it goes. Almost every one is built from a single piece repeated: a wall
|
|
thrown across the route with a gate in the middle. <strong>These plans are the
|
|
course those gates describe</strong> — every gate is a point the race passes
|
|
through, walked in the order the course visits them.</p>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="bar">
|
|
<div class="wrap bar__in">
|
|
<div class="seg" role="group" aria-label="Filter">
|
|
<button type="button" data-filter="all" aria-pressed="true">All</button>
|
|
<button type="button" data-filter="arcade" aria-pressed="false">Arcade</button>
|
|
<button type="button" data-filter="r411" aria-pressed="false">4.11</button>
|
|
<button type="button" data-filter="later" aria-pressed="false">Community</button>
|
|
<button type="button" data-filter="race" aria-pressed="false">Death race</button>
|
|
<button type="button" data-filter="football" aria-pressed="false">Football</button>
|
|
</div>
|
|
<input id="search" class="search" type="search" placeholder="Search track…"
|
|
aria-label="Search track">
|
|
<span class="count" id="count">{n} / {n} TRACKS</span>
|
|
</div>
|
|
</div>
|
|
|
|
<main class="wrap">
|
|
<div class="key">
|
|
<span><i style="background:var(--ink-mid)"></i>The course, gate by gate</span>
|
|
<span><i style="background:var(--sys)"></i>Offered for the death race</span>
|
|
<span><i style="background:var(--pilot)"></i>Offered for football</span>
|
|
</div>
|
|
|
|
<div class="grid">{cards}</div>
|
|
<p class="empty-state" id="nomatch" hidden>No track matches that.</p>
|
|
|
|
<p class="foot">{n} tracks: {arcade} shipped in the 4.10 arcade cabinets, {r411} added
|
|
in 4.11, {later} built by the community afterwards. Drawing what the pod's map screen
|
|
draws turns out not to give a map. That screen follows
|
|
<code>NavDisplay::DrawStatic</code>, laying down each placement's
|
|
<code>GaugeImage</code>, and nearly every placement in every track is the same
|
|
piece: <code>cn3</code>, whose image is two 25×5 bars at x 19.5–44.5
|
|
and -44.5–-19.5. That is not a wall running along the route, it is a wall thrown
|
|
across it with a 39 unit gate in the middle, and the piece's collision solid says the
|
|
same. A few hundred of those is a row of ticks, not a course.</p>
|
|
<p class="foot">But the gate is the point: <code>cn3</code>'s own origin sits in the
|
|
opening, so every placement marks somewhere the race passes through. Walk the gates in
|
|
the order the course visits them — nearest to nearest, starting from the end
|
|
furthest out, beginning a new line rather than reaching when the next gate is too far
|
|
— and the track draws itself. Walls stacked for height repeat the same opening
|
|
and count once. Placements standing alone more than 200 units from any other are
|
|
dropped: fourteen tracks park a single piece at (1200, 0, 0) well off the
|
|
course, and one stray placement stretches the frame to twelve times the width of the
|
|
track. A real branch keeps its neighbours and stays — Paingod's second canyon is
|
|
sixty pieces out at x = -400.</p>
|
|
<p class="foot">One track is drawn the other way. Chaining nearest neighbours across a
|
|
regular grid invents a maze-like path out of nothing but the order the points happened
|
|
to be visited in, and a plan has no business inventing a track layout. So each track is
|
|
tested first: count how many neighbours a gate has within 1.6× the typical
|
|
spacing. A corridor gives each gate the one ahead and the one behind; a floor of
|
|
obstacles gives it four or more. Seventeen tracks score 1 or 2 and are drawn as a
|
|
course. The large arena scores 8 on an exact 100 unit grid, so it keeps its wall blocks
|
|
instead — and the small arena, which scores 2, really is the maze it looks like.</p>
|
|
<p class="foot">There is still no driving surface anywhere in the file: the track is
|
|
walls and gates, never tarmac. Extent and relief are the span of the placed geometry in
|
|
world units, so a long thin plan is a point-to-point canyon run — most of the
|
|
arcade tracks are exactly that, a few hundred units wide and several thousand long
|
|
— and a squat one is a circuit or an arena. Tracks marked NOT IN THE MENU exist
|
|
in the resource file but the setup screen does not offer them.</p>
|
|
</main>
|
|
|
|
<script>{js}</script>
|