Skip to content

Versions of POD ​

Two editions are known to this project, both with the volume label POD2_0, and a set of official updates, fan files and tools around them. Game files stay out of git: the first disc is in target/ (target/cd, target/disc), POD Gold in target/pod (cd, disc).

POD (first edition)POD Gold
Sourcearchive.org item pod-planet-of-death-pcarchive.org item pod-2-0, "POD (1997) (CD ROM) + Extras"
POD2_0.BIN563,877,888 bytes, MD5 cfb69249…698,685,120 bytes, MD5 9c427d46…
Data trackto 38:37:16 (173,791 sectors)to 51:22:30 (231,180 sectors)
Disc mastered / EXEs linked1997-01-13 / 1997-03-07EXEs 1997-10-25 to 10-29; README "Version 2.8 (September 29th, 1997)"
LanguagesFrench, German, Italian, Spanish (text); menu pictures in French onlyEnglish as well; menu pictures in all five
Tracks / cars16 / 832 / 16 ("the 16 others distributed on POD Web site", README)
BuildsWINPOD, PODMMX, 3dfx, ATI, S3 (each Windows and DOS-extender style)the same, rebuilt, plus Direct3D (WPODD3D, PODD3DX), PowerVR at 800 × 600 (WPODPVR, PODPVRX) and two "64" builds (PODMAX64, PODFXM64, with MAXI64)
Also on the discREADME.TXT (English), manual.doc, FAQS.TXT, PODTHEME.EXE (a desktop theme), Game Service for internet play, mosaico.exe

Measured 2026-10-24: every file of both downloads checks against archive.org's MD5. File lists from pod-viewer list --image, EXE dates from their PE headers, the rest from README.TXT.

What changed in the data ​

Gold has 423 data files against 289, and 136 of them are new:

  • English: DICOS/ENGLISH (three text tables) and MIMG/ENGLISH (32 menu pictures).
  • Menu pictures in every language: three new ones per language, and 10, 27 and 53 changed.
  • 15 new tracks, each .BL3, .BL4, a picture and a sound bank: Azthec, Babelweb, Factory, Lake, Loon, Magnetic, Megapol, Mine, Parking, Pipeline, Road70, Skyrace, Spin, West, Zed. NUKE___1.BCH is also new.
  • 7 new cars, each .BV3, .BV4, a picture and a sound bank: Arakn, Buffo, Frazer, HLRazor, Jaero, Shane, Truck.
  • Changed: RESSON/FIX.MEG, SCRIPTS/BETAMNU.BIN (200 item slots a menu), CIRCUITS.BIN (35 rows, of which the game reads the counted 32) and VOITURE2.BIN (23 records, of which it reads the counted 8). The tracks of the first edition changed too, in their race data only (measured 2026-10-24 on Beltane: the same geometry, sky, animations, zones and beacons; different race paths for every difficulty, reverse paths and opponents, entries 1 to 8): Gold retuned the computer cars' lines.
  • Gone: POLICES/PVRSHADO.BI2 and RECORDS/SPECIAL.BRT.

Every reader handles Gold's files (2026-10-24, measured): the catalogue over Gold's DATA decodes 322 of 423 files completely and none fail; the 101 without a Python decoder are the tracks, cars and chrome (and NUKE___1.BCH), which the Rust disc tests read instead (all 66 tracks and 32 cars). What needed a change: the lists that keep records after their count, four sound banks with an empty section 1 (docs/formats/sounds.md), and two all-zero sub-texture records in MINE.BL3/.BL4 (docs/formats/textures.md). The disc tests now read Gold's folder when it exists and give each count for both editions.

What changed in the code ​

Gold's WINPOD.EXE (1997-10) against the first edition's (1997-03-07), matched function by function (2026-10-24). The map is labels/pod/map.tsv, the first edition's labels at Gold's addresses are labels/pod/names.tsv (273 of 309), and one note per changed function is in labels/pod/changes.tsv.

Exports (2026-10-24): Gold's WINPOD.EXE, PODMMX.EXE, WPOD3DFX.EXE, WPODATI.EXE, WPODS3D.EXE, WPODD3D.EXE and WPODPVR.EXE in analysis/export/pod/ (2,207 to 2,327 functions each before filling gaps; WINPOD.EXE filled to 3,431). The DOS-extender builds (POD*X.EXE, PODMAX64, PODFXM64) are not exported yet.

How it was matched (run/versions/match_builds.py, what_changed.py). Both exports first had their gaps filled (run/ghidra): Ghidra had left 31% of each build's code outside functions. Then, in rounds:

  1. equal instructions once relocated words (from .reloc), call displacements and alignment padding are masked;
  2. the n-th call and the n-th relocated word of two matched functions, aligned with difflib, pair callees and globals;
  3. closest instruction sequence among functions of similar size;
  4. GameFrame's decompile matcher (tools/triage/match_functions.py) as extra leads;
  5. the set of mapped globals and callees a function refers to.

Three hand-checked pairs (the controllers, reached only through pointers) are in labels/pod/manual.tsv.

Result. 2,258 of the first edition's 2,942 functions are matched. Of these, 545 have the same instructions, and 162 more give the same pseudocode with other registers or instruction order. 1,551 differ. Comparing what each of those uses (constants, strings, mapped globals and callees) leaves 267 with the same logic and 1,267 with some difference. The other 684 are unmatched; most are gap-filling candidates that are not real functions, or code rewritten beyond recognition. Gold has 3,447 candidate functions.

Gold was rebuilt with another compiler setting (observed). Gold's code section starts at 0x401000, not 0x410000, and is named AUTO, not BEGTEXT; the import table now comes before the data. Jump targets inside functions are padded with nop, lea r, [r] and mov r, r. Registers are chosen differently and function exits are duplicated. So most "changed" pairs are the compiler's doing, and a byte or pseudocode difference alone says nothing. The notes in changes.tsv are leads: what a function stopped and started using.

Changes seen in the notes (observed in the pseudocode, each a lead to read before relying on it):

  • Error messages around allocation. Many loaders gained the strings ALLOC and MEMORY: Gold reports failed allocations by name (the track readers, pod_file_open, pod_file_create, alloc_beacons, smoke_alloc).

  • race_reset gained NB_MAX_INTER_PAR_TOUR, STATIC and MEMORY: the "at most 4 checkpoints" stop now names its cause.

  • load_menus reads \UbiSoft\Ubi.ini and a DIRECTORY key itself, and the front end (front_end_loop, draw_menu, menu_back, main_menu_enter, goto_menu) changed throughout: the new tracks, cars and English need new menus. front_end_loop gained a BADMODE string.

  • The Cyrix probe is gone (cpu_probe_cyrix, 0x4a88b8): no out 0x22 or in 0x23 is left in Gold's code. Gold needs no patch for it under Wine.

  • The car physics (engine_torque, car_brakes, tyre_forces, wheel_spin, car_step) differ in constants. Part of this is the decompiler showing struct offsets in other ways (+0x4bc against [0x12f]). Part may be real: tyre_forces uses 0x4241 and 0x9471 where the first edition used 0x4240 and 0x9470, and engine_torque and car_brakes gained 0x1cccc (0.45 in 16.16) and 0x14000 (1.25). Measured on Gold (pod-physics, 2026-10-24): the brake and torque constants are real changes; the tyre thresholds are the same tests as before. Gold's face records are 4 bytes longer, its track globals moved, and the chassis search's counter left the race block (0x4f3310). With those, all 8,327 car steps of a Gold race match word for word (docs/systems/physics.md). pod-physics now follows Gold only (the user's decision, 2026-10-24); what it had for the first edition, kept here as history:

    WhatFirst editionGold
    brake and torque lead curve (car_brakes, engine_torque)0x13fff, 0x1cccd0x14000, 0x1cccc
    track face recordsquad 0x38, triangle 0x1c; corners at +0x28/+0x10, flags +0x32/+0x184 bytes longer, after the normals
    sector count, sector table, surfaces0x571f94, 0x571f98, 0x615ea80x57bf74, 0x57bf78, 0x62bc0c
    the chassis search's counter (every 17th call, FUN_004253f4)race block +0x14 (0x502114)0x4f3310, read in 0x417884; Gold's race block starts elsewhere (0x4f8d44), its old head moved near 0x4f32f0
    rolling resistanceinline in car_stepa call (0x417be8), same result
    rand()'s seedstatic (0x84fe64)the game thread's C library data, through [0x4ed728]
    the triple-product helper FUN_004dba44used by the face testsgone: the face tests use dot and cross products

    The first edition's measurements (beltane-3, 2026-10-24): 20,488 of 20,488 car steps, the player followed through 2,561 steps, the catch-up scale on 2,008 calls and the whole simulation step on 101 steps under Unicorn. Its step log built at 0x4e14c0 and 0x731470.

  • The AI tactics (ai_steady, ai_settle, ai_aim_if_ahead, ai_cut_in_*) differ in constants (ai_aim_if_ahead: 0xd6d8 → 0xd6d9). Measured the same (2026-10-24): see "Controllers: the first edition against Gold" below.

Unchanged in Gold (observed by reading Gold's pseudocode at the matched addresses):

RuleFirst editionGoldWhat was checked
Frame clockFUN_004ae894FUN_004a9b14ms × 65, clamp 700..30000, sum; frame time at 0x621b70 (was 0x60be0c)
Step unitFUN_0049b6a00x3a8 / 0x444 at 0x621b60the same two values
Race loopFUN_0049d4c0FUN_0049953crace clock 0x4f9384 (was 0x502740) += frame time
CountdownFUN_004815e8FUN_0047b98c0x157c ms of timeGetTime, seconds left = (start + 5500) / 1000 - now / 1000
End of raceFUN_0042c120FUN_0041eb903 s (0x30000), 60 s in a network race
Unfinished carsFUN_0047831cFUN_00473240steps of 3 × step unit, up to 300 s (60 s network)
Beacon testFUN_0042a3acFUN_0041cf2cthe same logic; 100 units (0x640000)
randFUN_004d1877FUN_004c7f37the same bytes
Smoke seed0x460e900x45d2fdsrand(1000), then the same table loops

The race globals moved: the race records from 0x502140 to 0x4f8d84, the order table from 0x502720 to 0x4f9364, the race cars from 0x61aad0 to 0x630838, the drivers from 0x61f870 to 0x6345d8, the chase camera from 0x60bba0 to 0x6218fc, the countdown phase from 0x5920a4 to 0x5a7604 (all in labels/pod/names.tsv). Their strides and layouts are unchanged (measured in a running Gold race, "Running Gold" below).

Running Gold (2026-10-24) ​

Gold's WINPOD.EXE runs in the emulated PC beside the first edition (run/vm/README.md, "POD Gold"), in English, as far as a recorded race (measured). Its patch list (run/wine/patch_winpod.py, GOLD_PATCHES) is the first edition's at Gold's addresses, found through the map and checked instruction by instruction, with these differences:

First editionGold
Cyrix probe (ports 0x22/0x23)patched outgone from the code
CPU checkpasses on QEMU's CPUFUN_004a3dfc knows Intel family 5 and 6, AMD K5/K6 and Cyrix; any other CPU (QEMU's AMD family 6) keeps the kind 0xff, and FUN_004a1460 quits without a message. Patched: unknown CPUs count as kind 4 (Intel P6)
Fullscreen flagin the data only (0x4f7260)also set to 1 in code at start-up (0x4a147d, FUN_004a1460); both patched
SuspendThread / ResumeThread calls4 and 31 and 2
Display-mode callbackunbounded table, push ebx firstthe same bug, no push ebx: its own cave
Resolutions in the graphics options640 × 480 and lower800 × 600 as well (software build)
Start-upreads [osd] Valid from Ubi.ini and looks for pod2_0\pod2_02.exe (the online service)

The race globals moved (run/vm/podaddr.py, labels/pod/names.tsv) but the race records, race cars and order table keep their layouts and strides (measured: in Gold's recorded races every car's lap times add up to its race time, and the HUD shows the same lap times).

The race rules (pod-race), first edition as history. pod-race follows Gold only since 2026-10-24. On the first edition (WINPOD.EXE 1997-03-07) it was checked against derived/race/beltane-3.jsonl (Beltane EASY, three laps, from the countdown to the results screen): every sample's records, all final records, the order and the results text (Maverick 5'36"17, best lap Shane 1'48"63), and the order between gates in 99.4% of samples with guessed lanes; and under Unicorn the first edition's FUN_0042a1f0, FUN_0042c264, FUN_0047e4d0, FUN_004b0ec0 and FUN_004afd3c on 20,000 cases each (measure/race_rules.py --first, race_paths.py --first). The same five functions in Gold (FUN_0041cd84, FUN_0041ed00, FUN_00478f7c, FUN_004abec4, FUN_004aad68) are recompiled ("changed" in the map) but give the same answers on every case measured; the record table's address, which the split pointers hold, is the one difference the port carries (pod_race::record::BASE). The first edition's gate measurement ran under 0x037f; the games race under 0x027f.

Updates, patches and fan files (same download, POD (1997) (CD ROM) + Extras/) ​

FileWhat it is (first look)
POD - Patch/10x21E.exe (35 MB)A self-installing update; the name suggests 1.0 to 2.1, English. Not unpacked yet
POD - Patch/updatePOD21_3dfx.exe (24 MB)The 2.1 update for the 3dfx build. Not unpacked yet
POD - Patch/pod3dfx.zipA 3dfx patcher (UsePatch.exe, 1997–98)
POD - Patch/podcpuid.zip (2004)A community CPUID fix: compare with our Cyrix-probe patch (docs/running.md)
POD - Patch/podUsb.zip (2005)A community patch for USB joysticks
POD - Patch/POD_nocds.zip, cdpatcher*.zipNo-CD cracks. Not used: the project runs the real disc image
POD - Extra Cars/ (~50 zips), POD - Extra Tracks/ (~50 zips)Fan and web-released cars and tracks, many in _3dfx versions. A test set for every reader, writer and the editor
POD - Tools/Era tools: bl4viewer, bl4exp (a 3D Studio Max plug-in for .BL4), podpaint (with source), podpatcher (track .bin files for about 50 tracks), a French "TestEngine"
PodHacks.exeA community launcher with hacks. Not looked at yet

The extra cars and tracks (checked 2026-10-24) ​

Gold's README says it holds "the 16 basic tracks and the 16 others distributed on POD Web site", and the 8 basic cars with the 8 from the web site. So every official web release is already on the Gold disc (observed, README.TXT). The download's POD - Extra Cars (51 zips) and POD - Extra Tracks (50 zips) hold three other kinds of content:

  • 3dfx versions (*_3dfx.zip): Gold's own tracks and cars, repackaged for the 3dfx build.
  • OEM versions (AlderOEM, CityOEM, CanyOEM, GalOEM, PlantOEM, PompOEM, SewerOEM): base tracks in the OEM 1.0 release's form (inferred from the names).
  • Fan content: for example QBall's cars and tracks, Witnessteam reskins, Newsance, Forgetit and Tron. They install with Ubi Soft's CD Patcher. The game's track screen lists downloaded tracks after its own (README, "If you have downloaded tracks").

Unpacked into derived/extras/ (data files only: .BL3, .BL4, .BV3, .BV4, .IMG, .MEG, .BIN; no programs). Our readers decode 453 of these 474 files. None of the 21 that fail is a 3dfx version. Three are OEM tracks whose animated faces don't add up (CityOEM, CanyOEM, PompOEM). The other 18 are fan files: the F1, F2 and F3 cars (no texture block where expected), two .BV3 files with an impossible vertex count, a picture with bytes left over, and tracks that are cut short or have a gap between entries. Whether the game itself loads these files is not known yet.

Is Gold the latest? (checked 2026-10-24) ​

A first search found no official version after POD Gold 2.8. What it found, with how each is known:

  • The editions. POD came out in February–March 1997 as an OEM version 1.0, much of it bundled with Intel's MMX launch. A retail "POD 2.0" added 3dfx, S3 ViRGE and ATI support. The expansion POD: Back to Hell added 8 cars and 16 tracks, and POD Gold bundles the game, the expansion and a new sound set (Giant Bomb, Wikipedia). That matches Gold's 32 tracks and 16 cars (inferred: our first disc, mastered January 1997, is the OEM 1.0).
  • The patches (POD Underground's archive, quoted on Vogons; Ubi Soft's FTP site is gone): an OEM v1.0 to retail v2 patch, a Direct3D (DirectX 5) update, the 3dfx Glide 2.1 update (updatePOD21_3dfx.exe, for the retail release), a CD-Patcher, force-feedback patches and Game Service 2 for online play. A poster there says POD Gold "is already patched to Version 2.8" and needs no further patch (Vogons, Vogons).
  • A second search (2026-10-24) found no patch numbered above 2.1 and no PCGamingWiki page for POD. Wikipedia gives a UK release of POD Gold in January 1999, but nothing says that build differs from 2.8. POD 2 (1999) is a different game, not a version of this one.

Decided (the user, 2026-10-24): Gold 2.8 as on the disc is the final version and the one we support. The only exception is an official updated build that turns up later, for example in a zip in an archive.

What it means for the port ​

POD Gold 2.8 is the only version worked on (the user's decisions, 2026-10-24: always the last version released, which has the most fixes; the first edition is not used for ongoing work). This page keeps the first edition's differences as history. Un-POD's 1:1 work up to that day was measured against the first edition's WINPOD.EXE (1997-03-07); Gold's EXEs are seven months newer and may differ anywhere, so each part is re-checked against Gold (docs/PORT.md, "Moving to POD Gold"). Every patch in run/wine/patch_winpod.py checks the first edition's bytes, so Gold's EXEs need their own patch list.

Sound: first edition against Gold (pod-sound, 2026-10-24) ​

A first pass, before the label map to Gold's addresses. Measured by comparing the files and, for the code, the first edition's routines byte for byte against Gold's EXEs with relocated addresses and calls to other routines masked.

Code. In Gold's WINPOD.EXE three routines are the first edition's, byte for byte:

RoutineFirst editionGold
The mixerFUN_004df88a0x4d85ba
The channel gainFUN_004df8590x4d8589
The vector length (square-root table)FUN_004db73d0x4d43ad

The C routines of the sound library were all recompiled (registers, stack frames), so their bytes say nothing. They were re-measured instead: every sound measurement of docs/systems/sound.md run on Gold's WINPOD.EXE at Gold's addresses (measure/sound_builds.py, --build gold; the routines found with measure/sound_gold_map.py and Gold's call structure):

MeasurementGold against the first edition
The mixer, 400 cases (measure/sound_mixer.py)identical results, byte for byte
The channel calls, 300 sequences (measure/sound_channels.py)one change: the choice of ten (Gold FUN_004be26c)
Length and 3D parameters, 5,000 cases each (measure/sound_space.py)identical
Events, frames and engine groups on each build's FIX.MEG, 150 cases (measure/sound_events.py)identical behaviour

What changed in the sound code (measured where it shows in the results, observed in the code):

  • The ten mixed channels. Once ten are chosen, a louder channel now replaces the quietest of them (the first of equals). The first edition replaced the first chosen one quieter than it. pod-sound follows Gold.
  • Stereo swapped at start. Gold's swap flag (0x4E9A24, the first edition's 0x698E18) is 1 in the image, the first edition's 0. With the same pan arithmetic, Gold turns the first edition's left and right around unless Ubi.ini sets Stereo=0 (the setting's default is the flag's current value). The stereo flag moved next to it (0x4E9A28).
  • An event recorder. The dispatcher (Gold FUN_004b8d64) can record each fired event with its parameters into a table at 0x6C6F20 (when 0x5829E4 is set), and play back the parameters from there (0x5829E0, 0x6C7044): inferred, the machinery of Gold's replays. Off in the image.
  • Refactored, same results: the channel step in a routine of its own (FUN_004be510), the distance volume too (FUN_004b86b8), the frame update in a new order (it updates the engine groups before moving the listener; the lists and samples come out the same in the 150 cases).
  • The track loudspeakers, unchanged. "Son Localisé" and "Tue Sons Local" (Gold 0x470934, 0x4709dc; the first edition's FUN_00475b18, FUN_00475bbc) are the same code with the records moved to 0x58DA74 and the bank's event base read through the circuit row (observed). They start and stop the CD music in both builds (docs/systems/sound.md, "Who starts and stops the music").
  • FIX.MEG's gaps. Gold's banks number events by their highest record number + 1, as before, so FIX.MEG's removed events 21 and 22 leave empty slots: firing one plays sound 0 (the tyre squeal), in Gold and in pod-sound.

The labels the map left unmatched are placed in labels/pod/names.tsv: read_bank_sounds004ba808, read_bank_smmh 004bad08, read_bank_events 004bae78, read_bank_sound004ba460, load_music_script 004bd308, sound_engine_start 004be854, sound_thread004bfbfc, play_channel 004bf74c, channel_playing 004bf544, sound_send 004b8888, sound_frame 004b95b0. Gold's PODMMX.EXE holds the length routine at 0x4d502d and no copy of WINPOD's mixer, as in the first edition. Not yet re-done on Gold: the MMX comparison and the recordings of the running game (they wait for Gold in the emulated PC).

FIX.MEG. The events keep their numbers, and the countdown voices, the CD sequence and the repair are the same sounds. The rest changed:

First editionGold
Engine group 0Monza, three layers (Monzaralb, Monzarap1c, Monzarap2b)Moteur unique, one layer: hotpors22sb2, fade in 0 .. 1.0, full to 16.7, out at 23.3; pitch slope 6,073, offset 11,724
Events 21, 22 (acceleration, deceleration, kind 9)play Acc, Retro with the engine value on the pitchgone
Brakes, events 14, 15, 33three sounds (Derap1, Derap2, FREIN1b)one, Skid1, for all three
Crash (event 3), "scrash" (sound 3)IMP_car, Imp2Hit3 (flag bit 0 cleared on event 3), Jump
Menu soundpod4Menupod, the same length
Records 5 and 17Derap2, FREIN1bremoved (the numbers are skipped)

Music. CDAREF.TXT, SCRIPT1.TXT, SCRIPT2.TXT and MIDIREF.TXT are byte-identical. Gold's image also has one audio track, track 2, from 51:22:30.

Banks. Gold adds 15 track banks and 7 car banks (above). Four of them (BABELWEB, FACTORY, SKYRACE, SPIN) have an empty SMMH section, which the game reads as no groups (docs/formats/sounds.md); the readers take it since 2026-10-24, and all 50 of Gold's banks read and write back byte for byte. pod-sound loads FIX.MEG and the 32 circuits' banks in CIRCUITS.BIN order (crates/pod-sound/tests/gold_banks.rs: 33 banks, 134 sounds, 150 event numbers).

Controllers: the first edition against Gold (pod-ai, 2026-10-24) ​

The controllers were traced, ported and checked on the first edition, then moved to Gold (docs/systems/controllers.md now cites Gold). They are the same in Gold (measured): measure/controllers.py on Gold's WINPOD.EXE with Gold's Beltane gives results equal to crates/pod-ai in every check (2,000 cases per routine, 15,000 steps of eight-car races, the player's controller, every word of the tables). The constant differences the matcher saw in the AI tactics are the compiler's. What changed: Gold reads each opponent's rules from text (FUN_0045f404: %ld, then %ld%ld%ld per rule; "Attaques_Disponibles", "Fich_Conc") instead of the track file's opponent records, and builds the start-up tables in four parts (FUN_004c5e88).

WhatFirst editionGold
Computer controllerFUN_0042f5f0FUN_004221d8
Player controllerFUN_00423b3cFUN_00415f9c
NeighboursFUN_00472b24, FUN_0047299cFUN_0046dc04, FUN_0046da4c
Lane followingFUN_0042f440, FUN_0042f36cFUN_00422028, FUN_00421f58
Behaviour step, rule drawFUN_00462fe4, FUN_00462f40FUN_0045f2a0, FUN_0045f1f8
Rule types to behavioursFUN_00463154 (table 0x463114)FUN_0045f36c (table 0x45f32c), stored by FUN_0045f3dc
Behaviours0x462430 .. 0x462f040x45e7c8 .. 0x45f1c4 (labels/pod/manual.tsv)
Steering indexFUN_004728f0FUN_0046d990
Troncon lane, line searchFUN_004593fc, FUN_004598e4FUN_004559dc, FUN_00455ed0
Buttons, key mapFUN_00474e8c, FUN_0047508c, FUN_00477b4cFUN_0046fd18, FUN_0046fe80, FUN_004729e4
TablesFUN_004cfde4 (0x69d4c8 .. 0x6f54c8)FUN_004c5e88 (0x6d4704 .. 0x72c704)
Draw clock, neighbour listDAT_00572458, 0x5782a8DAT_00581e88, 0x58d770

Measured on the first edition only (to be repeated on Gold):

  • Read from the running game with run/vm/ctlsnap.py: an EASY race on Beltane (300 snapshots, 2,100 controller steps; racer 0 on the human controller with flags 1, racers 1 to 7 on the computer's with flags 2) and a MEDIUM race (Difficulty=Normal; 750 snapshots, 5,250 steps, 68 rule draws of which 8 took a rule). The port matched every step.
  • pod-physics' step logs (beltane-2, beltane-3): 17,402 and 17,927 controller calls, all matching the port. beltane-3 matched only after the port rounded at 53 bits: the game raced with the x87 control word 0x027f in all 2,561 steps, not the start-up's 0x037f, and under 0x037f one draft target (step 378) came out one unit off.
  • The opponent records on the disc: Beltane's EASY opponents had no rules; MEDIUM and HARD 2 to 10 each (decoders/track_race.py).

Front end: first edition against Gold (pod-ui, 2026-10-24) ​

History, for the record: pod-ui was first traced and checked on the first edition in French. There, 97 frames captured from the original matched pixel for pixel (main menu, quit, help, race mode, track and car choice, pause and its confirmation, records); those captures (derived/ui/ref, derived/ui/seq) are retired.

What differs in Gold, found so far:

  • BETAMNU.BIN: a menu is 0x374 bytes, 200 item slots, against 0x1BC (90) (observed in Gold's load_menus 0x428af8, step at 0x428e09); items are still 0xFC.
  • CIRCUITS.BIN: 35 rows, 32 circuits, then three rows each holding "Night".
  • English text and pictures (DICOS/ENGLISH, MIMG/ENGLISH); the track screen's length is in miles ("Miles 4.82": the English table's INFOS/UNIT).
  • The menu code changed throughout (the label map's front_end_loop, draw_menu, goto_menu, menu_back, main_menu_enter, load_menus); draw_outline, outline_box, draw_item and move_selection are not matched yet.

Still from the first edition and to re-trace in Gold: the outline corrections (crates/pod-ui/src/render/outline_table.rs, measured with measure/menu_outline.py on the first edition's 0x43873c), every handler and action port in crates/pod-ui/src/screens/, the main menu's run-time item states, and the addresses the comments cite.

Prose CC0 1.0, code Apache 2.0. POD: Planet of Death is © Ubi Soft; none of its files are on this site.