RVGL Documentation

About RVGL

RVGL is a cross-platform rewrite / port of Re-Volt that runs natively on both Windows and GNU/Linux. It's powered entirely by modern, open source components. Work in progress.

Send us your feedback at The Re-Volt Hideout.

Copyright © RV Team 2010-2022.
Webpage: https://rvgl.org
Email: rv12@revoltzone.net


Features at a Glance

  • A new renderer based on programmable shaders.
  • Support for various platforms (Windows, Linux, macOS, Android) across multiple architectures (x86, x86_64, armhf, aarch64).
  • Wide screen, Full HD, 4K resolutions and multi-monitor support.
  • Unicode support, additional languages and International Keyboard Layouts support.
  • Improved and re-designed high resolution game font.
  • Additional content from the Dreamcast version brought to PC and Android.
    • Rooftops level and additional cars from the DC version (available as a separate optional download). BigVolt and BossVolt are added to the stack of carboxes.
    • Additional Gallery pages from the DC version.
    • Dreamcast mode: Use the DC layout for the Championships and car selection screen.
  • Multi-Player lobby launching, Spectator mode and Discord Rich Presence integration.
  • Lookback button from the console versions and a new Hood View.
  • Play against up to 15 other opponents.
  • Support for 2 to 4 player Split-Screen Multi-Player mode.
  • Support for modern game controllers, mouse controls and touch controls on Android.
  • Support for 3D surround sound. Surround speakers or headphones with virtual surround capability are required.
  • Support for original soundtrack playback, ripped from PC, Dreamcast or PSX versions.
  • Improved AI: Better wall avoidance and steering correction, intelligent oversteer correction, smarter recovery from crashes, and better use of special routes.
  • Customization: Level properties, car shadows and box art, other extensive features for custom content creation. The Random Cars and Random Tracks settings take custom content into account.
  • Car skins: Choose between alternate skins when available at the car preview screen.
  • Custom cups: Create your own championship cups.
  • Custom frontends: Select between user-made frontends (i.e., menu screens) from Options -> Select Frontend.
  • Content search: Start typing the name of the content (car, track or cup) at the selection screens and jump to it.
  • Content packs: Manage custom content packs and enable/disable them individually.


Language files are placed in the game's strings folder. Text files placed in the folder are automatically detected by the game. Additional details about the language can be specified using an appropriate escape sequence.

  • Use \LN<Language Name> to specify the localized name of the language. This is the name of the language displayed in-game.
  • Use \LC<Language Locale> to specify the two-letter ISO 639-1 code for the language. The locale affects things like case mapping. For example, i is capitalized to İ in Turkish (tr) locale and I in other locales.

These details are typically added to the end of the language file, though they can occur anywhere in the file. Below is a sample taken from french.txt:


As of version 18.1110a, RVGL supports and uses UTF-8 encoding for the language files and other text based configuration files. For more detailed information about Unicode support, see the section on Internationalization.

The following languages are currently included: Basque, Czech, Dutch, English, French, German, Hungarian, Italian, Lithuanian, Polish, Portuguese, Romanian, Serbian, Slovak, Slovenian, Spanish, Swedish and Turkish.

You can contribute your translations to the RVGL Localization Project, or send a pull request on GitLab.


Save files are located in the profiles folder. RVGL has a global settings file named "rvgl.ini". Profile specific settings are saved to "profile.ini" within the player's profile folder (eg., profiles\marv\profile.ini). Profile names are capitalized in-game. The player's profile folder also contains game progress.

Best times and lap records of all players are saved in the times folder. Replays are saved in the replays folder.

As of version 18.1110a, player names and profile names accept international characters through Unicode support. Because of the UTF-8 encoding used, however, this can limit the number of typeable characters.


Original Soundtrack (Dreamcast version) is available along with the game assets from Re-Volt I/O.

If you have a retail Re-Volt CD, you can rip the soundtrack yourself. RVGL supports soundtrack from the PC, Dreamcast and PSX versions.

  • PC / DC version: Rip the 14 audio tracks from the CD to one of the supported formats (Ogg, Flac, MP3 or WAV). Name them sequentially from track02[.ogg] to track15[.ogg] (file extension may vary), and place them in the game's redbook folder.

  • PSX version: The soundtrack is present on the disc as TRACK1.DA. Convert it to Ogg and name the file track1.ogg, then place it in the game's redbook folder. Note that Ogg is the only format supported in this case.

The PSX soundtrack is better suited for gameplay, as it has tracks stitched together for seamless playback, and the Dreamcast soundtrack is considered the most complete version.

Dreamcast Mode

Additional content from the Dreamcast version is available in RVGL as an optional download. This adds the Rooftops level and 14 additional cars to the game. The Championship cups and carboxes layout are preserved from the original PC version.

If you grew up playing Re-Volt on Dreamcast, you now have the option to enable Dreamcast layout for the Championship cups and the carboxes at the selection screen.

  • Step 1: Ensure that you've downloaded and installed the Dreamcast Pack.
  • Step 2: Enable Dreamcast mode in your profile.
    • Navigate to your profile within the profiles folder and open profile.ini.
    • Locate the key CupDC and set it to 1, then save it.
  • Step 3: Enable Dreamcast carboxes layout.
    • Navigate to levels\frontend\custom\dc in your game folder.
    • Copy the contents of the folder (i.e., the files frontend.fob and frontend.fin) to one level above it (to levels\frontend\custom).

Some of the additional cars have alternate skins based on the PSX version. These can be selected from the Car Preview screen.


RVGL supports up to 16 players in Single Race or Battle Tag mode, plus 8 additional slots for spectators, resulting in a total of 24 connections in a direct Peer-to-Peer network. Spectators can join once slots free up.

RVGL utilizes UDP hole punching to connect players behind NAT. In most cases, no port forwarding is required for clients. The host is required to forward port 2310 (UDP) to be able to accept incoming connections.

Hybrid P2P: In cases where a direct connection is not possible between players, RVGL is capable of linking the affected players together through multicasting (i.e., messages between these players pass through the host). This happens automatically and ensures the best possible connection between players.

Waiting Room commands:

  • Up / Down arrow keys scroll through the player list. When there are more than 12 players, Page Up / Page Down jumps to the prev / next page.

  • Host can use Ctrl + D to kick (disconnect) a player. Ctrl + Shift + D kicks the player and blocks them from connecting again during the session. Ctrl + S puts the player in Spectator mode and Ctrl + A puts the player in Active mode.

  • Host has their Public IP address displayed at the top right corner. This can be copied to the clipboard with Ctrl + C. Ctrl + V pastes clipboard content in chat messages and when joining a game (in the Host Computer field).

In-Game commands:

  • The In-Game lobby is accessible with the TAB key.
  • Type a quick message while racing by pressing the F12 key.
  • Up / Down at the race results screen is used to spectate unfinished players.

The Back To Lobby in-game menu option can be used to go back to Frontend without quitting the online session. This allows players to change their name and car. It also allows the host to re-launch the session with new settings, such as different number of laps. This feature was added in version 18.1110a.

Discord Rich Presence:

Multi-Player games can be announced and joined directly from the Discord app. Metadata like the game cover-art and gameplay state is advertised in a Discord user's profile. To be able to launch games directly from Discord, a custom URI is registered during the RVGL setup. To manually register the URI, run RVGL with the -register command line. To customize the URI further, see the Platform specific sections. The Discord Desktop client is required. This feature was added in version 18.0731a.

Visit the community's official Discord server.

The Windows versions support DirectPlay lobby applications like GameRanger or GameSpy Arcade. Support for this is provided in dplobby_helper.dll.


  • Game Settings:

    • Multiplayer CPU: Enable or disable CPU cars in Multi-Player mode.
    • Show Ghost: Enable or disable the ghost car in Time Trial.
    • Split Times: Choose between Global and Per-Rating split times in Time Trial.
    • Camera View: Choose between the available camera modes (Android only).
  • Video Settings:

    • V-Sync: Enable or disable sync to vertical blank. Supported values are On, Off and Adaptive. Adaptive V-Sync is supported on certain Windows and Linux systems.
    • Generate Mipmaps: Mipmap levels can be generated automatically at loading time. This is best used in conjunction with Anisotropic texture filtering.
    • Anisotropy: Support for enabling Anisotropic texture filtering from the Render Settings. This is only applicable when Texture Filter is set to Linear.
    • Antialias: Support for enabling Multisample anti-aliasing (MSAA) from the Render Settings.
    • Water Ripples: Enable or disable the water ripples effect in eg., Botanical Garden. This can help improve performance with some Intel cards.
  • Controller Settings:

    • Controller Slot: Select the player for which controls are to be configured (1-4).
    • Button Opacity: When touch controls are used, change the visibility level of the virtual buttons (Android only).
    • Force Feedback: Enable or disable Force Feedback or Haptic support for each controller.
  • In-Game Options:

    • Next Track: Start a different track without quitting to Frontend.
    • Save Replay: Save the race replay. View saved replays from Options -> View Replay.

Advanced Options

These options are accessible only by editing the game configuration files.

Log files: The game log is generated at profiles\re-volt.log. Running the alsoft_log script generates an OpenAL info log at profiles\alsoft.log.

These options can be changed in rvgl.ini and apply to all profiles:

  • Video section:

    • Profile to set the OpenGL profile to be used. For more information, check the Renderer section.
    • Shaders to enable / disable the shader-based rendering engine. For more information, check the Renderer section.
    • ShaderLights, ShaderShadows, ShaderEffects to configure the number of lights, shadow boxes and mesh effects that affect each mesh (0-16). Only applicable in shader mode.
    • SortLevel to switch between complex and minimal translucency sorting schemes. Only applicable in shader mode.
    • Threaded to enable / disable multithreaded OpenGL support for loading.
    • Orientation to set the device orientation (0-5, or -1). Supported values are: Auto (-1), Landscape (0), Portrait (1), Sensor Landscape (2), Sensor Portrait (3), Reverse Landscape (4), Reverse Portrait (5).
    • EffectFlag to enable / disable certain visual effects like mesh deformation and the bomb scorch effect that can be taxing on low end systems or mobiles.
    • CompressTextures to enable / disable texture compression if available.
    • LimitFPS to limit the frame rate with vsync off. Set the preferred frame rate or set it to zero to disable limiting. The minimum supported limit is 15.
    • LimitLatency to reduce input lag (low latency mode). This can have a negative impact on performance. Set to 1 to use standard latency control mechanism, or 2 to use Fence Sync Object when available.
    • Compositor to enable / disable Desktop compositing on Linux. Enabling this allows smoother transition between RVGL and other windows, at the cost of slightly reduced performance.
    • HighDPI to enable / disable high DPI rendering on macOS.
  • Network section:

    • LocalPort forces a specific port to be used when connecting to an online session. If you have trouble seeing other players online, you should forward a specific port (UDP) to your system and then set LocalPort accordingly. In most cases, it's safe and recommended to leave this at 0.
    • DiscordRPC toggles Discord Rich Presence support, allowing you to completely disable it by setting it to 0.
  • Editor section:

    • LegacyCameraControls to switch camera controls between modern and legacy modes. See the Modern Editor section.
    • LegacyEditorControls to switch between modern and legacy editor workflow. See the Modern Editor section.
  • Misc section:

    • UseProfiles to enable / disable multiple profiles support. When disabled, the DefaultProfile is loaded automatically, or if none exists, a profile is created automatically.

These options are changed in profile.ini and are specific to a player profile:

  • Game section:
    • CatchUp to enable / disable CPU cars "rubberbanding".
    • CupDC to enable / disable Dreamcast mode for the Championship cups. Requires the DC Pack to be installed.
    • Difficulty to adjust the AI difficulty level in single races (0-3).
    • FinalLapMsg to enable / disable the Final Lap! message.
    • AnimateRearView to enable / disable the rear view transition animation.
    • FinalCam to enable / disable the special finish camera at race end.
    • WeaponCam to enable / disable the weapon in-set camera used for fireworks.
    • RandomSkins to enable / disable the randomization of CPU and Random Cars skins.
    • NLaps to change the number of laps (goes up to 255).
    • NCars to change the number of cars (can be set to 1 to race alone; in this case, race wins are not counted as progress).

Keyboard Commands

In-set Cameras: F1 changes camera view (can be configured from Controller Settings). In Replay and Spectator modes, it can be used to disable the dynamic view changes and lock the camera to a specific view. F2 and F3 toggle rear view and follow view cameras. F4 cycles between players in the follow view.

Toggle Fullscreen: F11 toggles between Fullscreen and Windowed mode.

Screenshot: F8 automatically saves a screenshot. The screenshots are timestamped and saved in the profiles folder as PNG files.

Find / filter cars and tracks at the selection screens using the Keyboard. The search is automatically activated on typing.

Search Starts with... Type eg., "TOY", and it selects the first car whose name starts by TOY (likely the TOYECA). As long as this search is active you can navigate with the Left / Right keys amongst all cars whose name starts with TOY. To cancel search, press Esc. If navigation is impossible or the search has no match, it produces a blocking sound.

Search Contains... If you want to search for a word included in the name but not necessarily at the beginning, just press the "*" key, and now if you type SLUG it will find all occurrences that match the wildcard search "*SLUG*", for example Phat Slug.


  • Home: Jump to the first available car. A second press jumps to the first user car.
  • End: Jump to the last stock car. A second press jumps to the last user car.
  • Page Up / Page Down: Jump 10 cars at a time.


  • Controller hot-plugging is supported.
  • The D-Pad is used for menu navigation when supported.
  • Menu forward and back are set to buttons A and B by default on supported controllers.
  • Controller axes and buttons are properly supported for menu navigation.

The SDL2 GameController API is used to provide support for modern game controllers like the Xbox 360 and PS3 Controllers. This means Triggers can be selected along with other axes. Axis and Button names are displayed in the Controller Config menu for these devices. A GameController mapping database is included that supports various controllers "out of the box".

Controller GUIDs and mappings are logged at game start. This can be useful for adding your own GameController mapping in case one is not available for your controller. Custom mappings are sourced from profiles\gamecontrollerdb.txt.

GameController mappings can be generated interactively. For Windows / Linux, use the SDL2 Gamepad Tool by General Arcade. For Android, use the RVGL Controller Map app (see the Android section).


As of version 18.0428a, there is support for a new rendering engine based on programmable shaders, targeting OpenGL / OpenGL ES 2.0 and above. This shader-based renderer is expected to have significantly improved performance on modern GPUs and better power efficiency on laptops and mobile devices.

As of version 18.1020a, the shader-based render is used by default. To switch back to the fixed pipeline renderer, edit rvgl.ini and set Shaders = 0. This is applicable to both Desktop and Mobile versions.

OpenGL Functionality:

RVGL has optional support for new OpenGL functionality that takes advantage of newer hardware. Some of these options are only applicable when the shader-based renderer is active. Support for these features can be verified from the "Video Info" section in profiles\re-volt.log.

  • Uniform Buffer Objects: Buffer-backed uniform blocks are used to store and update shader state which can provide better stability and improved performance when rendering scenes with large number of meshes. Requires OpenGL 3.0, GLES 3.0 or extensions. The feature can be toggled with EnableUBO in rvgl.ini.
  • Separate Shader Objects: Shader programs for the vertex and fragment shading stages are generated separately, enabling better reuse of shader code. Requires OpenGL 4.1, GLES 3.1 or extensions. The feature can be toggled with EnableSSO in rvgl.ini.
  • Frame Buffer Objects: Antialias support is implemented through Frame Buffer Objects (i.e., the application maintains its own frame buffers rather than rendering directly to the window buffers). To use a native multisampled window, set EnableFBO to 0 in rvgl.ini. This is particularly useful for embedded GPUs (see the Android section).

OpenGL Profiles:

Advanced users can select one of the supported OpenGL Profiles through the Profile key in rvgl.ini. Some of these profiles are only applicable when the shader-based renderer is active. The following values are supported:

  1. Default profile: Initialize a backwards compatible OpenGL profile.
  2. Core profile: Initialize a 3.2+ Core profile. Only applicable in shader mode. In some cases, driver support might be better with a core profile.
  3. ES profile: Initialize an OpenGL for Embedded Systems profile. Requires a mobile GPU or driver support for ES emulation. Depending on whether shader mode is active, this will initialize either GLES 1.1 or GLES 2.0+.
  4. D3D profile: On Windows, initialize an OpenGL ES 2.0+ profile using the bundled ANGLE implementation, based on the Direct3D backend. Only applicable in shader mode.


As of version 18.1110a, RVGL uses Unicode (UTF-8) encoding for the game internals and all text content. The game is also capable of reading Unicode filenames through UTF-8 on Linux and Android, and Wide Character support on Windows.

Text files that are not in valid UTF-8 encoding are assumed to be ASCII (Windows-1252) and converted internally to UTF-8.

The re-designed game font provides support for various commonly used Latin alphabet sets and diacritics. The following Latin alphabets are considered fully supported: English, French, German, Italian, Spanish, Portuguese, Dutch, Danish, Norwegian, Swedish, Finnish, Estonian, Hungarian, Basque, Romanian, Polish, Lithuanian, Latvian, Czech, Slovak, Slovenian, Croatian, Bavarian, Welsh, Livonian, Turkish and Vietnamese.

Further, the following alphabets are supported through standard romanization schemes: Indic (IAST, NLK and ISO 15919), Cyrillic (ISO 9 and language-specific standards), Greek (ISO 843), Georgian (ISO 9984), Armenian (ISO 9985), Arabic (ISO 233) and Hebrew (ISO 259).

Below is a complete list of international characters supported by the game:

  • Grave: à À c̀ C̀ è È f̀ F̀ g̀ G̀ ì Ì k̀ K̀ ǹ Ǹ ò Ò p̀ P̀ s̀ S̀ t̀ T̀ ù Ù ẁ Ẁ ỳ Ỳ
  • Acute: á Á ć Ć é É ǵ Ǵ í Í j́ J́ ḱ Ḱ ĺ Ĺ ń Ń ó Ó ṕ Ṕ ŕ Ŕ ś Ś ú Ú ẃ Ẃ ý Ý ź Ź
  • Circumflex: â Â ĉ Ĉ ê Ê î Î k̂ K̂ l̂ L̂ n̂ N̂ ô Ô ŝ Ŝ û Û ŵ Ŵ ŷ Ŷ ẑ Ẑ
  • Circumflex + Grave: ầ Ầ ề Ề ồ Ồ
  • Circumflex + Acute: ấ Ấ ế Ế ố Ố
  • Circumflex + Tilde: ẫ Ẫ ễ Ễ ỗ Ỗ
  • Circumflex + Macron: û̄ Û̄
  • Circumflex + Dot Below: ậ Ậ ệ Ệ ộ Ộ
  • Circumflex + Hook Above: ẩ Ẩ ể Ể ổ Ổ
  • Trema: ä Ä c̈ C̈ ë Ë ï Ï ö Ö ẗ T̈ ü Ü ẅ Ẅ ÿ Ÿ z̈ Z̈
  • Trema + Acute: ḯ Ḯ ÿ́ Ÿ́
  • Trema + Macron: ǟ Ǟ
  • Tilde: ã Ã ẽ Ẽ ĩ Ĩ ñ Ñ õ Õ ũ Ũ ỹ Ỹ
  • Tilde + Macron: ȭ Ȭ
  • Cedilla: ç Ç ḑ Ḑ ȩ Ȩ ģ Ģ ḩ Ḩ ķ Ķ ļ Ļ ņ Ņ ş Ş ţ Ţ
  • Cedilla + Breve: ḝ Ḝ
  • Ring: å Å ů Ů
  • Ring Below: l̥ L̥ r̥ R̥
  • Ring Below + Macron: l̥̄ L̥̄ r̥̄ R̥̄
  • Caron: ǎ Ǎ č Č ď Ď ě Ě ǧ Ǧ ǐ Ǐ ǰ J̌ ǩ Ǩ ľ Ľ ň Ň ř Ř š Š ť Ť ž Ž
  • Caron + Cedilla: ž̧ Ž̧
  • Caron + Comma: ž̦ Ž̦
  • Caron + Comma Above: č̕ Č̕
  • Double Acute: a̋ A̋ ő Ő ű Ű
  • Breve: ă Ă c̆ C̆ ĕ Ĕ ğ Ğ ĭ Ĭ m̆ M̆ n̆ N̆ ŏ Ŏ r̆ R̆ ŭ Ŭ z̆ Z̆
  • Breve Below: ḫ Ḫ
  • Breve + Grave: ằ Ằ
  • Breve + Acute: ắ Ắ
  • Breve + Tilde: ẵ Ẵ
  • Breve + Dot: m̐ M̐
  • Breve + Dot Below: ặ Ặ
  • Breve + Hook Above: ẳ Ẳ
  • Comma: c̦ C̦ h̦ H̦ k̦ K̦ l̦ L̦ n̦ N̦ ș Ș ț Ț
  • Comma Above: c̕ C̕ k̕ K̕ p̕ P̕ t̕ T̕
  • Ogonek: ą Ą ę Ę į Į ų Ų
  • Ogonek + Breve: c̨̆ C̨̆
  • Hook Above: ả Ả ẻ Ẻ ỉ Ỉ ỏ Ỏ ủ Ủ ỷ Ỷ
  • Dot: ḃ Ḃ Ċ ċ ė Ė Ḟ ḟ ġ Ġ ḣ Ḣ i İ ṁ Ṁ ṅ Ṅ ȯ Ȯ ṗ Ṗ ṙ Ṙ u̇ U̇ ẇ Ẇ Ẋ ẋ ẏ Ẏ ż Ż
  • Dot Below: ạ Ạ c̣ C̣ ḍ Ḍ ẹ Ẹ ḥ Ḥ ị Ị ḳ Ḳ ḷ Ḷ ṃ Ṃ ṇ Ṇ ọ Ọ ṛ Ṛ ṣ Ṣ ṭ Ṭ ụ Ụ x̣ X̣ ỵ Ỵ ẓ Ẓ
  • Dot + Macron: ȱ Ȱ
  • Dot Below + Trema: ạ̈ Ạ̈ ọ̈ Ọ̈ ụ̈ Ụ̈
  • Dot Below + Macron: ḹ Ḹ ṝ Ṝ ụ̄ Ụ̄
  • Stroke: đ Đ ł Ł ƶ Ƶ
  • Macron: ā Ā c̄ C̄ ē Ē ḡ Ḡ ī Ī k̄ K̄ n̄ N̄ ō Ō ū Ū ȳ Ȳ z̄ Z̄ ǣ Ǣ
  • Macron Below: ḏ Ḏ ẖ H̱ ḵ Ḵ ḻ Ḻ ṉ Ṉ ṟ Ṟ ṯ Ṯ
  • Macron + Acute: ī́ Ī́
  • Horn: ơ Ơ ư Ư
  • Horn + Grave: ờ Ờ ừ Ừ
  • Horn + Acute: ớ Ớ ứ Ứ
  • Horn + Tilde: ỡ Ỡ ữ Ữ
  • Horn + Dot Below: ợ Ợ ự Ự
  • Horn + Hook Above: ở Ở ử Ử
  • Vowels: œ Œ æ Æ ø Ø ə Ə ı I
  • Eszett: ß ẞ
  • Eth: ð Ð
  • Thorn: þ Þ
  • Symbols: º ° ¡ ¿ § « » … © ® ™ ‡ • ʹ ʺ ʼ ˮ ¨ ʾ ʿ
  • Currency: £ € ¥ ₹ ¢

Launch Parameters

You can start RVGL via command-line or shortcuts with the following parameters:

-aspect <width> <height> <lens>
Changes the display aspect ratio and fov (default 512).

Automatically kicks players who use altered cars (parameters.txt) or track files. Cars and tracks are compared with the ones used by the host. (Added in version 17.1009a.)

-basepath <path>
Set the base data path. If <path> is not provided, use the system default (if available) or the current directory. (Added in version 20.0902a.)

Enable the use of a global blocklist to block players from joining your session. The entries are loaded from profiles\blocklist.txt with one IP address per line. (Added in version 21.0905a.)

-chdir <path>
Set the working directory to <path>. (Added in version 19.0301a.)

Performs simpler visibox computations for rendering.

Launches game gauge benchmarking mode.

Launches the game in demo mode.

Set to hide in-game chat messages. These can be seen later by pressing TAB or F12. (Added in version 19.0320a.)

-lobby <ip address>
Launch the game and directly connect to a lobby. <ip address> can be the host's IP, 0 (to search for local sessions), or entirely omitted (for launching the host).

-multisample <num_samples>
Initializes a multisampled opengl window without framebuffer objects.

Disables screensaver activation at main menu. (Added in version 19.0120a.)

Disables force feedback of controllers.

Disables gamma correction.

Disables the intro.

Disables the joystick and controller subsystem.

Set by the host to prevent new players from spectating an ongoing race. Helps conserve bandwidth. (Added in version 19.0414a.)

Disables mipmaps.

Set by the host to disable multicasting in P2P mode. Helps conserve bandwidth. (Added in version 19.0414a.)

Set by the host to disable P2P and use centralized connection mode.

Keeps the game running even when it's in the background.

Disables display mode change in fullscreen. (Added in version 20.0325a.)

Force the legacy fixed pipeline renderer. (Added in version 18.0428a.)

Launches the game without sound and music.

Disables stars in Museum 2's planetarium.

Disables custom content.

Disables custom cars. (Added in version 20.0210a.)

Disables custom cups. (Added in version 20.1230a.)

Disables custom levels. (Added in version 20.0210a.)

Disables custom car sounds. (Added in version 20.0210a.)

Disables custom car skins. (Added in version 20.0210a.)

-packlist <name>
Enable packs listed in the specified packlist. The game looks for the packlist at packs\<name>.txt. (Added in version 12.1230a.)

-pass <phrase>
Protects the session with a password. The passphrase can be up to 255 characters in length and cannot contain spaces. (Added in version 18.0310a.)

-port <port>
Overrides the LocalPort setting in rvgl.ini. (Added in version 17.1009a.)

-prefpath <path>
Set the preferences path. Game saves and configuration files belong here. If <path> is not provided, use the system default. This is usually:

  • C:\Users\<user>\AppData\Roaming\RVGL (Windows)
  • ~/.local/share/RVGL (Linux)

(Added in version 20.0902a.)

Print the contents of the re-volt.log file to the terminal or console.

-profile <name>
Skip the profile selection menu and directly load the profile supplied. If <name> is omitted, load the last used profile.

Register the game for lobby launching support. It's currently used for registering a custom URI for the Discord client. (Added in version 18.0731a.)

-res <width> <height> <bpp>
Forces a fullscreen resolution.

Automatically save replays in select game modes. (Added in version 19.0210a.)

-serverport <port>
Overrides the port that the server listens to (default 2310). When the host uses a custom server port, all clients will need to use the same server port to be able to connect to that host. (Added in version 18.0310a.)

Saves race results and event logs (such as chat messages) to the profiles folder as timestamped .csv and .log files. (Added in version 17.1012a.)

Access ping display in Multi-Player mode with Ctrl + P. (Added in version 19.0210a.)

Disables the loading screen.

-window <width> <height>
Launches the game in window mode. Specify width and height optionally. The default size is half the desktop dimensions.


-alpharef <0 to 255>
Reference value for alpha testing (default 128).

Launches the game in developer mode and enables edit modes and debug features.

-editscale <s>
-editoffset <x, y, z>
Changes scale and offset of the in-game editor, all floating point values

Gazza's AI car. Have the player's car driven by AI and control AI cars with Up / Down and Right Ctrl. To be used in conjunction with -dev.

Gazza's AI info draw. Display debug info related to AI nodes and car AI computations. To be used in conjunction with -dev.

Gazza's AI route choice. Additional debug options to force the route decisions taken by AI cars. To be used in conjunction with -dev.

Shows the maximum texture size supported by the GPU.

Platform Specific


The recommended way to install RVGL is using RVGL Launcher, a cross-platform launcher and package manager. Pre-built full game packages are also available at Re-Volt I/O.

Updates for RVGL are available either as an executable installer or 7-zip archive. Using the installer is recommended as it updates necessary registry entries and folder permissions, and optionally creates a Desktop shortcut.

The Windows versions support DirectPlay lobby applications like GameRanger or GameSpy Arcade. Support for this is provided in dplobby_helper.dll. Running the setup also ensures that the game is properly detected by lobby applications.

Running RVGL in Administrator mode is not recommended. Instead, place the game in a locally accessible folder (such as My Documents) or a drive other than the system drive if possible.

Direct3D Backend

On Windows systems with poor or non-existent OpenGL support, RVGL can take advantage of Google's ANGLE project which provides a compliant OpenGL ES implementation based on Direct3D 9 or 11. To use this support, edit rvgl.ini and set Shaders = 1 to enable the shader-based renderer, and set Profile = 3 for ANGLE Direct3D.

You can verify whether the Direct3D backend is being used by checking the Video Info section in profiles\re-volt.log. Below is a sample output:

GL Vendor: Google Inc.
GL Renderer: ANGLE (AMD Radeon™ R4 Graphics Direct3D11 vs_5_0 ps_5_0)
GL Version: OpenGL ES 3.0 (ANGLE

Discord URI

RVGL registers the custom URI discord-472158403830218762:// for Discord Rich Presence integration. The registration is done only once during the RVGL setup. To customize the URI and set various launch parameters, edit the registry key at:


The "%1" at the end of the path is a required parameter. The default URI can be re-registered by running RVGL with the -register command line.


The recommended way to install RVGL is using RVGL Launcher, a cross-platform launcher and package manager. Pre-built full game packages are also available at Re-Volt I/O.

The instructions below cover manual installation steps. There is no need to do these steps when installing through RVGL Launcher.

Before starting the game for the first time, run the setup script included in the package. The setup converts game files to lower case, adds necessary file permissions, and places an application launcher at ~/.local/share/applications.

Launch the game using the rvgl launch script. The script auto-detects your system architecture and launches the appropriate (32-bit or 64-bit) executable. It also resolves dependencies by using libraries bundled with the game in place of missing ones. This allows the game to run without manual configuration on a wide range of systems, as long as the OpenGL drivers, SDL2 and SDL2_image packages are installed.

All game data must be in lower case. To repair file names after installing custom content, run the fix_cases script. Starting from version 18.1020a, these scripts are require Bash 4.

Required Packages

# Debian / Ubuntu
sudo apt install libsdl2-2.0-0 libsdl2-image-2.0-0
sudo apt install libopenal1 libenet7 libunistring2
sudo apt install libjpeg8 libpng16-16 libtiff5 libwebp6
sudo apt install libvorbisfile3 libflac8 libmpg123-0 libfluidsynth1

# Arch Linux
sudo pacman -S sdl2 sdl2_image
sudo pacman -S openal enet libunistring
sudo pacman -S libjpeg libpng libtiff libwebp
sudo pacman -S libvorbis flac mpg123 fluidsynth

# Fedora
sudo yum install SDL2 SDL2_image
sudo yum install openal enet libunistring
sudo yum install libjpeg libpng libtiff libwebp
sudo yum install libvorbis flac mpg123 fluidsynth

Discord URI

RVGL registers the custom URI discord-472158403830218762:// for Discord Rich Presence integration. The registration is done only once during the RVGL setup. To customize the URI and set various launch parameters, edit the Desktop entry at:


The "%u" at the end of the path is a required parameter. The default URI can be re-registered by running RVGL with the -register command line.


RVGL has been available on macOS since version 21.0125a. It's distributed in the form of universal binaries and has native support for 64-bit Intel and M1 (ARM64) architectures.

These are the earliest devices that RVGL runs on:

iMac (Mid 2007 or later)
MacBook (13-inch Aluminum, Late 2008), (13-inch Polycarbonate, Early 2009 or later)
MacBook Pro (13-inch, Mid 2009 or later), (15-inch or 17-inch, Mid/Late 2007 or later)
MacBook Air (Late 2008 or later)
Mac Mini (Early 2009 or later)
Mac Pro (Early 2008 or later)
Xserve (Early 2009)

The DMG available from the RVGL project page requires original game data. This is not included in the bundle itself. However, a full game bundle is also available from Re-Volt I/O.

If you got the minimal DMG from the RVGL project page, you must copy game files to ~/Library/Application Support/RVGL (see the next section on locating the data path), but take care that you do not overwrite any of the existing files in the folder (i.e., say NO to replace).

Data path on macOS

To see bundled resources, right-click the app and select Show Package Contents. This takes you to a path similar to:


Content is not loaded directly from the bundle path. Instead, files are copied to your data path on first run, and after each update. This ensures that content is not lost when the app is updated or replaced.

Game content, save games and configuration files are stored at one place in a user-specific folder. Look for:

/Users/<user-name>/Library/Application Support/RVGL

You can place your custom content and content packs in here.

OpenGL Support

The OpenGL version available on macOS depends on the profile used by the game:

  • When a Compatibility profile is used, the available OpenGL version is 2.1.
  • When a Core profile is used, the available OpenGL version is 4.1.

When RVGL is installed and run for the first time, it automatically detects the best available OpenGL version and sets the profile accordingly.

To learn more about OpenGL profiles and how they can be configured, see the OpenGL Profiles section.

As of version 21.0905a high DPI rendering is supported and enabled by default. On supported devices, this causes the render resolution to be scaled 2x the screen resolution. This can be performance intensive, but reducing the Antialias level should help in most cases. You can also disable this by setting HighDPI = 0 in rvgl.ini.

Launch Parameters

To start the game with command line arguments, you have one of these options:

  • Use the terminal: cd to RVGL.app and run ./Contents/MacOS/RVGL -params
  • Create a shell script that does the above.
  • Set up an alias for RVGL.


RVGL requires at least Android 3.1 with an OpenGL ES 2.0 capable GPU. It's compatible with the ARMv7 32-bit processor, ARMv8 64-bit processor, x86 and x86_64 architectures.

The APK available from the RVGL project page requires original game data. This is not provided in the APK itself. However, a full game build is also available from Re-Volt I/O.

Data path on Android

The following locations are checked in order to find the game files:


Running the app will automatically create the RVGL folder at the first available location. If you got the minimal APK from the RVGL project page, extract game files into this folder, but take care that you do not overwrite any of the existing files in the folder (i.e., say NO to replace).

Generated files

  • A file named rvgl_version.txt is created on first run. Deleting it will force the game to re-extract the latest assets from the apk.
  • The log file is generated at profiles/re-volt_log.txt.
  • Running the RVGL Controller Map app (see below) saves controller mappings to profiles/gamecontrollerdb.txt.
  • Advanced settings can be configured from profiles/rvgl.ini. To display the frame rate, set ShowFPS to 1. To set the device orientation, set Orientation to a value between 0-5.

Improving performance

The Shader Edition might benefit from level world (*.w) files optimized with WorldCut to have larger sized meshes. As of version 18.1126a, optimized level files are included in the app package.

Gameplay tips

  • Flip Car: When the car is upside down, tap anywhere at the centre of the screen (eg., on the car itself) to flip the car.
  • UI navigation: Tap anywhere outside the menu box to go back to the previous screen, or use the Back button on the device.

Native Multisampling

Native multisampling is very fast on embedded GPUs and enjoys wider support:

  • 2x or 4x native multisampling can be enabled on embedded GPUs with virtually no performance loss.
  • It's supported on low end hardware like the Adreno 203.
  • It can be used with either the shader-based GLES2+ renderer or the legacy GLES1 renderer.

However, native multisampling cannot be configured in-game from Render Settings. It must be set directly in rvgl.ini through the Antialias key. It's usually safe to set it to 2 or 4. The behavior is undefined when an unsupported value is used. The currently used Antialias level can still be checked from Render Settings.

The alternative is to use Frame Buffer Objects for multisampling, which can be quite slow on embedded GPUs. Because of the performance benefits, FBO is disabled by default on Android.

Controller Map

Available as a separate optional download, the RVGL Controller Map app allows you to generate mappings for your controllers interactively. Once configured, the mappings are automatically saved to profiles/gamecontrollerdb.txt and is used by the game upon next start.

Launch Parameters

As of version 20.0210a, it is possible to launch the app from the adb shell with optional command line arguments. These are set through a string extra called args.

am start -n com.rvgl.rvgl/.RVGLActivity -e args "-nointro -lobby"


Dev Mode

Below, you can find technical information that is intended for modders, track creators and car creators.

Working with tracks and cars is more convenient in Dev mode. This is a special mode that enables several advanced features for content creation. To access this mode, run RVGL with the -dev command line.

Enabling Dev mode flags your cars as CHT. Avoid using it for normal gameplay.


These options are available only in Dev mode.

Calculate Car Stats: This game mode, accessible from the Start Race menu, allows you to calculate stats of your car for frontend display. The top speed, acceleration, weight and transmission are calculated. Page Up / Page Down allow you to change the car and restart the test run.

Save Current Car Info: Use this in-game menu option to re-save the current car's parameters.txt info. The saved file is up to date with all supported entries. Original cars are re-signed to ensure that they are not treated as CHT.

Edit Mode: Select the edit mode for the in-game editor from the Start Race menu. As of version 20.0210a, it is also possible to change the edit mode on the fly from the in-game menu.


These commands work in Dev mode, some commands may also work by manually entering MAKEITGOOD edit mode or other appropriate cheat codes.

Generate AI Lines from Ghost Path: You must be in AI Nodes edit mode in combination with Time Trial mode. You must also have completed a best lap so you have a valid ghost car. Assuming you're using the Modern Editor, press G to generate a path from the ghost car. Then press Shift + G to update the racing lines, and Ctrl + Shift + G to update the overtaking lines.

Generate Curves for AI Lines: You must be in AI Nodes edit mode. This functionality helps you generate smooth curves at turns and chicanes. You select 3 consecutive nodes, one before the turn, one at the turn itself and one after the turn. Assuming you're using the Modern Editor, hold down the N key and select the 3 nodes. These are control points from which the curve is generated. Adjust the curve by moving the middle node's racing / overtaking lines. When you're satisfied, press Shift + N to update the racing lines, and Ctrl + Shift + N to update the overtaking lines.

Preview Objects: In Objects edit mode, press Ctrl + P to preview object animations instantly, then use the same command to get back to editing. The same shortcut is used to preview / refresh visiboxes.

Cheat Codes: Certain cheats such as TVTIME (F5, F6 cameras) or CHANGELING (Page Up / Page Down to change car) are enabled in Dev mode. It is also possible to disable previously enabled cheat codes by adding an '!' at the end.

Show Camera Position: Press Right Shift + F9 to show position and direction of the camera. This can help set the required StartPos and StartRot values in the level *.inf file, by placing the camera at the start line and noting the camera values.

Camera Commands: Use Caps Lock to toggle the camera movement speed and the zoom speed when using scroll wheel. Use Z for zooming in and X for zooming out. To tilt the camera, use Alt + Mouse X (horizontal mouse movement). Use C to reset the camera zoom and tilt.

Keep game running in background: Press Shift + F9 to keep the game running when it's not focused. This is similar to the -nopause command line.

Hide HUD and Menus: Shift + F5 hides the HUD. Shift + Ctrl + F5 hides the in-game menu. This can help with taking screenshots of your car or track.

Full Track Reload: Restarting the level does a full reload in Dev mode.

Instant Car Refresh: Press Ctrl + R to refresh the current car. This allows you to quickly make changes to the car parameters and data and view those changes in-game. This works both at the Frontend selection screen and in-game.

Camera Edit Mode: Press Ctrl + C to interactively edit the Hood / Rear view camera parameters. Use Numpad keys to move the camera and hold down Ctrl for more precise movement. Right Ctrl + F11 and Right Shift + F11 cycle through the available Follow and Attached cameras, respectively.

Network Ping: In Multi-Player sessions, ping and traffic information can be checked by pressing Ctrl + P to enable the debug display. This works in Dev mode or with -showping command line.

Modern Editor

As of version 19.0907a, there is support for a modern editor scheme and alternate camera controls. These options can be enabled from the [Editor] section in rvgl.ini.

  • LegacyCameraControls: Set this to 0 to use modern camera navigation controls. The changes include a more standard WSAD set (where W = forward, S = back, Q = up, E = down), and Y-axis movement that follows the mouse motion instead of being inverted.
  • LegacyEditorControls: Set this to 0 to enable the modern editor workflow. The supported edit modes are documented below.

Common Tools

The modern editor contains new tools that perform Translation, Rotation and Scaling in a much more intuitive way. These manipulations can be axis-constrained (one, two or all axes) and set to occur in World or Object space.

  • 1 = Translate
  • 2 = Rotate
  • 3 = Scale
  • I = Isolate
  • Alt = Space (World or Object)
  • Ctrl + S = Save file

Pos Nodes

  • Ctrl + Left Mouse = Add new node
  • Left Mouse on node = Select node
  • Left Mouse Drag on node = Move node
  • Select node + Shift + Right Mouse on another = Connect nodes (order matters)
  • Select node + Shift + Right Mouse on connected node = Disconnect nodes
  • Select node + Shift + Ctrl + Left Mouse = Add new node (chain linking)
  • Ctrl + Left Mouse over connection line = Inserts a node inbetween
  • Delete = Remove node (Selected first, then if any under cursor)

Hold Alt = Changes to "Alt" mode.

  • Select node + Shift + Right Mouse = chain linking

AI Nodes

Shares similar controls with the Pos Nodes editor.

  • Ctrl + Left Mouse = Add new segment
  • Left Mouse on segment = Select segment
  • Left Mouse Drag on segment = Move segment
  • Select segment + Shift + Right Mouse on another = Connect segments (order matters)
  • Select segment + Shift + Right Mouse on connected segment = Disconnect segments
  • Select segment + Shift + Ctrl + Left Mouse = Add new segment (chain linking)
  • Ctrl + Left Mouse over connection line = Inserts a segment inbetween
  • Delete = Remove segment (Selected first, then if any under cursor)
  • Drag white line on selected segment = modifies racing line
  • G = Generate ghost path (in Time Trial mode)
  • Shift + G = Update racing line from ghost path
  • Ctrl + Shift + G = Update overtaking line from ghost path
  • N + Left Mouse = Select nodes for curve generation
  • Shift + N = Update racing line from generated curve
  • Ctrl + Shift + N = Update overtaking line from generated curve

Hold Alt = Changes to "Alt" mode.

  • Select node + Shift + Right Mouse = chain linking
  • Allows modifying the overtaking line (Drag pink line on selected segment)
  • Clicking on nodes of the segment toggles a wall depending on the side

Camera Nodes

Shares similar controls with the Pos Nodes editor.

  • Insert = Add new node
  • Left Mouse on node = Select node
  • Left Mouse Drag on node = Move node
  • Select node + Shift + Right Mouse on another = Connect nodes (order matters)
  • Select node + Shift + Right Mouse on connected node = Disconnect nodes
  • Delete = Remove node (Selected first, then if any under cursor)

Track Zones

  • Insert = Add new zone
  • Left Mouse on zone = Select zone
  • Left Mouse Drag on zone = Move zone (in Translate mode)
  • Left Mouse Drag on zone side = Scale side (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping zones
  • Delete = Remove selected zone
  • N = Toggle AI nodes

Force Fields

  • Insert = Add new field
  • Left Mouse on field = Select field
  • Left Mouse Drag on field = Move field (in Translate mode)
  • Left Mouse Drag on field side (box) = Scale side (in Scale mode)
  • Left Mouse Drag on field (sphere) = Scale inner radius (in Scale mode)
  • Shift + Left Mouse Drag on field (sphere) = Scale outer radius (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping fields
  • Delete = Remove selected field
  • Shift + D = Duplicate field
  • Enter = Reset data entry (when applicable)
  • Numpad Enter = Toggle data entry (when applicable)
  • Numpad Period = Mod type (Zone or Direction)
  • Numpad 0 = Reset orientation
  • Alt + Numpad 0 = Reset direction (in Direction mode)
  • G = Set gravity field (magnitude)
  • Ctrl + G = Set gravity field (direction)
  • Alt + G = Set anti-gravity field


  • Insert = Add new trigger
  • Left Mouse on trigger = Select trigger
  • Left Mouse Drag on trigger = Move trigger (in Translate mode)
  • Left Mouse Drag on trigger side = Scale side (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping triggers
  • Delete = Remove selected trigger


  • Insert = Add new visibox
  • Left Mouse on visibox = Select visibox
  • Left Mouse Drag on visibox = Move visibox (in Translate mode)
  • Left Mouse Drag on visibox side = Scale side (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping visiboxes
  • Delete = Remove selected visibox


  • Insert = Add new instance
  • Left Mouse on instance = Select instance
  • Left Mouse Drag on instance = Move instance (in Translate mode)
  • Shift + Left Mouse = Cycle through overlapping instances
  • Delete = Remove selected instance
  • Shift + D = Duplicate instance


  • Insert = Add new object
  • Left Mouse on object = Select object
  • Left Mouse Drag on object = Move object (in Translate mode)
  • Shift + Left Mouse = Cycle through overlapping objects
  • Delete = Remove selected object
  • Shift + D = Duplicate object


  • Insert = Add new light
  • Left Mouse on light = Select light
  • Left Mouse Drag on light = Move light (in Translate mode)
  • Left Mouse Drag on shadow box side = Scale side (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping lights and shadow boxes
  • Space = Change light type
  • Delete = Remove selected light
  • Shift + D = Duplicate light


  • Insert = Add new portal
  • Left Mouse on portal = Select portal
  • Left Mouse Drag on portal = Move portal (in Translate mode)
  • Left Mouse Drag on portal side = Scale side (in Scale mode)
  • Shift + Left Mouse = Cycle through overlapping portals
  • Delete = Remove selected portal


Applies to both cars and tracks.

Texture Size

Supports standard texture sizes that work with any graphics card. Your texture has to be square (i.e., same width and height) with power-of-two dimensions (like 256x256, 512x512, etc.). The maximum supported texture size depends on your graphics card.

The legacy Re-Volt versions only support 256x256 textures. To learn how to make your content backward compatible, see the Mipmaps section below.


Mipmaps are low resolution copies of the main texture. Mipmaps improve both the performance and visuals of your content, especially when used with hi-res textures.

Up to 10 mipmap levels can be used, each level must be half the size of the previous level and named with a different ".bmp" extension - the last character keeps increasing. (eg., a 256x256 "texture.bmp" will have a 128x128 "texture.bmq" file as the first mipmap level and a 64x64 "texture.bmr" as the second mipmap level).

We also support the use of mipmaps that go upward (i.e., with the above mentioned example, you may include a hi-res 512x512 version called "texture.bmo"). By including your hi-res texture this way, you will be able to keep the actual "texture.bmp" file at 256x256 and enable your content to be played in legacy Re-Volt versions.

For a quick reference, here is a list of supported sizes and their corresponding file names, as per the above example:

      8192 x 8192   -   texture.bmk
      4096 x 4096   -   texture.bml
      2048 x 2048   -   texture.bmm
      1024 x 1024   -   texture.bmn
       512 x 512    -   texture.bmo
     [ 256 x 256    -   texture.bmp ]
       128 x 128    -   texture.bmq
        64 x 64     -   texture.bmr
        32 x 32     -   texture.bms
        16 x 16     -   texture.bmt
         8 x 8      -   texture.bmu
         4 x 4      -   texture.bmv
         2 x 2      -   texture.bmw
         1 x 1      -   texture.bmx

Intermediate mipmap levels cannot be skipped. For example, you cannot include a texture.bmp" (256x256) and a "texture.bmn" (1024x1024) without a "texture.bmo" (512x512) inbetween.

Texture Sets

Mipmaps also find use as "texture sets". The game will pick textures of the appropriate size to load, depending on the available system resources. Therefore, it is always recommended to include appropriate mipmap levels for your content.

Use the -texinfo command line to display the texture sets info that was detected for your system.

Alpha Transparency

Textures with an alpha channel for transparency data is supported. The supported formats are 32-bit BMP (ARGB8888) and PNG.

Alpha channel transparency can be used to create rich and varied effects, eg., transparency gradients and well anti-aliased shapes. Colorkeying is disabled when using transparent textures, which means pure-black color (RGB 0,0,0) can be used on opaque surfaces.

Care should be taken to save your alpha-enabled texture in the ARGB format. Some other 32-bit BMP formats, such as XRGB, do not save the alpha channel in the extra space. This will result in a fully transparent texture in-game.

Additional Texture Formats

RVGL supports several additional texture formats. For historical reasons, the textures should still be named with the .bmp extension (and mipmaps with .bmq, .bmo, etc. as usual).

Available formats: BMP, PNG, JPG, WEBP, TIF, GIF, SVG, CUR, ICO, LBM, PCX, PNM, XPM, XV, XCF.

Support for XCF (GIMP's native format) is experimental. This allows you to visualize a GIMP project file in RVGL without exporting it. However, this is not guaranteed to work correctly in all cases.

Support for SVG was added in version 18.1020a.

For Car Makers

Customize user cars through new entries in the car's "parameters.txt" file.

For compatibility with the original versions of the game, the "parameters.txt" specification supports a comment closer. This is a closing paranthesis following the semi-colon, or ;). Prepending this at each line causes the line to be skipped by the original versions while it is still read by RVGL. A line can be included twice, first without the comment closer and then with. Eg.,

Rating      4  ; Pro in original version
;)Rating    5  ; Super Pro in RVGL

Carbox Art

To add a box-art image to your car, use the TCARBOX parameter. This entry works the same way as the TPAGE parameter. General syntax:

TCARBOX    <path to carbox texture>

​ It is recommended that the carbox texture use a pure white (RGB 255,255,255) background.

Custom Car Sound

The keyword SFXENGINE adds a custom engine sound for your car. The way the engine sound is used by the game depends on the car class (Electric or Glow). The keyword SFXHONK adds a custom horn sound. The keyword SFXSERVO adds a custom servo sound (i.e., wheel turning effect).

General syntax:

SFXENGINE    <path to wav file>
SFXHONK      <path to wav file>
SFXSERVO     <path to wav file>

Custom Shadow

Each car can have its own shadow map, or it can use one of the preset stock shadows (useful for default car repaints).

The shadow map is generally a 64x64 texture containing a white silhouette of the car on a black background. They can be generated from the top view of the car (preferably from a 3D modeller) and then post-processed in an image editor.

RVGL requires 5 coordinates to position the shadow under the car. These are the Left, Right, Front and Back edges and Height relative to the model center. These values are independent of the car CoM and do not need to be updated upon changing the CoM.

Parameters to be added:

  • TSHADOW to specify the shadow texture, similar to TPAGE and TCARBOX parameters. This parameter can be ignored if the car is not using a custom shadow texture.
  • SHADOWINDEX to use one of the default car shadows found in "cars\misc\shadow.bmp". Set this parameter to -1 to use the generic rectangle shadow. This parameter can be ignored if TSHADOW is used.
  • SHADOWTABLE followed by 5 offset values for the Left / Right / Front / Back / Height of shadow relative to model center. Remove this line or set all offsets to zero if you'd like the shadow to be automatically placed under the car's body (in this case, the shadow will not cover wheels extending out of the body).

General syntax:

TSHADOW        <path to shadow texture (or) NONE>
SHADOWINDEX    -1  ; 0 to 27, (or) -1
SHADOWTABLE    -10.2 10.2 30.4 -30.4 -4.2

Stats Display

User-made cars can show the Speed / Acceleration / Weight bars in the car selection screen.

To use this feature, calculate and fill in the TopEnd and Acc parameter values using the Calc Car Stats option in Dev mode. Weight takes the same value as the car mass. RVGL also requires the Trans parameter to be properly filled in.

Then, add the following line in the Frontend section of the parameters file.

Statistics     TRUE

TopEnd gives the maximum top-speed that can actually be reached by the car. Acc gives time, in seconds, the car takes to reach the top speed.

Hood & Rear Camera

Configure the Hood and Rearview cameras for your car by adding the CAMATTACHED section in your parameters file. Below is a sample:

; Camera details

CAMATTACHED {  ; Start Camera
HoodOffset     -0.12 -71.81 -60.01  ; Offset from model center
HoodLook       0.02  ; Look angle (-0.25 to 0.25, 0.0 - straight)
RearOffset     -0.12 -71.81 27.24
RearLook       0.03
FixedOffset    true               ; Is offset fixed or moving
FixedLook      true               ; Is look fixed or moving
}              ; End Camera

Camber Angle

Configure the camber angle for each wheel of your car using the Camber entry. This sets the rotation angle (in degrees) of the wheel along the Z axis. General syntax (in each WHEEL section):

Camber    -10

The camber sign is automatically adjusted for left / right wheels. A negative Camber value makes the bottom of the wheel farther out than the top.

Special Effects

Enable Rotor, UFO or Mystery effect for your user car by adding new parameters in the "Handling related stuff" in the parameters file. General syntax:

Flippable      FALSE  ; Rotor car effect
Flying         FALSE  ; Flying like the UFO car
ClothFx        FALSE  ; Mystery car cloth effect

Flying CPU cars will be able to steer in the air.

Mystery car effect will also need modification to the car mesh to flag the polygons that form the edges of the cloth.

To use Panga effect (i.e., head turning and ducking according to speed), modify the SPINNER section. Further, you can use rotation only, ducking (translation) only, or both. General syntax (in the SPINNER section):

Type           0  ; 1: Default rot, 2: Turn with steer,
                  ; 4: Translate with speed, 6: both 2 and 4
Trans          0.000000 3.000000 6.000000  ; Translation max
TransVel       0.001000  ; Velocity factor

Unlike in legacy versions (eg., default Panga car) where AngVel was zero to make the spinner turn with steer, now AngVel specifies the speed of turning, so it should be non-zero. An AngVel value of zero denotes that the spinner doesn't turn at all.

CPU Selectability

Disable a user car for CPU selection by adding the CPUSelectable parameter in the "frontend and selectability" section in the parameters file. General syntax:

CPUSelectable  FALSE

Car Classes

As of version 20.0210a, there are new Rating and Obtain values. Set Rating to 5 to add a Super Pro car. These are a class of cars faster than Pros. Set Obtain to 5 to unlock the car upon completing Stunt Arena. General syntax:

Rating         5  ; Skill level (0-5)
Obtain         5  ; Obtain method (0-5 or -1)

Weapon Offsets

As of version 21.0905a, there are new parameters to define weapon generation offsets for different classes of weapons. These go in the "Handling related stuff" section in parameters.txt. The Weapon parameter is deprecated although it is still accepted for backward compatibility. General syntax:

WeaponOffset1  0.000 -32.000 64.000  ; Offset for shockwaves and fireworks
WeaponOffset2  0.000 -16.000 80.000  ; Offset for water bombs

Car Skins

Additional skins can be added for each car, selectable at the Car Preview screen. Skins are detected based on a suffix system, i.e., if the TPAGE points to 'car.bmp', then 'caror.bmp', 'car1.bmp' and 'car-bleh.bmp' are valid skins. Files that start with the TCARBOX filename are skipped. The length of the skin suffix is currently limited to 11 characters.

As of version 18.1110a, skins are randomized for CPU cars and in Random Cars mode.


Customize user-made tracks through new entries in the level *.inf file and the extensive custom folder support.

End Position

There is a new ENDPOS key for use with Sprint tracks. This is only applicable when GAMETYPE is 4. Upon changing either the STARTPOS or ENDPOS, the AI Nodes and Pos Nodes must be re-saved.

ENDPOS          -17784 -8846 -90895  ; End position coordinates
ENDPOSREV       -17784 -8846 -90895

ENDPOSREV is a deprecated keyword. The new way to specify values for reversed mode is by placing a dedicated reversed *.inf. See Reversed Mode Customization.

Added in version 19.0907a.

Starting Grids

New 3-car wide STARTGRID with type numbers 4 and 5 have been added for use in custom tracks.

STARTGRID       4  ; Grid type (0 - 5, type 2 reserved for frontend)

STARTGRIDREV is a deprecated keyword. The new way to specify values for reversed mode is by placing a dedicated reversed *.inf. See Reversed Mode Customization.

The behavior when repositioning directly to the start grid (eg., in Time Trial mode) can be customized. Use the STARTGRIDRESET key and set it to either 0 or 1.

  1. Car is reset to the node above the start grid. This is useful when the start grid is actually a platform that moves up.
  2. Car is actually reset to the start grid (the default).
STARTGRIDRESET  1  ; Grid reset behavior (0: node reset, 1: grid reset)


A custom track's difficulty can be set by adding the following line to the track's *.inf file:

DIFFICULTY      1  ; Display difficulty (0:Unknown, 1:Easy, 2:Normal, 3:Hard, 4:Extreme)

Added in version 17.1009a.


A custom track can have unlockability conditions that work similar to stock content. Set this using the OBTAIN keyword. Just as a car's Obtain value is linked to its Rating, a track's OBTAIN value is linked to its DIFFICULTY.

OBTAIN          0  ; Obtain level (-1:Never, 0:Default, 1...5)

The default OBTAIN behavior for custom tracks is to unlock the track and all its variants immediately. For stock tracks, the standard unlockability rules apply. Rest of the options are documented below.

  1. Unlock by winning Championship in the appropriate tier.
  2. Unlock by finding Practice mode stars in the appropriate tier.
  3. Unlock by beating Time Trial challenges in the appropriate tier.
  4. Unlock by winning Single Races in the appropriate tier.
  5. Unlock by collecting all stars in Stunt Arena.

For OBTAIN level 1 and above, unlocking a track does not automatically unlock its variants. These are unlocked by beating the track's challenge times, specified with the CHALLENGE keyword. If no challenge time is found, the variants are unlocked immediately.

  • Reversed mode is unlocked by beating the Normal challenge time.
  • Mirrored mode is unlocked by beating the Reversed challenge time.
  • Reversed Mirrored mode is unlocked by beating the Mirrored challenge time.

Added in version 20.0430a.

Challenge Times

User-made tracks can now set challenge times to be beaten in Time Trial with new level *.inf keywords CHALLENGE and CHALLENGEREV. General syntax:

CHALLENGE       0 54 0  ; Time in <min sec ms>

CHALLENGEREV is a deprecated keyword. The new way to specify values for reversed mode is by placing a dedicated reversed *.inf. See Reversed Mode Customization.

Added in version 18.0330a.

Sweep Camera

The starting grid zoom camera can be enabled for a custom track by setting the following line to the track's *.inf file:

SWEEPCAM        1  ; Sweep camera (0:Disabled, 1:Enabled)

Added in version 20.0210a.

Texture Properties

Set various per-texture properties for the level using the TEXTUREPROPS keyword, followed by four values specifying the texture index (0-63), mipmapping (0:disable / 1:enable), wrap mode (0:clamp / 1:repeat / 2:mirrored-repeat) and colorkeying (0:disable / 1:auto). General syntax:

TEXTUREPROPS    3 1 0 1  ; Index - mipmaps - wrap mode - colorkey

For example, use 'TEXTUREPROPS 1 1 1 0' to make texture page B use mipmapping, support mapping outside the boundaries and disable colorkeying (no pure-black transparency).

The colorkey attribute is used to hint that the texture doesn't require alpha testing. It doesn't guarantee that alpha testing is actually disabled.

Added in version 18.0428a.

Rock Type

There is a new level *inf keyword ROCKTYPE, which can be 0 or 1. The default 0 can be used for ship levels, 1 can be used for water surfaces (Boat tracks).

ROCKTYPE    0  ; Rocking type (0:Ship, 1:Water)

Deprecated. New tracks should set rockiness properties in the properties.txt GRAVITY section instead. See the Gravity section.

Added in version 16.0420a.

Custom Music

To play custom music in your level instead of the default soundtrack, use the MUSIC entry in the level .inf file. General syntax:

MUSIC    <Path to music file (or) folder>

As of version 19.0330a, the path accepts either a single file or a folder containing music tracks. If a folder path is provided, the game selects a music track from the folder to be played at random. Supported formats are Ogg (recommended), Flac, MP3, WAV and MIDI (experimental).

This keyword was previously called MP3, which is now deprecated. The MUSIC keyword is recommended for new tracks.

If both MUSIC and REDBOOK lines are present in the inf, MUSIC has higher priority for custom tracks.

Experimental MIDI support was added in version 18.1020a. This requires a SoundFont placed in the soundfonts folder, with the name default.sf2. MIDI playback is only supported on Windows and Linux.

Game Modes

Practice: User tracks can be played in Practice mode. Add a single star object for this mode. When the player finds and catches it, the progress will be saved.

Battle / Stunt / Frontend / Sprint: These special type of tracks can be created with the help of a new GAMETYPE entry in the track .inf file. General syntax:

GAMETYPE    1  ; Track type (0:default, 1:battle, 2:stunt, 3:frontend, 4:sprint)

Add several stars for Battle Tag mode and upto 64 stars for Stunt Arena. The progress is saved for Stunt Arena tracks.

Support for Frontend track type was added in version 19.0120a. See the Frontend Properties section.

Support for Sprint track type was added in version 19.0907a. This requires a valid ENDPOS to be specified.

Reversed Mode: Support for Reversed mode can be added by including a "reversed" folder in your track folder, containing the needed files (see the default levels for example).

The direction of AI Nodes and Pos Nodes can be automatically reversed using special commands in the appropriate edit modes.

File Formats

These options let you select the format to be used when saving files in edit mode, in cases where multiple formats are supported (typically a legacy format for backwards compatibility and newer, modern formats). When not specified, files are saved in the modern format by default.

CAMFORMAT    1  ; Camera nodes format (0:Legacy, 1:Modern)
FLDFORMAT    1  ; Force fields format (0:Legacy, 1:Modern)

Object Thrower

As of version 20.0210a, the Object Thrower trigger supports extended options.

  • Flag low: Thrower object ID.
  • Flag high: The lap to trigger in (0 = any lap, -1 = last lap, n = nth lap).

Level Textures

As of version 19.0120a, RVGL supports up to 64 level textures with an extended naming scheme. File names along with their texture ID are listed in the table below.

Intermediate textures should not be skipped. For example, textures K followed by M is an invalid sequence. The first 10 textures (A-J) are, however, always loaded.

IDFile nameIDFile name

Advanced Customization

Support for advanced custom content in user tracks. This includes:

  • Animated objects
  • Skymap, clouds, other graphics
  • Sound effects
  • Loadscreen image
  • HUD, menu and font

This works by replacing default (stock) data with custom content. When a model, sound, texture, etc. has to be loaded, the file is first searched inside the custom sub-folder located in the current track's folder.

The only thing to do to add custom content in your track is to create a custom folder inside the track's directory and place the custom files inside, with the same name as the stock content you want to replace.

Here is the list of the customizable files:

  • Skyboxes: sky_bk.bmp to sky_tp.bmp
  • All the .wav files (sfx).
  • All Objects added in Edit mode: the .m files and their associated .hul or .ncp files, if any.
  • All track meshes: the .prm files and their associated .ncp files, if any.
  • All track files: .inf, .fob, .fld, .fan, .fin, .cam, .pan, .tri, .taz, .por, .w, vis, .rim, .ncp, .lit and textures.
  • Special textures: trolley.bmp, sun.bmp, dragon.bmp, water.bmp, clouds.bmp.
  • Load screen images: loadlevel1.bmp to loadlevel4.bmp, loadfront1.bmp to loadfront4.bmp.
  • Effect pages: fxpage1.bmp to fxpage3.bmp.
  • Car textures: shadow.bmp, carbox1.bmp to carbox5.bmp.
  • Text and HUD: font.bmp, spru.bmp, spruimage.bmp, acclaim.bmp, loadinga.bmp to loadingc.bmp.
  • Countdown models: gogo.m and go1.m to go3.m.

This is an exhaustive list. The support for some formats was added to be able to release a track compatible with legacy Re-Volt versions. This makes it possible to include eg., a simplified .fob file in the main track folder and a custom .fob file placed in the "custom" folder.

In Reverse mode, the custom version of the files in the reversed folder have to be placed inside the custom\reversed folder to be detected.

Reversed Mode Customization

This feature has been introduced in version 18.0720a and subsequently updated in version 18.0731a.

The ability to customize levels for the reversed variant has vastly improved. All supported level files and a few level graphics can now have reversed variants placed in the reversed or custom\reversed folder.

Below is a list of newly supported files that can have reversed variants:

  • w
  • vis
  • rim
  • ncp
  • lit
  • fob
  • fld
  • por
  • inf
  • properties.txt
  • custom\sky_*.bmp
  • custom\loadlevel*.bmp
  • custom\loadfront*.bmp
  • custom\fxpage*.bmp
  • custom\<level>*.bmp

If one of these files is not present in the reversed or custom\reversed folder, the game will fall back to the forward version of the file. Note that fallback support is only provided for newly added formats. There is no fallback functionality for file formats that were already supported. Specifically, a reversed variant must be provided for these formats:

  • cam
  • fan
  • fin
  • pan
  • taz
  • tri

All supported <level>.inf keywords can be customized for reversed mode by placing a reversed\<level>.inf file. When a reversed\<level>.inf file is found, the STARTPOS, STARTROT, STARTGRID and CHALLENGE keys are taken from that file instead of the REV variants present in the main <level>.inf file.


World Polys: Each world mesh supports up to 65535 polys. Large worlds should be chopped into several meshes or "cubes" to avoid hitting this limit.

Collision Polys: The maximum polys supported by the world *.ncp file is limited to 65535. However, it is possible to add any number of additional instance *.ncp files, i.e., the total number of world + instance collpolys can exceed 65535.

Camera Nodes: RVGL gives you the option to save the *.cam file in either the old format or the new format with support for coordinate ranges beyond (-32768, 32768).

Force Fields: RVGL gives you the option to save the *.fld file in either the old format or the new format with extended set of options.

File Limits: Following are the limiting values for various level files:

  • AI Nodes, Pos Nodes, Cam Nodes (4096)
  • Track Zones, Force Fields, Triggers, Visiboxes, Portals (1024)
  • Lights, Objects, Instance Models (1024)
  • Pickups (192 normal + 64 clones = 256)
  • Level Textures, Visibox IDs (64)

Level Properties

This feature has been introduced in version 17.1124a.

Level properties are similar to parameters.txt for cars. They allow you to customize certain aspects of your tracks:

  • Materials
    • Grip, roughness, hardness
    • Bump profile (corrugation)
    • Sounds
  • Particle effects
    • Particles used by weapons
    • Dust (appears when driving on some materials)
    • Particle trails
  • Gravity
  • Wind
  • Pickups

RVGL looks for a properties.txt file when loading a level. If such a file exists, the original materials and effects will be replaced with the ones in the file.

This can be used to tweak existing materials so they fit your track better or even to create entirely new materials like snow.

Sample Properties File


This file contains all stock properties. You can use this to base your custom properties on.


A material structure provides information about the surface cars drive on. Each material has a unique ID. In total, 64 different materials can be used, of which the first 27 are default materials. You can either override them or use the additional user slots.

Default Materials

2Stone16Conveyor 1
3Wood17Conveyor 2
4Sand18Dirt 1
5Plastic19Dirt 2
6Carpet Tile20Dirt 3
7Carpet Shag21Ice 2
8Boundary22Ice 3
9Glass23Wood 2
10Ice 124Conveyor Market 1
11Metal25Conveyor Market 2
13Bump Metal

To override a material, add the following to your properties.txt file:

  ID               10               ; Material ID [0 - 63]
  Name             "Ice 1 Snow"     ; Display name
  Color            200 200 200      ; Display color

  Spark            true             ; Material emits particles
  Skid             true             ; Skid marks appear on material
  OutOfBounds      false            ; Not implemented
  Corrugated       true             ; Material is bumpy
  Moves            false            ; Moves cars like museum conveyors
  Dusty            true             ; Material emits dust

  Roughness        0.4              ; Roughness of the material
  Grip             0.4              ; Grip of the material
  Hardness         0.2              ; Hardness of the material

  DefaultSound     87               ; Sound when driving normally
  SkidSound        87               ; Sound when skidding [6:Normal, 7:Rough]
  ScrapeSound      5                ; Car body scrape [5:Normal]

  SkidColor        207 215 220      ; Color of the skid marks
  CorrugationType  2                ; Type of bumpiness
  DustType         2                ; Type of dust
  Velocity         0.0 0.0 0.0      ; Speed and direction cars are moved in

In this case, we're overriding the ICE1 material (ID 10).

If you're looking for materials to safely override: DIRT1, DIRT2 and DIRT3 share the same values, there is no difference between them at all. CARPETSHAG and CARPETTILE also have the same values.

Material Properties

PropertyDescriptionRecommended Defaults
IDUnique ID number of the material.It's advised to override materials that aren't used in-game or have the same properties as others (DIRT2, DIRT3, CARPETTILE, PAVEMENT, etc.).
NameDisplay name, not used by the game.-
ColorDisplay color, not used by the game.-
SparkThe material emits particles that are defined by the assigned dust.true or false.
SkidIf true, cars leave skid marks on the ground.true for most materials.
OutOfBoundsNot used in the game (yet).false.
CorrugatedMakes the surface bumpy.true or false.
MovesMaterial moves the cars like the museum conveyors.true or false.
DustyMaterial generates dust when cars drive on it.true or false.
RoughnessRoughness of the material.Between 0.1 and 1.0.
GripGrip of the material.Between 0.1 and 1.0.
HardnessHardness of the material.Between 0.1 and 1.0.
DefaultSoundPersistent sound when cars are driving on the material.-1 (disabled) or any sound ID.
SkidSoundSound when cars skid on the material (when the wheels lose traction or drift).6 (normal) or 7 (rough)
ScrapeSoundSound when cars scrape on the material (when the body touches the ground).5 (normal)
SkidColorColor of the wheel's skid marks.50 50 50
CorrugationTypeID of the corrugation to use for this material. Corrugated needs to be true.
DustTypeID of the dust type to use for this material. Dusty needs to be true.
VelocityVelocity with which the cars are pushed around with if Moves is true.Multiples of 100.0 should be used.

Sound IDs

Use these IDs for the DefaultSound, SkidSound and ScrapeSound properties.

To use IDs other than 6 and 7 for normal and rough skid sounds, stock track sounds can be replaced. For example, rattler.wav from Ghost Town could be replaced with a custom skid sound. To do so, place a file named rattler.wav in your track's custom folder and use ID 89 in your properties.txt file.

IDSound pathIDSound path


Corrugation structures define the bumpiness of the surface. There are 32 slots available, out of which 8 types are already defined by the game. Either override these default slots or use the additional user slots.

Default Corrugation


To override a corrugation, paste the following snipped into your properties.txt:

  ID              1                             ; Corrugation ID [0-31]
  Name            "Name"                        ; Display name

  Amplitude       0.000000                      ; Amplitude of bumps (strength)
  Wavelength      0.000000 0.000000             ; Frequency of bumps

Corrugation Properties

PropertyDescriptionRecommended Defaults
IDID of the corrugation type.0 - 31
NameName of the corrugation. Not used in-game.-
AmplitudeStrength of the corrugation (height of the bumps)0.0 - 5.0
WavelengthFrequency of the bumps0.0 - 100.0


Dust structures are a set of two particles with a probability and variance. Materials emit dust when cars drive on them. There are 32 slots available, with 6 default dust types.

Default Dust


To override a dust type, copy the following snippet into your properties.txt:

  ID              1                             ; Dust ID [0 - 31]
  Name            "GRAVEL"                      ; Display name

  SparkType       4                             ; Particle to emit
  ParticleChance  0.600000                      ; Probability of a particle
  ParticleRandom  0.600000                      ; Probability variance

  SmokeType       29                            ; Smoke particle to emit
  SmokeChance     0.300000                      ; Probability of a smoke part.
  SmokeRandom     0.600000                      ; Probability variance

Dust Properties

PropertyDescriptionRecommended Defaults
IDID of the dust type.0 - 31
NameDisplay name of the dust type, not used in-game.-
SparkTypeID of the particle to emit.0 - 63
ParticleChanceThe probability of a particle to be emitted.0.0 - 1.0
ParticleRandomVariance of the probability.0.0 - 1.0
SmokeTypeID of the smoke particle to emit.0 - 63
SmokeChanceThe probability of smoke to be emitted.0.0 - 1.0
SmokeRandomVariance if the probability.0.0 - 1.0


Particles (also called sparks) can be emitted by materials, weapons, cars and other objects. There are 64 slots available, including 31 default types.

Default Particles


To override a particle, copy the following snippet into your properties.txt:

  ID              0                             ; Particle ID [0 - 63]
  Name            "SPARK"                       ; Display name

  CollideWorld    true                          ; Collision with the world
  CollideObject   true                          ; Collision with objects
  CollideCam      true                          ; Collision with camera
  HasTrail        false                         ; Particle has a trail
  FieldAffect     true                          ; Is affected by force fields
  Spins           false                         ; Particle spins
  Grows           false                         ; Particle grows
  Additive        true                          ; Draw particle additively
  Horizontal      false                         ; Draw particle flat

  Size            1.000000 1.000000             ; Size of the particle
  UV              0.937500 0.000000             ; Top left UV coordinates
  UVSize          0.062500 0.062500             ; Width and height of UV
  TexturePage     47                            ; Texture page
  Color           255 255 255                   ; Color of the particle

  Mass            0.100000                      ; Mass of the particle
  Resistance      0.020000                      ; Air resistance
  Friction        0.100000                      ; Sliding friction
  Restitution     0.500000                      ; Bounciness

  LifeTime        0.500000                      ; Maximum life time
  LifeTimeVar     0.050000                      ; Life time variance

  SpinRate        0.000000                      ; Avg. spin rate (radians/sec)
  SpinRateVar     0.000000                      ; Variation of the spin rate

  SizeVar         0.000000                      ; Size variation
  GrowRate        0.000000                      ; How quickly it grows
  GrowRateVar     0.000000                      ; Grow variation

  TrailType       1                             ; ID of the trail to use

Particle Properties

PropertyDescriptionRecommended Defaults
IDID of the particle.0 - 63
NameDisplay name of the particle, not used in-game.-
CollideWorldThe particle collides with the world (geometry from the .w file).true or false
CollideObjectThe particle collides with objects (cars and other level objects).true or false
CollideCamThe particle collides with the camera (currently not implemented).false
HasTrailThe particle has a trail.true or false
Field AffectThe particle is affected by force fields.true or false
SpinsThe particle rotates.true or false
GrowsThe particle grows bigger.true or false
AdditiveThe particle is rendered additively: Black becomes transparent and bright colors are added to the underlying things.true or false
HorizontalInstead of facing the camera, the particle is flat.true or false
SizeSize of the particle.1.0 1.0
UVTop left UV-coordinate of the mapping. 0.0 0.0 is top left and 1.0 1.0 is bottom right.-
UVSizeWidth and height of the UV mapping (bottom right corner).-
TexturePageTexture the particle will be mapped to.47-49 are fxpage[1-3]; 0-46 are track textures; -1 disables texturing.
ColorRGB Color of the particle.255 255 255
MassMass of the particle.
ResistanceAir resistance of the particle (how slowly it travels through the ari).
FrictionFriction when touching collideable objects.
RestitutionBounciness of the particle.
LifeTimeHow long the particle lives.If this is too high, the creation of other particles might be prevented.
LifeTimeVarVariance of the life time.
SpinRateThe spin rate in radians per second.
SpinRateVarVariation of the spin rate.
SizeVarInitial size variation.
GrowRateHow quickly the particle grows.
GrowRateVarVariation of the grow rate.
TrailTypeID of the trail if enabled.0 - 31


Trails are similar to particles. They follow particles. They're used for fireworks and some sparks. There are 3 default trail types and a total of 32 slots for custom tracks.

Default Trails


To override a spark type, copy the following snippet into your properties.txt:

  ID              1                             ; Trail ID [0 - 31]
  Name            "SPARK"                       ; Display name

  Fades           true                          ; Trail fades out
  Shrinks         true                          ; Trail shrinks
  Expands         false                         ; Trail expands
  UV              0.960938 0.000000             ; UV coord for trail segments
  UVEnd           0.960938 0.000000             ; UV coord for last segment
  UVSize          0.007812 0.062500             ; Width and height of both UV
  TexturePage     47                            ; Texture page
  Color           255 255 255 255               ; Alpha, Red, Green, Blue
  LifeTime        0.030000                      ; Maximum life time
  Width           1.000000                      ; Width of segments
  Length          2                             ; Number of segments

Trail Properties

PropertyDescriptionRecommended Defaults
IDID of the trail.0 - 31
NameDisplay name of the trail, not used in-game.-
FadesThe trail fades out.true or false
ShrinksThe trail segments get smaller.true or false
ExpandsThe trail segments get bigger.true or false
UVTop left UV-coordinate of the mapping of the first trail segments. 0.0 0.0 is top left and 1.0 1.0 is bottom right.-
UVEndTop left UV-coordinate of the mapping of the last trail segment. 0.0 0.0 is top left and 1.0 1.0 is bottom right.
UVSizeWidth and height of the UV mapping (bottom right corner).-
TexturePageTexture the segment will be mapped to.47-49 are fxpage[1-3]; 0-46 are track textures; -1 disables texturing.
ColorAlpha, Red, Green, Blue color of the trail.255 255 255 255
LifeTimeHow long the trail segments live.
WidthWidth of the trail segments.
LengthNumber of trail segments.1 - 16


This section allows you to modify the behavior of the global gravitational field for your track. To customize the level's gravity, copy the following snippet into your properties.txt:

As of version 19.1230a, the ROCK and ROCKTYPE level *.inf keys are deprecated. New tracks should set these properties in the properties.txt GRAVITY section instead.

  Magnitude       2200.0                        ; Magnitude of gravity
  Direction       0.000000 1.000000 0.000000    ; Direction of gravity
  Dampening       0.000000                      ; Dampening effect
  Rockiness       0.000000 0.000000             ; Rocky effect parameters
                  0.000000 0.000000
  RockyType       0                             ; Type of rocky effect [0 - 1]

Gravity Properties

PropertyDescriptionRecommended Defaults
MagnitudeStrength of the gravity field.250.0 - 5000.0
DirectionDirection of action of the gravity field.0.0 1.0 0.0
DampeningDampening effect of gravity.0.0 - 100.0
RockinessParameters for the rocky ship effect: four values for the X and Z magnitude and X and Z time scale.If magnitudes are non-zero, time must be non-zero.
RockyTypeType of rocky effect: 0 for ship, 1 for water surface.0 - 1


This section allows you to modify the behavior of the Wind force field types in your track. To customize the level's wind properties, copy the following snippet into your properties.txt:

  Priority        2                             ; Field priority [0 - 2]
  TimeMin         5                             ; Min update rate
  TimeMax         30                            ; Max update rate
  Expands         true                          ; Size expands

Wind Properties

PropertyDescriptionRecommended Defaults
PriorityWind field priority. 1 affects both objects and cars; 2 affects objects only.0 - 2
TimeMinMinimum time before wind changes direction.5.0
TimeMaxMaximum time before wind changes direction.30.0
ExpandsWhether the field expands to cover the entire world.If true, the field is always Box shaped.


This section allows you to modify the behavior of pickups in the level, including spawn count. To customize pickups, copy the following snippet into your properties.txt:

  SpawnCount      5 2                           ; Initial and per-player count
  EnvColor        255 255 128                   ; Color of shininess (RGB)
  LightColor      128 96 0                      ; Color of light (RGB)

Pickup Properties

PropertyDescriptionRecommended Defaults
SpawnCountNumber of pickups to spawn: two values for the initial count and per-player count.5 2
EnvColorColor of shininess effect on the pickup.255 255 128
LightColorColor of the light under the pickup.128 96 0

Frontend Properties

This feature has been introduced in version 19.0120a.

Frontend properties are similar to properties.txt. They allow you to customize certain aspects of your custom frontend, i.e., Camera Positions.

RVGL looks for a frontend.txt file when loading a frontend. If such a file exists, the original frontend properties will be replaced with the ones in the file.

Sample Frontend File


This file contains all stock frontend properties. You can use this to base your custom properties on.

Camera Positions

Provides information about the camera position and direction at each menu screen. In total, 25 camera views are available.

Default Camera Positions


To override a camera, add the following to your frontend.txt file:

  ID     0                                      ; Camera ID
  Name   "INIT"                                 ; Display name

  Eye    76.500000 -79.300000 -4462.600000      ; Camera position
  Focus  109.500000 -155.300000 -3466.100000    ; Camera focus

In this case, we're overriding the INIT camera (ID 0).

Frontend Camera Properties

IDUnique ID number of the camera position.
NameDisplay name, not used by the game.
EyePosition of the camera.
FocusLook direction of the camera.

Object Animations

This feature has been introduced in version 19.1230a.

Custom object animations allow track makers to script their own animated objects. Animations are defined in a text file named custom_animations.txt placed in the level folder.

  • Custom animations are added through a new object type in Objects edit mode.
  • Each object can consist of multiple models (*.m with optional *.ncp collision) that act as bones. Each bone is animated either freely or relative to a parent.
  • Animation data and keyframes are defined in custom_animations.txt.
  • Use the Custom Animation trigger type to trigger the animation at a specific lap, the first or last lap. Animations can be triggered once or multiple times.
  • You can show or hide body parts per keyframe by setting a visibility flag. This also affects the collision.
  • Each bone can also have a light, sound effect (*.wav) and spark generator attached to it. These attachments can be created, updated or deleted at any keyframe.

Each custom animation object added in Objects edit mode accepts the following flags:

  • Animation ID (the animation slot defined in custom_animations.txt).
  • Trigger ID (optional, if the object uses a trigger).
  • Start time (delay in steps of 0.1 seconds).
  • Whether to show or hide in time trial.

Triggers let you decide when to start the animation. The Custom Animation trigger type supports the following options:

  • Flag low: Object ID (same as Trigger ID above).
  • Flag high: The lap to trigger in (0 = any lap, -1 = last lap, n = nth lap).

Sample Custom Animations File


This file contains a couple of sample animations along with documentation of all used properties and limitations. You can use this to base your custom animations on.

To see the sample animations in action, download the complete sample track below. cstm_anim_ex.zip


Up to 64 custom models can be defined. These models need to be shared by all animations. Each model has an ID and model name.

MODEL   0   "tw_plane"

In this case, the game looks for the files models\tw_plane.m and models\tw_plane.ncp. However, it is possible to override this behavior by placing the files inside the level's custom folder instead (custom\tw_plane.wav).

Sound Effects

Up to 64 sound effects can be defined. These sounds need to be shared by all animations. Each sound effect has an ID and file name.

SFX     0   "gator"

In this case, the game looks for the file wavs\gator.wav. However, it is possible to override this behavior by placing the files inside the level's custom folder instead (custom\gator.wav).


Up to 256 animations can be defined. To define an animation, add and extend the following block to your custom_animations.txt file:

  Slot                      0                         ; Slot ID (0 to 255)
  Name                      "DEFAULT"                 ; Display name (currently unused)
  Mode                      0                         ; 0: loop / 1: animate a single time, stopping after the last frame / 2: back and forth (reverse after last keyframe)
  NeedsTrigger              false                     ; Whether the animation needs to be triggered
  TriggerOnce               false                     ; Whether the animation can be triggered multiple times
  PreCountdown              false                     ; Whether the animation must start before countdown (in multiplayer)

  BONE {
    BoneID                  0                         ; Body part ID (0 to 15); part 0 is the main body part
    ModelID                 -1                        ; Model ID (0 to 63, or -1)
    Parent                  0                         ; Body part parent ID; must be smaller than the bone ID; not present at the main body part
    OffsetTranslation       0.000 0.000 0.000         ; Offset to parent location
    OffsetRotationAxis      0.000 -1.000 0.000        ; Offset rotation axis
    OffsetRotationAmount    0.000                     ; Offset rotation (in degrees)
  ; Add more bones here.

    FrameNr                 0                         ; Number of the keyframe (0 to 255)
    Time                    1.000                     ; Time (in seconds) since previous keyframe
    Type                    0                         ; Interpolation type. 0 - linear, 1 - smooth start, 2 - smooth end, 3 - both smooth, 4 - overshoot

    BONE {
      BoneID                0                         ; Body part ID
      Visible               true                      ; Toggle body part visibility (for all future keyframes until it is changed again)
      Translation           0.000 0.000 0.000         ; Translation
      RotationAxis          0.000 -1.000 0.000        ; Rotation axis
      RotationAmount        0.000                     ; Rotation (in degrees)

      ; Add properties for light, sound effect and sparks here (optional).
      ; Values are inherited by future keyframes, so only the properties to
      ; be changed need to be specified again.
      SFX {
        SfxID               -1                        ; Sound ID (0 to 63, or -1)
        Range               0                         ; Range multiplier (0 to 100)
        Looping             false                     ; Whether the sound is continuous or one-shot
      SPARK {
        Type                -1                        ; Particle type, defined in properties.txt (0 to 63, or -1)
        AverageSpeed        0                         ; Average speed of particle (0 to 200)
        VariableSpeed       0                         ; Speed variation of particle (0 to 200)
        Frequency           0                         ; Particle generation frequency (1 to 200, or 0 for one-shot)
      LIGHT {
        Type                -1                        ; Light type (0 - omni, 1 - omni normal, 2 - spot, 3 - spot normal, or -1 to disable)
        Color               0 0 0                     ; Light color (RGB values, -1024 to 1024 for each component)
        Reach               0                         ; Light reach distance
        ConeSize            0                         ; Cone size for spot lights (1 to 180)
        FlickerSpeed        0                         ; Flicker speed (1 to 255, 0 to disable)
    ; Update more bones here.

  ; Add more keyframes here.

Up to 16 bones (a main body part and up to 15 child bones) and 256 keyframes can be defined for each animation. The game then interpolates the animation between those keyframes. The type of interpolation can be one of the following:

  1. Linear: Constant velocity and angular velocity.
  2. Smooth start, sudden end: Like an object starting to fall, then hitting the ground.
  3. Sudden start, smooth end.
  4. Smooth start and smooth end.
  5. Exaggerating or overshooting: First moving a bit in the opposite direction, then over the target amount, then again backwards. Gives a robotic look.

Animation Properties

SlotUnique ID number of the animation.
NameDisplay name, not used by the game.
Mode0: loop / 1: animate a single time, stopping after the last frame / 2: back and forth (reverse after last keyframe).
NeedsTriggerWhether the animation needs to be triggered.
TriggerOnceWhether the animation can be triggered multiple times. Only applicable when Mode is 1.
PreCountdownWhether the animation must start before countdown (in multiplayer).
BONEOne or more of these blocks to define each body part.
KEYFRAMEOne or more of these blocks to define each keyframe.

Bone Properties

BoneIDBody part ID; part 0 is the main body part.
ModelIDModel ID for this body part; can be -1.
ParentBody part parent ID; must be smaller than the bone ID; not present at the main body part.
OffsetTranslationOffset to parent location.
OffsetRotationAxisOffset rotation axis; must be a valid non-zero axis.
OffsetRotationAmountOffset rotation (in degrees).

Keyframe Properties

FrameNrNumber of the keyframe.
TimeTime (in seconds) since previous keyframe; animation must have at least one keyframe with non-zero time.
TypeInterpolation type. 0 - linear, 1 - smooth start, 2 - smooth end, 3 - both smooth, 4 - overshoot.
BONEOne or more of these blocks for each body part that should be moved this keyframe.

Keyframe Bone Properties

BoneIDBody part ID.
VisibleToggle body part visibility for this keyframe and all future keyframes until this is changed again.
RotationAxisRotation axis; must be a valid non-zero axis.
RotationAmountRotation (in degrees).
SFXSound effect properties for this keyframe.
SPARKSpark generation properties for this keyframe.
LIGHTLight properties for this keyframe.

Keyframe Sound Properties

SfxIDSound effect ID for this body part; can be -1.
RangeRange multiplier (0 to 100). This value is interpolated between frames.
LoopingWhether the sound is looping continuously or plays once.

Keyframe Spark Properties

TypeParticle type as it is defined in properties.txt. -1 disables spark generation.
AverageSpeedAverage speed of particle (0 to 200). This value is interpolated between frames.
VariableSpeedRandomized speed variation of particle (0 to 200).
FrequencyParticle generation frequency (1 to 200). 0 generates a single spark instead of continous generation. This value is interpolated between frames.

Keyframe Light Properties

TypeLight type. 0 - omni, 1 - omni normal, 2 - spot, 3 - spot normal. -1 removes the light.
ColorLight color. 3 values for RGB, each value ranges from -1024 to 1024. The values are interpolated between frames.
ReachDistance of light's reach. This value is interpolated between frames.
ConeSizeCone size for spot lights (1 to 180). This value is interpolated between frames.
FlickerSpeedFlicker speed (1 to 255). 0 disables flicker.

Custom Cups

This feature has been introduced in version 20.1230a.

You can add new championship cups to the game, just like additional cars and tracks. Each cup is defined in a text file (like cupfile.txt) placed in the cups folder. The available cups are listed at the Championship selection screen.

The following cupfile names are reserved:

  • bronze
  • silver
  • gold
  • platinum

Sample Cup File

Name        "I/O Super Pro Cup"
Difficulty  4
Obtain      0

NumCars     10  ; Number of cars [4 - 16]
NumTries    5   ; Number of retry attempts

Classes     0,0,0,0,0,9       ; Number of CPU cars picked from each rating
Points      10,8,6,5,4,3,2,1,0,0  ; Points obtained for each position

; Stages [0 - 15]: level laps mirrored reversed

STAGE 0     roof1 2 false false
STAGE 1     schoolslite 2 false false
STAGE 2     cliffside 1 false false
STAGE 3     fair1 5 false false
STAGE 4     wildland 3 true false
STAGE 5     ranch 2 false true
STAGE 6     fair2 3 false true
STAGE 7     schools 5 false true

Cup File Properties

NameName of the cup as displayed in-game.
DifficultyDifficulty level of the cup (see Difficulty). This affects the difficulty level of the CPU cars.
ObtainUnlock method of the cup (see Obtain).
NumCarsNumber of cars. Accepted values are 4-16, default being 8.
NumTriesNumber of retry attempts, default being 3.
ClassesNumber of CPU cars picked from each rating. The values must be comma-separated and add up to one less than the number of cars.
PointsPoints obtained for each position, list of comma-separated values.
STAGEDefines one or more stages of the cup. There can be up to 16 stages in a cup. The STAGE keyword is followed by the stage number (0-15), folder name of the track, mirrored and reversed specifiers (true/false).

Content Packs

This feature has been introduced in version 20.1230a.

RVGL has a flexible content management system that works similar to tools like Mod Organizer. Content can be placed in multiple folders and enabled selectively through a packlist file.

Each pack is a folder containing some content. Any file that is part of the game data counts for pack content. The player profile, i.e., the profiles, times, replays and cache folders are not loaded from packs.

When a packlist is active, only content from the listed packs are enabled. The result is as though each of those pack folders were extracted one after the other, saying yes to overwrites (so files belonging to a later listed pack has priority). The game sees a merged view of all the pack content.


The system is quite powerful and gives you a lot of freedom in managing your content. Here are a couple of things you can do:

  • Keep mods in separate folders and enable / disable them without affecting the main installation.
  • Manage multiple content sets (eg, for online events) and switch between them.
  • No files are actually copied or moved, which means zero overhead.
  • Save in-game edits to a separate local folder.

Managing Packs

Packs and packlists are loaded from the packs folder. The default packlist is called default.txt. This is active when no other packlist is used. A sample packlist file sample.txt is included with RVGL. Make a copy of it and name it default.txt.

Place all your packs in the packs folder, then edit the default packlist and list packs that must be enabled. Packs are read-only by default. When a packlist is active, all in-game edits made with the editor get saved to a special pack called local. To learn about the available options when editing a packlist, see the next section.

The command line -packlist <name> can be used to select a packlist different from the default packlist. This causes the packlist at packs\<name>.txt to be loaded.

The Packlist Format

A packlist is a simple text file that lists the enabled packs, one on each line. Suppose your packs folder contains the following packs:

  • addon1
  • addon2
  • special
  • local

Then, your packlist can be written like this:

Example #1


This enables your root content, then applies addon1, addon2 and your local edits on top of it, in the listed order. In this example, the special pack remains disabled.

  • The keyword default refers to the main installation or root folder. Unless this is listed, your root content will not be loaded.
  • The special pack local holds your in-game edits, made either through the editor or with an option such as Save Car Info. If you don't list this pack, your edits still get saved, but they won't show up in-game.
  • Pack names with spaces must be covered with quotes. Lines starting with a semi-colon are ignored.

Example #2

"my pack"
;this is a comment
  • Packs are read-only by default. An asterisk next to the pack name marks it as writable. A packlist can have at most one writable pack. The default writable pack, as we've seen above, is local. To ensure that your in-game edits show up correctly, list the writable pack last.

Example #3

myedits *

The above example enables the root content and applies addon1, followed by addon2. In-game edits go into the myedits pack, which is applied last.

Example #4

default *

The above example has a single entry that enables the root content, and makes it writable. This is identical to the default behavior when no packlist is active.