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.

General

Features at a Glance

Languages

Language files are present in the game's strings folder. Any language file placed in there will be automatically detected by RVGL. The localized language name (eg, "Français" for "french.txt") should be specified as the last line of the file.

The following languages are currently included: Basque, Dutch, English, French, German, Hungarian, Italian, Polish, Portuguese, Spanish and Swedish.

Profiles

Save files are located in the profiles folder. RVGL global settings file is named "rvgl.ini". Profile specific settings are saved in "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.

Soundtrack

Original Soundtrack (Dreamcast version) is available along with the game assets from the Downloads page.

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

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

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.

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

Multi-Player

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.

Multicast: When some players are always found to have trouble seeing each other in-game, the host can turn off P2P and use multicasting (i.e., all messages pass through the host) by setting the -nop2p command line. Keep in mind that using this option can have a negative impact on gameplay.

Waiting Room commands:

When joining a game, Ctrl+V pastes clipboard content into the Host Computer field.

In-Game commands:

Discord Rich Presence:

Multi-Player games can be announced and joined directly from Discord chat. Rich game data including 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. A running 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.

Options

Advanced Options

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

A log file is generated at profiles\re-volt.log. Running the alsoft_log script also generates an OpenAL info log at profiles\alsoft.log.

NLaps can be set up to 255 by directly editing the player's profile.ini. Similarly, NCars can be set to 1 to race alone (eg., for testing purposes).

Keyboard Commands

Fullscreen toggle: F11 switches between Fullscreen and Windowed mode instantly.

Screenshot: F8 automatically save screenshots from the game. The screenshots are timestamped and saved in the profiles folder in PNG format.

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.

Commands

Controllers

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 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.

Renderer

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

To enable the shader mode, edit rvgl.ini and set Shaders = 1. This is enabled by default on Android. On Desktops, it should be enabled by the user.

OpenGL Functionality:

RVGL has 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 available for these features can be verified from the "Video Info" section in profiles\re-volt.log.

OpenGL Profiles:

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

  1. Compatibility profile: Initialize a backwards compatible OpenGL profile (the default).
  2. Core profile: Initialize a 3.2+ Core profile. Only applicable when shader mode is active. In some cases, driver support may be better when using a core profile.
  3. ES profile: Initialize an OpenGL ES profile for Embedded Systems. 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+.
  4. ES Driver profile: On Windows, initialize an OpenGL ES 2+ profile using the ANGLE Direct3D implementation included with RVGL. Only applicable when shader mode is active.

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).

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

-gogodemo
Launches the game in demo mode.

-latejoin
Can be set by the host to allow players to jump into an ongoing race. This is only supported in P2P mode. (Added in version 17.1218a.)

-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 ignored (for launching the host).

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

-nogamma
Disables gamma correction.

-nointro
Disables the intro.

-nop2p
Disables P2P and uses client-server mode.

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

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

-nosound
Launches the game without sound/music.

-nouser
Disables custom content.

-pass <phrase>
Protect the session with a password. The passphrase can be upto 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.)

-profile
Loads last used profile, does not show profile selection menu.

-profile <name>
Loads the profile <name>.

-register
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.

-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.)

-sessionlog
Saves race results to the profile folder as timestamped .cvs files. (Added in version 17.1012a.)

-sload
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.

Dev:

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

-alpharef <0 to 255>
Reference value for alpha testing, default is 128

-cubevisi
Performs simpler visibox computations for rendering.

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

-texinfo
Shows the maximum supported texture size by the GPU.

Legacy:

-noforce
Don't use force feedback of controllers.

-nomip
Disables mipmaps.

-nostars
Disables stars in Museum 2's planetarium

OS Specifics

Windows

RVGL for Windows is provided in an installer format. The installer sets the necessary registry entries and file permissions, and provides an option to create 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 necessary and not recommended.

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 Direct3D9 or Direct3D11. To use this support, edit rvgl.ini and set Shaders = 1 to enable the shader-based renderer, then set GLProfile = 3.

You can verify whether the Direct3D backend is being used by checking the video info 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 2.0 (ANGLE 2.1.0.54118be67360)

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, eg., to set various launch parameters, edit the registry key at:

HKEY_CURRENT_USER\Software\Classes\discord-472158403830218762\shell\open\command

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.

GNU/Linux

The setup script needs to be executed before first run.

RVGL comes with a launch script that auto-detects the system type and launches either the 32-bit or 64-bit executable. The script automatically resolves dependencies by using libs included with rvgl in place of any missing libs. This allows rvgl to run without any manual configuration on a wide range of distros as long as the opengl drivers, SDL2 and SDL2_image are installed.

All game files need to be lower case. Run fix_cases to repair file names after installing custom content.

Required Packages

# Debian / Ubuntu
sudo apt install libsdl2-2.0-0 libsdl2-image-2.0-0    # required
sudo apt install libopenal1 libenet7 libunistring0    # recommended
sudo apt install libvorbisfile3 libflac8 libmpg123-0  # optional
# Arch Linux
sudo pacman -S sdl2 sdl2_image            # required
sudo pacman -S openal enet libunistring   # recommended
sudo pacman -S libvorbis flac mpg123      # optional
# Fedora
sudo yum install SDL2 SDL2_image            # required
sudo yum install openal enet libunistring   # recommended
sudo yum install libvorbis flac mpg123      # optional

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, eg., to set various launch parameters, edit the Desktop entry at:

~/.local/share/applications/discord-472158403830218762.desktop

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.

Android

Locating the data path

The following locations are supported:

/sdcard/RVGL
/storage/sdcard0/RVGL
/storage/sdcard1/RVGL
/storage/emulated/legacy
/storage/emulated/0
/storage/emulated/1

If you already ran the app, it should have automatically generated an RVGL folder for you with updated assets. In this case, extract the full game data into this folder, taking care not to overwrite any of the existing files (i.e., say NO to replace).

Generated files

Improving performance

The Shader Edition might benefit from level *.w files optimized with WorldCut, which can be downloaded from here.

To display frame rate, edit rvgl.ini and set ShowFPS to 1.

Gameplay tips

Native Multisampling

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

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.

Dev Mode

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

Working with tracks and cars is more convenient in Dev mode. This is a special mode that enables several advanced features for car / track making, in addition to MAKEITGOOD and TVTIME cheats. 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.

Options

These options are available only in Dev mode.

Calc Car Stats: This game mode accessible from Start Race -> Calc Car Stats option allows you to calculate the speed and acceleration of your car for the stats display.

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 signed to ensure that they are not treated as CHT.

Commands

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

Preview Objects: In Objects edit mode, press Ctrl + P to preview objects animation instantly, then use the same command to get back to editing.

Cheat Codes: Certain cheats such as TVTIME (F5, F6 cameras) or CHANGELING (PgUp / PgDn to change car) are enabled in Dev mode.

Show Camera Position: Press RShift + 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.

Toggle Camera Speed: Use Caps Lock to toggle the camera speed.

Keep game running in background: Press LShift + 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. Then with the game paused, press and hold Shift to hide the in-game menu. This helps, eg., to take 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. 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.

Network Ping: In multiplayer sessions, ping and traffic information can be checked from the debug display in Dev mode (Ctrl + Numpad Enter).

Textures

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

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 000) can be used for 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, 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.

For Car Makers

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

To make sure your car stays compatible with legacy versions of the game, precede each line of a new entry in the parameters file with ;). This is done in our examples below.

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). General syntax: ;)SFXENGINE <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:

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
    ;)}               ; 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 affect (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 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 carbox filename are skipped.

Skin suffix length is currently limited to 11 characters.

For Track Makers

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

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)

Difficulty

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.

Custom Challenge Time

Customs 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    0 52 0

Added in version 18.0330a.

Texture Properties

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

TEXTUREPROPS    3 1 0 1 ; Index - mipmapping - wrap mode - colorkeying

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 alpha testing).

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)

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>  ;

Supported formats are Ogg (recommended), Flac, MP3 and WAV.

This entry was previously called MP3 which is now a deprecated keyword. 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.

Supporting 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: 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 (1:battle, 2:stunt)

Add several stars for Battle Tag mode, and upto 64 stars for Stunt Arena. Progress for Stunt track type is saved and displayed.

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

Several edit modes (AI Nodes, Pos Nodes) support automatically reversing the data for you, by using the LShift + R command.

Advanced Customization

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

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:

This is an exhaustive list. Some of these files should practically never be customized. The support for some formats was only added to be able to release a track compatible with legacy Re-Volt versions (see the Compatibility Notes section).

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:

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:

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 and STARTGRID keys are taken from that file instead of the REV variants provided in the main <level>.inf file.

Track Properties (properties.txt)

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:

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

properties_default.txt

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

Materials

A material structure provides information about the surface cars drive on. Each material has a unique ID. In total, 27 different materials can be used.

Default Materials
ID Material ID Material
0 Default 14 Pebbles
1 Marble 15 Gravel
2 Stone 16 Conveyor 1
3 Wood 17 Conveyor 2
4 Sand 18 Dirt 1
5 Plastic 19 Dirt 2
6 Carpet Tile 20 Dirt 3
7 Carpet Shag 21 Ice 2
8 Boundary 22 Ice 3
9 Glass 23 Wood 2
10 Ice 1 24 Conveyor Market 1
11 Metal 25 Conveyor Market 2
12 Grass 26 Paving
13 Bump Metal

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

MATERIAL {
  ID               10               ; ID of the material to replace [0 - 26]
  Name             "Ice 1 Snow"     ; Display name

  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

  SkidSound        87               ; Sound when skidding [0:Normal, 1:Rough]
  ScrapeSound      1                ; Car body scrape [0:Normal]

  SkidColor        207 215 220      ; Color of the skid marks
  CorrugationType  2                ; Type of bumpiness [0 - 7]
  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
Property Description Recommended Defaults
ID Unique ID number of the material you want to override. It's advised to override materials that aren't used in-game or have the same properties as others (DIRT2, DIRT3, CARPETTILE, PAVEMENT, etc.).
Name Display name, not used by the game. -
Spark The material emits particles that are defined by the assigned dust. true or false.
Skid If true, cars leave skid marks on the ground. true for most materials.
OutOfBounds Not used in the game (yet). false.
Corrugated Makes the surface bumpy. true or false.
Moves Material moves the cars like the museum conveyors. true or false.
Dusty Material generates dust when cars drive on it. true or false.
Roughness Roughness of the material. Between 0.1 and 1.0.
Grip Grip of the material. Between 0.1 and 1.0.
Hardness Hardness of the material. Between 0.1 and 1.0.
SkidSound Sound when cars skid on the material (when the wheels lose traction or drift). 6 (normal) or 7 (rough)
ScrapeSound Sound when cars scrape on the material (when the body touches the ground). 6 (normal) or 7 (rough)
SkidColor Color of the wheel's skid marks. 50 50 50
CorrugationType ID of the corrugation to use for this material. Corrugated needs to be true. 0
DustType ID of the dust type to use for this material. Dusty needs to be true. 0
Velocity Velocity 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 SkidSound and ScrapeSound properties.

To use more than IDs 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.

ID Sound path ID Sound path
0 moto.wav 53 hood/birds3.wav
1 petrol.wav 54 hood/dogbark.wav
2 clockwrk.wav 55 hood/kids.wav
3 ufo.wav 56 hood/sprink.wav
4 honkgood.wav 57 hood/tv.wav
5 scrape.wav 58 hood/lawnmower.wav
6 skid_normal.wav 59 hood/digger.wav
7 skid_rough.wav 60 hood/stream.wav
8 pickup.wav 61 hood/cityamb2.wav
9 pickgen.wav 62 hood/roadcone.wav
10 shock.wav 63 garden/tropics2.wav
11 shockfire.wav 64 garden/tropics3.wav
12 electro.wav 65 garden/tropics4.wav
13 electrozap.wav 66 garden/stream.wav
14 firefire.wav 67 garden/animal1.wav
15 firebang.wav 68 garden/animal2.wav
16 balldrop.wav 69 garden/animal3.wav
17 ball.wav 70 garden/animal4.wav
18 hit2.wav 71 muse/museumam.wav
19 wbomb.wav 72 muse/laserhum.wav
20 wbombfire.wav 73 muse/alarm2.wav
21 wbombhit.wav 74 muse/escalate.wav
22 wbombbounce.wav 75 muse/rotating.wav
23 puttbang.wav 76 muse/largdoor.wav
24 fuse.wav 77 market/aircond1.wav
25 oildrop.wav 78 market/cabnhum2.wav
26 countdown.wav 79 market/carpark.wav
27 turbo.wav 80 market/freezer1.wav
28 servo.wav 81 market/iceyarea.wav
29 menunext.wav 82 market/sdrsopen.wav
30 menuprev.wav 83 market/sdrsclos.wav
31 menuupdown.wav 84 market/carton.wav
32 menuleftright.wav 85 ghost/coyote1.wav
33 lightflk.wav 86 ghost/bats.wav
34 boxslide.wav 87 ghost/eagle1.wav
35 starfire.wav 88 ghost/minedrip.wav
36 tvstatic.wav 89 ghost/rattler.wav
37 splash.wav 90 ghost/townbell.wav
38 honka.wav 91 ghost/tumbweed.wav
39 beachball.wav 92 ship/intamb1.wav
40 bottle.wav 93 ship/seagulls.wav
41 toy/piano.wav 94 ship/shiphorn.wav
42 toy/plane.wav 95 ship/strmrain.wav
43 toy/copter.wav 96 ship/thunder1.wav
44 toy/dragon.wav 97 ship/wash.wav
45 toy/creak.wav 98 roof/traffic_mush.wav
46 toy/train.wav 99 roof/helicopter_loop.wav
47 toy/whistle.wav 100 roof/siren_loop.wav
48 toy/arcade.wav 101 roof/wind_loop.wav
49 toy/toybrick.wav 102 roof/steamhiss_loop.wav
50 hood/basketball.wav 103 roof/electric_hum.wav
51 hood/birds1.wav 104 roof/telemetry.wav
52 hood/birds2.wav 105 roof/air_con.wav

Corrugation

Corrugation structures define the bumpiness of the surface. There are 8 types available.

Default Corrugation
ID Corrugation ID Corrugation
0 NONE 4 CONVEYOR
1 PEBBLES 5 DIRT1
2 GRAVEL 6 DIRT2
3 STEEL 7 DIRT3

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

CORRUGATION {
  ID              1                             ; Corrugation to replace [0-7]
  Name            "Name"                        ; Display name

  Amplitude       0.000000                      ; Amplitude of bumps (strength)
  Wavelength      0.000000 0.000000             ; Frequency of bumps
}
Corrugation Properties
Property Description Recommended Defaults
ID ID of the corrugation type to override. 0 - 7
Name Name of the corrugation. Not used in-game. -
Amplitude Strength of the corrugation (height of the bumps) 0.0 - 5.0
Wavelength Frequency of the bumps 0.0 - 100.0

Dust

Dust structures are a set of two particles with a probability and variance. Materials emit dust when cars drive on them.

Default Dust
ID Dust
0 NONE
1 GRAVEL
2 SAND
3 GRASS
4 DIRT
5 ROAD

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

DUST {
  ID              1                             ; Dust to replace [0 - 5]
  Name            "GRAVEL"                      ; Display name

  SparkType       4                             ; Particle to emit [0 - 30]
  ParticleChance  0.600000                      ; Probability of a particle
  ParticleRandom  0.600000                      ; Probability variance

  SmokeType       29                            ; Smoke particle to emit [0-30]
  SmokeChance     0.300000                      ; Probability of a smoke part.
  SmokeRandom     0.600000                      ; Probability variance
}
Dust Properties
Property Description Recommended Defaults
ID ID of the dust type to override. 0 - 5
Name Display name of the dust type, not used in-game. -
SparkType ID of the particle to emit. 0 - 30
ParticleChance The probability of a particle to be emitted. 0.0 - 1.0
ParticleRandom Variance of the probability. 0.0 - 1.0
SmokeType ID of the smoke particle to emit. 0 - 30
SmokeChance The probability of smoke to be emitted. 0.0 - 1.0
SmokeRandom Variance if the probability. 0.0 - 1.0

Particles

Particles (also called sparks) can be emitted by materials, weapons, cars and other objects.

Default Particles
ID Particle
0 SPARK
1 SPARK2
2 SNOW
3 POPCORN
4 GRAVEL
5 SAND
6 GRASS
7 ELECTRIC
8 WATER
9 DIRT
10 SMOKE1
11 SMOKE2
12 SMOKE3
13 BLUE
14 BIGBLUE
15 SMALLORANGE
16 SMALLRED
17 EXPLOSION1
18 EXPLOSION2
19 STAR
20 PROBE_SMOKE
21 SPRINKLER
22 SPRINKLER_BIG
23 DOLPHIN
24 DOLPHIN_BIG
25 SPARK3
26 ROADDUST
27 GRASSDUST
28 SOILDUST
29 GRAVELDUST
30 SANDDUST

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

SPARK {
  ID              0                             ; Particle to replace [0 - 30]
  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
Property Description Recommended Defaults
ID ID of the particle to replace. 0 - 30
Name Display name of the particle, not used in-game. -
CollideWorld The particle collides with the world (geometry from the .w file). true or false
CollideObject The particle collides with objects (cars and other level objects). true or false
CollideCam The particle collides with the camera (currently not implemented). false
HasTrail The particle has a trail. true or false
Field Affect The particle is affected by force fields. true or false
Spins The particle rotates. true or false
Grows The particle grows bigger. true or false
Additive The particle is rendered additively: Black becomes transparent and bright colors are added to the underlying things. true or false
Horizontal Instead of facing the camera, the particle is flat. true or false
Size Size of the particle. 1.0 1.0
UV Top left UV-coordinate of the mapping. 0.0 0.0 is top left and 1.0 1.0 is bottom right. -
UVSize Width and height of the UV mapping (bottom right corner). -
TexturePage Texture the particle will be mapped to. 47 is fxpage1, 0-9 are track textures.
Color RGB Color of the particle. 255 255 255
Mass Mass of the particle.
Resistance Air resistance of the particle (how slowly it travels through the ari).
Friction Frichtion when touching collideable objects.
Restitution Bounciness of the particle.
LifeTime How long the particle lives. If this is too high, the creation of other particles might be prevented.
LifeTimeVar Variance of the life time.
SpinRate The spin rate in radians per second.
SpinRateVar Variation of the spin rate.
SizeVar Initial size variation.
GrowRate How quickly the particle grows.
GrowRateVar Variation of the grow rate.
TrailType ID of the trail if enabled. 0 - 2

Trails

Trails are similar to particles. They follow particles. They're used for fireworks and some sparks.

Default Trails
ID Trail
0 FIREWORK
1 SPARK
2 SMOKE

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

TRAIL {
  ID              1                             ; Trail to replace [0 - 2]
  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
  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
Property Description Recommended Defaults
ID ID of the trail to override. 0 - 2
Name Display name of the trail, not used in-game. -
Fades The trail fades out. true or false
Shrinks The trail segments get smaller. true or false
Expands The trail segments get bigger. true or false
UV Top 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. -
UVEnd Top 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.
UVSize Width and height of the UV mapping (bottom right corner). -
Color Alpha, Red, Green, Blue color of the trail. 255 255 255 255
LifeTime How long the trail segments live.
Width Width of the trail segments.
Length Number of trail segments. 1 - 12

Limitations

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

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

Compatibility Notes

With support for custom track files (.fob, .fin, etc), it is possible to include eg., a simplified .fob file in the main track folder and a custom .fob file placed in the "custom" folder. That way, the track can be played with legacy Re-Volt versions.

When designing tracks for legacy versions, the following limitations need to be taken into account:

Texture Animation: The simplified world (.w) file should contain no more than 16 texture animation slots, any more will crash legacy versions.

Camera Nodes: RVGL gives you an option whether to save the .cam file in the old format or the new format with support for higher range. If your track coordinates are within the range of (-32768 to 32768), you can choose to save in the old format.

Conveyor Effect: The direction of conveyor effect is hardcoded in legacy versions. You can provide world (.w) and / or instance (.fin) files with no conveyor effect for those versions, then use custom support to add the effect for RVGL.

Limitations: Any content exceding these limits will simply be ignored by legacy versions and are not of concern for compatibility.

Below limits are not usually exceeded but if otherwise, you might want to use custom support to include simplified files.


Copyright © RV Team 2010-2018.
Webpage: https://rvgl.re-volt.io
Email: rv12@revoltzone.net