WORK IN PROGRESS · SIX COURSES · MIX

EXTENDED

VIRTUA RACING EXTENDED

Virtua Racing · Sega Model 1 (1992) · ten courses

The arcade Virtua Racing has three courses; the 1995 Saturn port added seven of its own. Those seven are converted from the Saturn disc into the arcade game's own data formats and race on the arcade's engine, in MAME: its opponents, its time limits and checkpoints, its render rate. The three original courses are untouched, byte for byte.

Work in progress. Not public yet; the game is not distributed. The ten courses race, and the tuning and the finish are still being worked on. The converter that builds this from a player's own arcade ROM set and Saturn disc is private while it is being finished. No ROMs, disc images, patched sets or extracted data are distributed or linked to, here or anywhere, and nothing will be sent on request. The clips and pictures below are captures of the build running in MAME, shown for demonstration.

WATCH ON YOUTUBE PATCH · COMING SOON

Ten coursesPractice mode's row scrolls through ten entries: the three originals and the Saturn's seven, each with a generated select panel
The arcade's own raceFifteen opponents on every course, time limits and checkpoints per lap, the start grid and gantries re-placed on each new road
Stock MAME 0.289Every byte fits the existing ROM images, no driver change; 28 to 29 display-list switches per 57 frames, as the originals

IN MOTION

Captures of MAME running the build, driven by hand with a controller and recorded as MAME input files, then replayed to video: the Model 1's native 496×384 scaled 2× with scanlines, with the game's own sound. One clip per course, each a single unbroken stretch of a race against the full field of fifteen.

ALPINE In Big Forest's slot: under the snow peaks from 3rd to 2nd, time extended at the checkpoint.
AMAZON FALLS In Bay Bridge's slot: the short lap between the green cliffs, through a checkpoint gantry and up the field.
DIABLO CANYON In Acropolis's slot: through the canyon from 10th to 5th, between the drawn rock walls.
METROPOLIS In Acropolis's slot: the city at dusk, wheel to wheel with the field to a checkpoint gantry.
PACIFIC COAST In Bay Bridge's slot: the coast road at full speed, from 12th to 6th.
SURFERS OVAL In Bay Bridge's slot: the speedway's banked turns, the car leaning with the camber.

WHAT'S NEW

The game is the arcade's: its physics, its opponents' driving, its HUD, its sound. What is new is where it races.

The seven courses

Each Saturn course lives in the slot of one of the originals, whose backdrop, music and race furniture it borrows:

  • Alpine, in Big Forest's: a long mountain lap with the hairpins the Saturn version is known for.
  • Amazon Falls, in Bay Bridge's: the short lap through the falls, where the road passes close to itself.
  • Diablo Canyon, in Acropolis's: climbs and drops, with the hairpins the autopilot likes least.
  • Metropolis, in Acropolis's: the city course that crosses over itself twice.
  • Pacific Coast, in Bay Bridge's: the coast road and its own bridge.
  • Surfers Oval, in Bay Bridge's: the speedway, its banking carried by the collision surface.
  • Surfers Road, in Bay Bridge's: the road course laid out beside the speedway.

The select screen

Practice mode's three panels become a window on a row of ten. Turn the wheel and the row scrolls behind the three frames; the converted entries carry generated panels in the originals' style, a stylised map of the lap in the host's colours. The BEGINNER, MEDIUM and EXPERT labels stay with the three frames, not with the entry that scrolls into them, and the row's order is the project's choice, not the Saturn's.

A race per course

Each course has its own race tables: checkpoints at thirds of its lap, time extensions scaled from the host's by sector length, five laps, the original car table. The opponents follow generated road lines, the start grid and the gantries stand on the new road, and the hosts' own props (Bay Bridge's boards once stood on Pacific Coast's tarmac) are left out.

What stays the same

The three original courses are in their slots, unchanged; the operator settings, the HUD and the sound are the game's own (the attract rotation may show a converted course). A build takes a player's own arcade ROM set and Saturn disc and writes a new set beside them; the inputs are never modified.

Knobs for the playtest

Per course, the build can scale the opponents' pace and the time extensions and set the lap count. The shipped balance is the arcade's own tables; "average difficulty" is still to be tuned by playing, and the single-file starts of two of the hosts are as the game plays them.

HOW IT'S DONE

From the Saturn disc

Each Saturn course is a file of road slices (four planes, a normal and tilt angles each), a 16×16 grid of ground tiles, placed scenery objects with their meshes, and a backdrop. The slices are ordered into a lap by adjacency, the lap's height profile is read from the ground mesh, and the whole course is rotated and shifted so that its start lands on the arcade's absolute start grid, which is where the game spawns the player and the field.

The arcade's data

The Model 1 keeps a course as several tables. The road: a centreline and seven AI lines of road points with headings, and a segment array that maps every collision quad to a road point; the opponents' line-following rule, read from the boot ROM, decides how those must be laid out. Collision: quads for the TGP coprocessor, tarmac and verges, which answers the car's height and surface; the verges are built from the road's measured edge so that they never overlap the tarmac, and a band across the start line credits the last road point before the lap wraps. Scenery: the Saturn's tiles and objects become polygon-ROM cell objects in the arcade's own format, in the free space of the existing images, with the colour table shared by all ten courses.

Around the race

A course directory in free program ROM, reached through nine small patches of the V60 code, lets the game load any of ten entries; the select panels are generated tile maps; each course carries a race blob (time records, checkpoints, car table, lap count) and a spawn list of the host's race furniture re-placed road-relatively. All of it fits the stock images, so MAME 0.289 runs the set as it runs the original.

Checked in MAME

Every build is driven headless in MAME by a Lua autopilot. The gates: the render rate stays at the arcade's 28 to 29 display-list switches per 57 frames on every entry; the player's checkpoints fire and the clock extends on every course; in 150-second races with the full field no opponent parks, every one of the fifteen keeps moving, and the field runs at 85 to 100 % of the original courses' speed in units per second. The originals' tables are re-encoded byte for byte as a check on the decoders.

Found on the way

  • The TGP reports, of all the quads under the car, the one whose height is nearest the car's own, and breaks ties by rounding: a verge that overlaps tarmac holds a car that has once touched it. The originals' quads never overlap; now neither do these.
  • An opponent's line cursor advances only while the road point of the segment its line names is at or behind the car's own: generated lines and segments that ignored this stalled the whole field.
  • The arcade's start grid is an absolute place in the world; the player spawns relative to the host course's road, so every course is placed to put its own start there.

Speed, and the limits

  • Tested in MAME 0.289 only. Nothing has been tried on a real Model 1 board.
  • The course edges end in walls, as the originals' do: at the drawn rock faces, fences, curbs and shorelines of the Saturn scenery, and about 30 units of grass out where nothing is drawn. A wall is a step in the collision surface that the game's own wheel test turns into a scrape, a spin or a crash; the walls themselves are invisible, so a car meets the drawn scenery, not a coloured strip. A few spots still meet a wall a unit or two before the drawn face.
  • The cars follow the road's shape: the opponents pitch on climbs and lean on banked bends, from targets the game reads for each point of their racing line, and the player's car banks with the road's camber and climbs without steps, from the collision surface. Pitch and lean are the Saturn road's own geometry, not the arcade's exaggerated values.
  • Fixed since the first captures: the player's car was not drawn for stretches at a time, because the converted ground tiles sorted in front of it (the arcade sorts whole objects by depth; the originals' ground sorts at its farthest point and ours now does too). The clips and stills here are no longer cut around it.
  • Fixed since the first captures: the HUD's course map is drawn around the player's car with the heading up, so an anticlockwise course (Alpine, Pacific Coast) hung its outline into the middle of the screen; those two courses now draw their map and the car's cross 11 cells further right, in the originals' corner.
  • Built from the European Saturn release only; other regions' discs are not tested.
  • The AI lines are offsets of the centreline, not hand-made racing lines; on the Bay Bridge and Acropolis hosts the game lines the field up single file ahead of the player, as the original Bay Bridge does.
  • The Saturn's banking and backdrops are carried over; its music is not: each converted course plays its host's.
  • Difficulty is not yet tuned: the clock and the opponents are the host's tables, scaled by sector length.

GET THE PATCH

Coming soon. The converter is private until it is finished; when it is published, this is what it will be.

What you will need

  • Your own copy of the arcade game: the MAME 0.289 vr ROM set, all 38 files, with model1io.zip and m1comm.zip beside it.
  • Your own copy of the Saturn port: Virtua Racing (Europe) as a .cue with its .bin.
  • Python 3.12 or later, and MAME 0.289 to play.

One command checks the inputs, names anything wrong with them (a file with the wrong checksum, a disc of another region), and writes a new folder beside your files without touching them.

What will be in it

None of the game. The repository will hold the converter and its tests, the notes on the arcade's and the Saturn's data formats, and facts about the original program: addresses, sizes and checksums. Every course's road, collision, scenery and race tables are computed from your own disc when the build runs.

SCREENSHOTS

Frames from MAME at the Model 1's native 496×384, scaled 2× with scanlines, taken from the same drives as the clips.

The Practice select screen: ACROPOLIS, one of the originals, beside ALPINE highlighted in the middle frame and AMAZON FALLS
Where the originals meet the Saturn entries: Acropolis, then Alpine and Amazon Falls with their generated panels.
The select screen scrolled to PACIFIC COAST, SURFERS OVAL highlighted and SURFERS ROAD: generated map panels in the hosts' colours
Further along the row: Pacific Coast, Surfers Oval and Surfers Road, each a map of its lap under the frames' own labels.
Alpine: the player's car 3rd at 253 km/h on a bend, snowy mountains behind
Alpine, in Big Forest's slot: 3rd, the snow line behind.
Amazon Falls: the player's car 14th at 189 km/h between green cliffs
Amazon Falls, in Bay Bridge's slot: between the green cliffs.
Diablo Canyon: the player's car 6th at 310 km/h, EXTEND TIME, the canyon behind
Diablo Canyon, in Acropolis's slot: 6th, time extended after a checkpoint.
Metropolis: the player's car 9th at 326 km/h, a tower ahead and an opponent alongside
Metropolis, in Acropolis's slot: the city at dusk, an opponent alongside.
Pacific Coast: the player's car 8th at 325 km/h on the coast road
Pacific Coast, in Bay Bridge's slot: 8th at full speed on the coast road.
Surfers Oval: the player's car 9th at 304 km/h in the banked turn, rocks and palms beside
Surfers Oval, in Bay Bridge's slot: banked, the collision carrying the Saturn's camber.