RVGL has been updated to 
21.0905a!
Update:
Download 
Win32 [ 
setup | 
7z ]
Download 
Win64 [ 
setup | 
7z ]
Download 
Linux [ 
setup | 
7z ]
Download 
macOS [ 
TBA ]
Download 
Android [ 
apk ]
Visit the topics for the 
Android version and the 
Shader edition for more information.
Goodies:
Download the 
Dreamcast Pack: 
rvgl_dcpack.zip
Download the 
Community Soundtrack: 
soundtrack.zip
Download the 
Controller Map Android app: 
rvgl_controllermap.apk
More about the update and RVGL: 
changelog | 
docs
Full game downloads are available at 
Re-Volt I/O.
 The network version has been updated!
NOTE
  The network version has been updated!
NOTE: 
The macOS release is expected to be delayed by one week. It will be announced separately.
Custom Animations:
It is now possible to have a custom animation triggered multiple times. To do this, set the 
TriggerOnce property of an animation to 
false. Read the 
updated docs for more info. Below is a potential use-case for multi-triggering animations (sample contributed by javildesign):
Custom animations can now have a 
Light, 3D Sound and 
Spark Generator attached to each bone. To learn how to add these to your animations, read the 
updated docs. You can insert a LIGHT, SFX or SPARK section at any keyframe, and then change their properties in further keyframes. Properties once added are inherited by further keyframes, so only the properties that must change again need to be specified. Below is an example:
► Custom Animated Light Sample
Code: Select all
  KEYFRAME {
    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
      ...             ; Other properties to animate this bone
      ; Add a spot light for this bone
      LIGHT {
        Type          3           ; Light type (0 - omni, 1 - omni normal, 2 - spot, 3 - spot normal, or -1 to disable)
        Color         0 200 200   ; Light color (RGB values, -1024 to 1024 for each component)
        Reach         1024        ; Light reach distance
        ConeSize      90          ; Cone size for spot lights (1 to 180)
        FlickerSpeed  0           ; Flicker speed (1 to 255, 0 to disable)
      }
    }
  }
  KEYFRAME {
    FrameNr  1        ; 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
      ...             ; Other properties to animate this bone
      ; Change the light color
      LIGHT {
        Color         0 0 200     ; Light color (RGB values, -1024 to 1024 for each component)
      }
    }
  }
  KEYFRAME {
    FrameNr  2        ; 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
      ...             ; Other properties to animate this bone
      ; Remove the light
      LIGHT {
        Type          -1          ; Light type (0 - omni, 1 - omni normal, 2 - spot, 3 - spot normal, or -1 to disable)
      }
    }
  }
 
Adding a 
sound effect to a bone works similar to adding a model. This means you need to declare your sound files, typically at the top of the file, and set the SfxID for your bone. To stop playing a looping sound effect, set the SfxID to -1. Sounds can be played once or loop continuously.
Code: Select all
SFX     0   "gator"               ; This loads "custom/gator.wav"
SFX     1   "tw_plane"
SFX     2   "tw_plane_propellor"
:
There are new parameters to better customize weapon firing offsets. The 
Weapon parameter is renamed to 
WeaponOffset1 (the old name keeps working for existing cars). Use 
WeaponOffset1 to tweak the shockwave and firework generation offset. Use 
WeaponOffset2 to tweak the water balloon generation offset. The default values for both offsets are provided in the 
docs.
The support for 
low-CoM and 
flippable cars has improved.
-  Transfer of electropulse between low-CoM and high-CoM cars now works.
-  Weapons no longer spawn underground or explode onto the firing car itself.
-  Low-CoM cars are now detected when passing through trigger boxes.
-  When flippable cars are upside down, weapons and cameras re-orient themselves.
Online:
The host has new options to block players based on their IP address. The first option is a "Disconnect and Block" command. Select a player in the Waiting Room and press 
Ctrl + Shift + D. Unlike the plain Disconnect command, this disconnects the player and prevents them from joining the session again.
The next option is a global blocklist file that can be loaded at startup. As a host, you can use this feature to block repeat offenders if you know their IP address, but keep in mind that most people around the world have dynamic IPs (they keep changing), so you should keep your blocklist small and clean up old entries every now and then. Follow these steps to set up your blocklist:
-  Create a blocklist.txt file in your profiles folder (profiles\blocklist.txt).
-  Add IP addresses to this file, one on each line.
-  Add -blocklist to your list of launch parameters.
The game must be run with the 
-blocklist launch parameter for the blocklist file to be loaded. This way, you can enable the blocklist for high priority sessions and keep it disabled otherwise, without having to remove the file itself.
Editor:
AI Nodes editor received fixes and additions for two lesser known features: (1) Generating a racing line from ghost path, and (2) Generating smooth curves at turns. The modern editor now supports them and there are new commands added. The old commands continue to work in the legacy editor. The 
docs have sections covering these features.
To generate racing lines from ghost path, you must be in Time Trial mode, and you must have completed a record. To verify you have a record, look for the ghost car or enable it from Game Settings. Then, press 
G to generate the ghost path (you should see a red line that traces your record lap). Then press 
Shift + G to update the racing lines, and 
Ctrl + Shift + G to update the overtaking lines. Overtaking line generation is experimental and might require further manual tweaking.
To generate curves, hold down the 
N key and select 3 consecutive nodes, one before the turn, one at the turn itself and one after the turn. 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.
NOTE: 
In the legacy editor, the commands for ghost path generation are 6 and Shift + 6. For curve generation, 1, 2 and 3 keys select the control nodes, and 4 and 5 keys update the racing / overtaking lines. Numpad keys can be used to adjust the curve.
Other Changes:
-  Libraries are upgraded on Windows and Android (SDL -> 2.0.14, ENet -> 1.3.17), and on Windows (OpenAL Soft -> 1.21.1).
-  FluidSynth 2 is supported for MIDI playback, so it should be working once again on newer Linux distros.
-  The audio device is initialized with a 48 kHz sample rate if supported.
-  Slovenian language is added (thanks to Mirko Ficko for the translation).
Bug Fixes:
-  Collision clipping bug: A long time issue that caused cars to randomly spin out when riding along walls is now fixed.
-  Fixed game window getting minimized when a message box is shown. The fix should also prevent a fullscreen display on a multi-monitor setup from minimizing, although this is not tested.
-  Fixed an inconsistency in music playback in a custom frontend when the In-Game Music option is turned off.
-  Fixed ball bearing texture cut off at the top in the weapon holder.
-  Fixed a bug that caused the Battle Tag timer to run slow.
► Show changelog of this version
21.0905a-1:
| Pumped network version.
Add:
  [General]
  - Object Animation: Added support for lights, sound effects and sparks. Each
    bone can have a 3d sound, light and spark generator attached to it. These
    can be created and destroyed at any keyframe. Sounds can be one-shot or
    looping. See the docs for more details.
  - Object Animation: Non-looping animations (Mode 1) can now be triggered
    multiple times. Set 'TriggerOnce' to 'false' to enable this behavior.
  - For cars, the 'Weapon' key in parameters.txt is now deprecated. Instead, 2
    new keys have been added: 'WeaponOffset1' (for shockwaves and fireworks)
    and 'WeaponOffset2' (for water bombs).
  - Added support for Slovenian language (thanks to Mirko Ficko).
  [Graphics]
  - Added support for High DPI rendering (eg., on macOS with a retina display).
    This can be disabled by setting 'HighDPI = 0' in rvgl.ini.
  - Linux: Added option to keep the Desktop compositor enabled when the game is
    running. This allows smoother transition between RVGL and other windows, at
    the cost of slightly reduced performance. Set 'Compositor = 1' in rvgl.ini.
  [Multi]
  - Added support for blocking a player by IP address. The host can select a
    player in Waiting Room and use 'Ctrl + Shift + D' to disconnect and block
    the player from connecting again during the session.
  - Global Blocklist: In addition to dynamic blocking, a file containing IPs to
    block can be loaded at session start. Create 'profiles\blocklist.txt' with
    one entry per line. Then, launch RVGL with the '-blocklist' command line.
Mod:
  [General]
  - The following libraries are upgraded: SDL -> 2.0.14, ENet -> 1.3.17,
    OpenAL Soft -> 1.21.1 (Windows).
  - On macOS, assets are loaded from the 'Application Support' folder so the
    content is not lost when the RVGL.app is updated or replaced. Assets are
    copied from the bundle on first run.
  - Improved assets handling on Android and macOS. Installing the full game
    bundle (APK or DMG) over a previously installed partial bundle correctly
    copies the full game assets again.
  - Editor: Improved support for AI line creation from ghost path and curve
    generation. These features are now supported by the modern editor. See the
    docs for the updated list of commands.
  - Editor: Several message boxes are replaced with in-game messages.
  [Graphics]
  - Game window should no longer minimize when a message box is displayed.
  - Log the window size and render resolution at startup.
  [Audio]
  - Initialize audio device with a 48 kHz sample rate when available.
  - FluidSynth 2 is supported for MIDI playback.
  [Input]
  - Android: Updated the Controller Map configuration app.
  - Updated the SDL GameController mapping database.
  - Log information about Force Feedback support.
Fix:
  [General]
  - Several fixes for low CoM vehicles: (1) Transfer of electropulse between
    low-CoM and high-CoM cars not working; (2) Weapons spawning underground or
    exploding onto the car itself; (3) Trigger boxes failing hit tests.
  - Better support for flippable cars: When these cars are upside-down, weapons
    and cameras (hood and rear-view) are now oriented properly.
  - Fixed weapons like battery and electropulse crashing the game if the car
    has an empty body mesh.
  - Fixed an exploit that let the player skip through a championship race by
    repeatedly pressing Enter at the Quit menu option.
  - Fixed a collision issue when wall-riding. When merging close collisions,
    take into account alignment along all 3 axes. This fixes situations where
    the wheels clip collision polygon edges, causing the car to spin out.
  - Object Animation: Fixed a collision glitch when the car is on an animated
    platform that is moving away from the world NCP bounds.
  - Android: Fixed crash at start on Android 4.x devices.
  - Editor: Fixed empty meshes unselectable in Objects and Instances modes.
  - Editor: Fixed invalid flags causing crash in Lights edit mode.
  - Editor: Fixed selection of overlapping Fields and Triggers.
  [Graphics]
  - Fixed ball bearing texture cut off in the weapon holder.
  [Audio]
  - Fixed inconsistency in playing frontend music when music is turned off.
  [Multi]
  - Fixed a precision loss in the Battle Tag timer.