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
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.
Official screenshots of WindRacer taken by Nadeo.
(These are the only official screenshots of the game in existence.)
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 - 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
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
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
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
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.
(Yes, the background is just this solid color.)
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.
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"
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.
(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.)
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.
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.
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.)
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.
Some sea foam textures from Virtual Skipper can probably be re-used as well.
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"
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?
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\".
| 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\" |
| Class ID | Inherits from |
|---|---|
| 03060000 | CGameApp -> CGameProcess -> CMwCmdContainer -> CMwNod |
| 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.
| Class ID | Inherits from |
|---|---|
| 03061000 | CGameControlPlayerInput -> CGameControlPlayer -> CGameRule -> CGameProcess -> CMwCmdContainer -> CMwNod |
| Class ID | Inherits from |
|---|---|
| 03062000 | CGameStage -> CMwNod |
| 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.
| Class ID | Inherits from |
|---|---|
| 03063000 | CGameTriggerBonus -> CGameTriggerContact -> CGameTrigger -> CMwNod |
| Param ID | Name | Type |
|---|---|---|
| 03063000 | NextCheckPoint | CLASS (CWindRacerCheckPoint) |
| Class ID | Inherits from |
|---|---|
| 03063000 | CGameTriggerBonus -> CGameTriggerContact -> CGameTrigger -> CMwNod |
| 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. |
| Class ID | Inherits from |
|---|---|
| 03065000 | CNetNod -> CMwNod |
| Class ID | Inherits from |
|---|---|
| 03066000 | CNetFormTimed -> CMwNod |
| Class ID | Inherits from |
|---|---|
| 0A102000 | CSceneToyVehicle -> CSceneToy -> CSceneMobil -> CSceneObject -> CMwNod |
| 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.
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