WindRacer Logo Recreation

Welcome to the WindRacer Repo, the best source for everything WindRacer!

This page aims to catalog as much information about WindRacer as possible.
From common information, like context behind the game and gameplay description, to technobabble about the game internals, you can find it here.
The website is being updated as new information is being discovered. Last major update: Nov 4th, 2025

Created and maintained by greffmaster from the TrackMania Research And Development group.
If you have any new information that you would want to contribute, please contact me on Discord by sending a friend request @ greffmaster.

Contents

  1. What's WindRacer?
  2. ScreenShots
  3. Timeline
    1. 2000
    2. 2001
    3. 2002
    4. 2003
  4. WindRacer in my NADEO games? It's more likely than you think.
  5. How to patch it
  6. Pilots
  7. Fonts
  8. Known assets
  9. Stunts
  10. Online play
  11. Internals
    1. Loading files
    2. CWindRacer
    3. CWindRacerControlPlayer
    4. CWindRacerRace
    5. CWindRacerCheckPoint
    6. CWindRacerBonus
    7. CNetFormWindRacerAdmin
    8. CNetFormWindRaceGameState
    9. CSceneToySandYacht
    10. VppFile Format

What's WindRacer?


WindRacer is a prototype game developed by Nadeo in 2001. It's a land sailing racing game, where the player is tasked to race on a sunny island using a SandYacht vehicle.
The player needs to control the sail relative to the wind direction in order to gain more speed. During the race, you collect different bonus items scattered across the island, such as hearts, coins and speed boosts.
It's also possible to perform various stunts that will be displayed on screen when executed successfully.

ScreenShots


Official screenshots of WindRacer taken by Nadeo.

./images/nadeo/full_WR01.jpg ./images/nadeo/full_WR02.jpg ./images/nadeo/full_WR03.jpg

(These are the only official screenshots of the game in existence.)

Timeline


Here is a rough timeline of events at NADEO between 2000 and 2003, based on file dates, string references inside game executables and external sources.

2000

??? ????, 2000 - NADEO Founded by Florent Castelnérac and Pascal Hérold

Jul 24th, 2000 - GBXv1 Start

Aug 21st, 2000 - GBXv1 End, GBXv2 Start

Aug 25th, 2000 - GBXv2 End, GBXv3 Start

Oct 25th, 2000 - "www.nadeo.com" domain registered

2001

Jun 18th, 2001 - WindRacer v0.0 build

Jul ????, 2001 - Cyberdrive being worked on (ref)

Oct 09th, 2001 - Many files in the "Resource" folder from that date use GBXv3

Nov ????, 2001 - NADEO works with Captain Interactive on Lanfeust of Troy (Lanfeust Quest)

??? ????, ???? - GBXv3 End, GBXv4 Start

??? ????, ???? - GBXv4 End, GBXv5 Start

2002

Mar 28th, 2002 - "Resource\Media\Solid\Cube.Solid.Gbx" in VSK2 uses GBXv5

Jul 12th, 2002 - "1.08" (we don't know what this refers to, but its found in vsk2demo exe)

Sep 19th, 2002 - Virtual Skipper 2 Demo released

Sep 28th, 2002 - Virtual Skipper 2 released

Nov 15th, 2002 - Virtual Skipper 2 Patch 1.1 released

2003

Jan 30th, 2003 - Virtual Skipper 2 Patch 1.3 released

Feb 20th, 2003 - Virtual Skipper 2 Patch 1.4 released

Feb 25th, 2003 - GBXv5 End, GBXv6 Start ("Resource\Media\Solid\LightFrustrum.Solid.Gbx" uses GBXv6)

Oct 21st, 2003 - TrackMania DemoBeta1 released

Nov 14th, 2003 - TrackMania DemoMag2 released

Nov 21st, 2003 - TrackMania released

Dec 12th, 2003 - TrackMania Patch 1.1 released

WindRacer in my NADEO games? It's more likely than you think.


Because WindRacer is using the Game "engine" group (please check terminology) instead of using a unique one, it wasn't omitted while compiling other NADEO games, such as Virtual Skipper and TrackMania.
That means other games made in the GameBox engine still have parts of the WindRacer codebase leftover.
(Cyberdrive had its own "engine" group, so it wasn't included with any game. womp womp)
There is actually enough code to be able to "run" it, but some parts might still be missing. The most "complete" version of WindRacer is in Vsk2Demo.
All WindRacer related classes were removed in TrackMania Original, and CSceneToySandYacht (CSceneVehicleSandYacht) was removed in TrackMania United/Nations Forever.

Unfortunately, the code is only half of the puzzle, as the game needs its own assets, like sounds, music, graphics and other GBX files.
We don't have access to these files, but it's possible to recreate some files in order to get the game to a "functioning" state.

Here is how the main menu looks like with a recreated font and logo. The selected option has "wavy" animation on the characters.

WindRacer Main Menu

(Yes, the background is just this solid color.)

How to patch it


If you want to do your own research, you can patch the Virtual Skipper 2 Demo executable (Vsk2Demo.exe) and turn it into a WindRacer executable.
Make sure you have the correct executable by checking its MD5 checksum (using 7-zip or other tools). The MD5 checksum for Vsk2Demo.exe is: 097fa48f689e3cede050f43ed85a341d
You can download the demo from here.

Patch addresses and bytes
ADDRESS     BYTES   DESCRIPTION

0x000019E7: 72B103  // Changes the function call to a function that maps folders to class ids for WindRacer instead of Vsk2
0x00001A38: A803    // Changes main game object size allocation from 0x4f0 to 0x03a8 (CVirtualSkipper and CWindRacer are different sizes)
0x00001A59: 730303  // Changes the function call from CVirtualSkipper constructor to CWindRacer constructor
                    // Optional
0x00004338: 0003    // Changes window height to 768
0x0000433D: 0004    // Changes window width to 1024
0x001B1CB3: 75      // Disables fullscreen mode
0x003859C4: FCFD    // Changes lpClassName from "Vsk2" to "WindRacer"
0x003859C8: FCFD    // Changes window title name from "Vsk2" to "WindRacer"

Because my current files are unfinished, I won't be uploading theme here. So in order to run the game, you need to figure out which files are missing and find a placeholder replacement yourself.

Required files
"GameData\Media\Audio\Music\Demo.Music.gbx"
"GameData\Media\Audio\Music\Menu.Music.gbx"
"GameData\Media\Audio\Sound\MenuMainChangeSelect.Sound.gbx"
"GameData\Media\Audio\Sound\MenuMainSelect.Sound.gbx"
"GameData\Media\Audio\Sound\MenuPlayerSelect.Sound.gbx"
"GameData\Media\Audio\Sound\MenuRaceSelect.Sound.gbx"
"GameData\Media\Audio\Sound\SandSound.Sound.gbx"
"GameData\Media\Audio\Sound\UIGoldPan.Sound.Gbx"
"GameData\Media\Audio\Sound\UIGreat.Sound.Gbx"
"GameData\Media\Audio\Sound\UIGroovy.Sound.Gbx"
"GameData\Media\Audio\Sound\UIHeart.Sound.Gbx"
"GameData\Media\Audio\Sound\UIKiss.Sound.Gbx"
"GameData\Media\Audio\Sound\UISwing.Sound.Gbx"
"GameData\Media\Audio\Sound\UIYeah.Sound.Gbx"
"GameData\Media\Font\Comic.Font.gbx"
"GameData\Media\Solid\MenuArrowLeft.Solid.gbx"
"GameData\Media\Solid\MenuArrowRight.Solid.gbx"
"GameData\Media\Solid\MenuLoading.Solid.gbx"
"GameData\Media\Solid\MenuPilotFemale1.Solid.gbx"
"GameData\Media\Solid\MenuPilotFemale2.Solid.gbx"
"GameData\Media\Solid\MenuPilotFemale3.Solid.gbx"
"GameData\Media\Solid\MenuPilotMale1.Solid.gbx"
"GameData\Media\Solid\MenuPilotMale2.Solid.gbx"
"GameData\Media\Solid\MenuPilotMale3.Solid.gbx"
"GameData\Media\Solid\MenuRaceDemo.Solid.gbx"
"GameData\Media\Solid\MenuSelectPlayer.Solid.gbx"
"GameData\Media\Solid\MenuSelectRace.Solid.gbx"
"GameData\Media\Solid\SolarFlare.Solid.Gbx"
"GameData\Media\Solid\UIFanFemale1.Solid.Gbx"
"GameData\Media\Solid\UIFanFemale2.Solid.Gbx"
"GameData\Media\Solid\UIFanMale1.Solid.Gbx"
"GameData\Media\Solid\UIFanMale2.Solid.Gbx"
"GameData\Media\Solid\UIGoldPan.Solid.Gbx"
"GameData\Media\Solid\UIHeart.Solid.Gbx"
"GameData\Media\Solid\WindIndicator.Solid.Gbx"
"GameData\Media\Solid\WindRacerLogo.Solid.gbx"
"GameData\Media\Texture\ParticleSand.Texture.gbx"
"GameData\Media\Texture\SandTrail.Texture.Gbx"
"GameData\Mobil\Vehicle\SandYacht\Blue.SandYacht.Gbx"
"GameData\WindRace\Level01.WindRace.Gbx"

Pilots


The game has 6 different pilots that you can choose in the second menu. Three female and three male pilots.

Tanechka Lepnova
Ingrid Strom
Elvira Grobanni
David Mc Loan
Jon Davis Junior
Arnold de Montespan

Here is the pilot selection menu.

WindRacer Pilot Select Menu

(The menu displays 3x2 grid of pilot portraits. You can move the cursor to display the name of each pilot. Used placeholder graphics for portraits.)

Fonts


The logo for the game uses a font called Hobo
Font used for the game interface (internally called Comic.Font.Gbx) is just Comic Sans with a brown-beige gradient and a shadow outline.

Known assets


While we don't have any assets for WindRacer, there are some files that were most likely re-used in later games.
There are not many of them, but we can at least use these few assets back.

SolarFlare.Solid.Gbx & Soleil.tga - Model and texture used for the solar flare in the race. It loads the model for the CWindRacerControlPlayer object and puts it at X:1620 Y:400 Z:-615. Found in Virtual Skipper 2 Demo.

Soleil.tga

SandTrail.dds - Texture used for sand trails when driving on sand. Found in TrackMania in the vehicles assets. (Ironically, it's actually unused in that game lol.)

SandTrail.dds

WindIndicator.Solid.Gbx - Model used to display wind direction and speed. It loads the model for the CWindRacerControlPlayer object and rotates it around the player. Found in Virtual Skipper 2 Demo.

Wind indicator screenshot

Some sea foam textures from Virtual Skipper can probably be re-used as well.

Stunts


The SandYacht vehicle has the ability to rotate freely while in the air, by holding down the steering keys.
In the game executable, there is a list of different stunt strings that are displayed on screen after successfully executing a stunt figure.

"Right Wheeling"
"Left Wheeling"
"Nose Wheeling"
"Tail Wheeling"
"Free Style 1080"
"Free Style 900"
"Free Style 720"
"Free Style 540"
"Free Style 360"
"Rodeo 1080"
"Rodeo 900"
"Rodeo 720"
"Rodeo 540"
"Rodeo 360"
"Cab Flip"
"Cab Back Flip"
"      Yoohoo!\nDouble Back Flip"
" Yoohoo!\nBack Flip"
"Swing Baby!\nDouble Flip"
"Swing Baby!\n     Flip"
"Oh My God!\n  1080"
"How Did You\n Done That!\n   900"
"You Did It!\n   720"
"Woohoo!\n  540"
"Hyper!\n  360"
"Great!\n  180"

Online play


There is a lot of evidence pointing towards the game having some kind of online multiplayer functionality.
It is currently unknown how to activate it. Maybe there were some launch arguments that set some global variables?

Internals


Loading files


The game uses a special function for loading GBX files directly. Instead of providing the full file path, it instead uses only the file name and the class id.
It works by first mapping directory paths to specified class ids. So for example, the game can map class 0x09005000 (CPlugSolid) to "Media\Solid\" directory.
When the load function is called to load for example "WindRacerLogo.Solid.gbx", with specified class id 0x09005000, it will try to load "Media\Solid\WindRacerLogo.Solid.gbx".
File path is relative to "GameData\".

Folder Class Map
Class ID Class Name Path
0A011000 CSceneMobil "Mobil\"
0A102000 CSceneToySandYacht "Mobil\Vehicle\SandYacht\"
09005000 CPlugSolid "Media\Solid\"
0901C000 CPlugMusic "Media\Audio\Music\"
0901A000 CPlugSound "Media\Audio\Sound\"
09011000 CPlugBitmap "Media\Texture\"
0904D000 CPlugFont "Media\Font\"
03062000 CWindRacerRace "WindRace\"

CWindRacer

Class Info
Class ID Inherits from
03060000 CGameApp -> CGameProcess -> CMwCmdContainer -> CMwNod

Param Info
Param ID Name Type
03060000 Race CLASS (CWindRacerRace)
03060001 Reset ACTION
03060002 WindDirection REAL
03060003 WindSpeed REAL
03060004 GameMobils CLASSBUFFER (CSceneMobil)
03060005 SeaLevelBase REAL
03060006 SeaLevelCoef REAL

CWindRacer is the main class for the game. It handles the initialization and the main game loop.

CWindRacerControlPlayer

Class Info
Class ID Inherits from
03061000 CGameControlPlayerInput -> CGameControlPlayer -> CGameRule -> CGameProcess -> CMwCmdContainer -> CMwNod

CWindRacerRace

Class Info
Class ID Inherits from
03062000 CGameStage -> CMwNod

Param Info
Param ID Name Type
03062000 MainCheckPoint CLASS (CWindRacerCheckPoint)
03062001 LapCount NATURAL

Class that contains data about the level, such as its Scene3d, game objects, triggers and LapCount.

CWindRacerCheckPoint

Class Info
Class ID Inherits from
03063000 CGameTriggerBonus -> CGameTriggerContact -> CGameTrigger -> CMwNod

Param Info
Param ID Name Type
03063000 NextCheckPoint CLASS (CWindRacerCheckPoint)

CWindRacerBonus

Class Info
Class ID Inherits from
03063000 CGameTriggerBonus -> CGameTriggerContact -> CGameTrigger -> CMwNod

Param Info
Param ID Name Type
03064000 BonusType ENUM ("Heart", "Gold", "Special")

Class for the collectable objects that can be placed on the game stage. BonusType controls the effect after being collected.

BonusType
Name Image Effect
Heart Adds 1 to the heart counter. (needs more research)
Gold Adds 1 to the gold counter. (needs more research)
Special Multiplies MaxSpeed of the vehicle by 2,5. Currently unknown for how long the effect lasts.

CNetFormWindRacerAdmin

Class Info
Class ID Inherits from
03065000 CNetNod -> CMwNod

CNetFormWindRaceGameState

Class Info
Class ID Inherits from
03066000 CNetFormTimed -> CMwNod

CSceneToySandYacht

Class Info
Class ID Inherits from
0A102000 CSceneToyVehicle -> CSceneToy -> CSceneMobil -> CSceneObject -> CMwNod

Param Info
Param ID Name Type
0A102000 WindDir REALRANGE (-3.141593 -> 3.141593)
0A102001 IsSailAutomatic BOOL
0A102002 SailChoquingAngle REAL
0A102003 SailMaxChoquingAngle REAL
0A102004 WindSpeed REAL
0A102005 ElasticiteVoile REALRANGE (0.000000 -> 1.000000)
0A102006 AttenuationVoile REALRANGE (0.000000 -> 1.000000)
0A102007 VppFile CLASS (CPlugFileText)
0A102008 JumpIntensity REAL
0A102009 IsParticles BOOL
0A10200A SandEmitPeriod NATURAL
0A10200B FXSand CLASS (CSceneMobilParticlesFX)
0A10200C IsTrails BOOL
0A10200D IsSailDeform BOOL
0A10200E SailFaseilTimePeriod REAL
0A10200F SailFaseilSpacePeriod REAL
0A102010 SailFaseilAmplitude REAL
0A102011 SailGonflement REAL
0A102012 SailFermeture REALRANGE (0.000000 -> 1.000000)
0A102013 MastRelSpeedMultCoef REALRANGE (0.000000 -> 1.000000)
0A102014 CanMastCollide BOOL

The main vehicle class used in WindRacer.

VppFile Format

The VPP files seem to control wind speed and direction for vehicles.
It's a generic text file with a ".vpp.txt" extension. Not much is fully known about what each value does.
VPP2 format is used in Virtual Skipper 2.

VPP_FILE FORMAT
Revision 1

greffmaster 2025

VPP_FILE (count:int)
[count] {
    (time?:float)
    (count2:int)
    [count2] {
        (float)
        (float)
    }
    (float)
    (float)
}

example:

VPP_FILE 2 0.0 1 0.0 0.0 0.0 0.0 1.0 1 0.0 0.0 0.0 0.0
-------- c [   c [     ]       ] [   c [     ]       ] // comments, not part of the file

example 2:

VPP_FILE 4 0.0 2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1 0.0 0.0 0.0 0.0 2.0 1 0.0 0.0 0.0 0.0 5.0 3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
-------- c [   c [     ] [     ]       ] [   c [     ]       ] [   c [     ]       ] [   c [     ] [     ] [     ]       ] // comments, not part of the file