RVGL is now available on Android based devices (phones, tablets, etc). It should work on any recent Android device, technically 2.x and newer, supporting both 32-bit and 64-bit ARM / x86 targets. A GPU supporting at least OpenGL ES 2.0 is required. However, it can be made to run on OpenGL ES 1.1 by using the legacy fixed pipeline renderer.

The Android version features a new Touch UI and virtual joypad support, with buttons designed by RV Passion (see one of the preview screenshots below).

Download:
The latest android build is available from the RVGL project page.Controller Map: Android app that allows generating SDL GameController mappings for controllers.

Installation:
RVGL requires the original game data to be able to run. This is not included with the apk itself. You can grab the game data from the Re-Volt I/O page. Basic installation steps follow:

Create a folder named RVGL in your phone's internal storage and extract the game data into it.

Note: If you have already run 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).

A file named rvgl_version.txt can be located in the RVGL folder. Deleting it will force the game to re-extract the latest assets included in the apk.

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

To use the legacy ES 1.1 renderer, edit profiles/rvgl.ini and set Shaders to 0.

Improving performance: The shader-based renderer might benefit from WorldCut optimized world files, which can be downloaded from here. Starting from 18.1126a, optimized world files are included in the APK.

Gameplay tips:

When the car is upside down, tap anywhere in the centre of the screen (or on the car itself) to flip the car.

UI navigation: tap anywhere outside a menu box to go back to the previous screen.

► Known Issues

The following issues / limitations are applicable to the latest RVGL running on Android.

The game starts in Portrait mode by default and needs to be manually rotated into Landscape mode.

Brightness / contrast don't seem to be working.

Copy / pasting IP address is not supported yet.

Pressing backspace on the virtual keyboard keeps backspacing on some devices (cause unknown).

I love it. I just love it. There are some issues that I'd like to see fixed, no deal breakers, just stuff that could improve the general experience.

Bigger menu buttons: On lower dp they may look fine, but at 513 dp on a 5" they are a bit too hard to get consistently.
Customizable/draggable buttons: I'd love to see such a thing: pause button is too small, rear view is too far away from the arrows to be used when needed (also rear view is a meme in all rvgl versions).
Permissions: This shouldn't really be anything crazy, right now the apk tells you the permissions it's going to use when you install, lollipop style, while in recent android versions (i.e. nougat, oreo) the apk prompts you to allow access to whatever it needs (storage, photos, ect... ect...)
Icon: Along with the permissions, the icon should also be updated to match latest android version's standards. Nougat uses circle icons, while oreo takes it a step further with adaptive icons (they can be reshaped from circle to square to anything else by the launcher on the fly). Also, a material design version of the icon would be nice
Medias: Simply make the game add a blank file called '.nomedia' in the RVGL folder (without quotes) so that android's media provider skips the folder and we don't get our gallery apps flooded with rvgl's game files.

Last edited by ciccio on Sat Mar 10, 2018 9:01 am, edited 1 time in total.

Icon: Along with the permissions, the icon should also be updated to match latest android version's standards. Nougat uses circle icons, while oreo takes it a step further with adaptive icons (they can be reshaped from circle to square to anything else by the launcher on the fly). Also, a material design version of the icon would be nice

The current version supports Nougat circle icons, but I can't build with Oreo adaptive icons support for now. I'm currently on a 32-bit PC and it seems I need a newer Android SDK which has only 64-bit support. I'll get to it eventually though...

Amazing!
Just a few things to note regarding custom content:
-Cars with parameters that don't end in a newline (or maybe the extra hex code thing that I never really understood what it was) and just end with "}" will crash the game. (Examples: Renault Twingo, MCC Smart, Anything from my Mario Kart pack)
To fix just add a newline to the end of Parameters.txt.
-Some tracks also cause the game to not even start upon launching it. I've yet to research as to why this happens though. But MAYBE also has to do with .inf files that don't end with a newline, but I cannot confirm it yet.

This is awesome! I just tried the game on my good old Nexus 6, it runs extremely smoothly and the touchscreen controls are easy to use. Good job!

A few things I noticed:
- the game seems to often crash when you quit it (with a system popup "RVGL has stopped").
- is it possible to import your player profile from a desktop version of the game? Copy-pasting my Profiles folder didn't seem to do the trick.
- it doesn't seem possible to enable antialiasing in the video settings.
- I couldn't get the app to load with my own copy of the game data and had to re-download a fresh copy from Re-Vold I/O. This is probably linked to Lu9's comment above, where some tracks prevent the game from starting.
- when you long press delete when typing the player name, it will stay stuck in a "deleting state" until you long press delete again.

-Cars with parameters that don't end in a newline (or maybe the extra hex code thing that I never really understood what it was) and just end with "}" will crash the game. (Examples: Renault Twingo, MCC Smart, Anything from my Mario Kart pack)
To fix just add a newline to the end of Parameters.txt.
-Some tracks also cause the game to not even start upon launching it. I've yet to research as to why this happens though. But MAYBE also has to do with .inf files that don't end with a newline, but I cannot confirm it yet.

- is it possible to import your player profile from a desktop version of the game? Copy-pasting my Profiles folder didn't seem to do the trick.

Copying your profile folder from the desktop should work 100%. It is possible that the Android file system is case-sensitive like Linux. That means you need to rename all your files to lower case before you import them. I presume you're on Windows, so you might need to look for some automatic renaming utility.

Copying your profile folder from the desktop should work 100%. It is possible that the Android file system is case-sensitive like Linux. That means you need to rename all your files to lower case before you import them. I presume you're on Windows, so you might need to look for some automatic renaming utility.

Re-Volt Error Log File
Compilation date: 21:30:11, Mar 15 2018
Architecture: Android (32-bit)
Build: 18.0315s
Android: Using data path: '/sdcard/RVGL'
Android: Assets up to date
Timer Frequency: 1000000000
Loading: profiles/rvgl.ini: Found
Loading: strings/english.txt: Found
Loading: strings/french.txt: Found
Loading: strings/german.txt: Found
Loading: strings/italian.txt: Found
Loading: strings/spanish.txt: Found
Loading: strings/dutch.txt: Found
Loading: strings/hungarian.txt: Found
Loading: strings/polish.txt: Found
Loading: strings/portuguese.txt: Found
Loading: strings/swedish.txt: Found
Found language: Nederlands (dutch.txt)
Found language: English (english.txt)
Found language: Français (french.txt)
Found language: Deutsch (german.txt)
Found language: Magyar (hungarian.txt)
Found language: Italiano (italian.txt)
Found language: Polski (polish.txt)
Found language: Português (portuguese.txt)
Found language: Español (spanish.txt)
Found language: Svenska (swedish.txt)
Loading: strings/english.txt: Found
Loading: cars/rc/parameters.txt: Found
Loading: cars/mite/parameters.txt: Found
Loading: cars/phat/parameters.txt: Found
Loading: cars/moss/parameters.txt: Found
Loading: cars/mud/parameters.txt: Found
Loading: cars/beatall/parameters.txt: Found
Loading: cars/volken/parameters.txt: Found
Loading: cars/tc6/parameters.txt: Found
Loading: cars/dino/parameters.txt: Found
Loading: cars/candy/parameters.txt: Found
Loading: cars/gencar/parameters.txt: Found
Loading: cars/tc4/parameters.txt: Found
Loading: cars/mouse/parameters.txt: Found
Loading: cars/flag/parameters.txt: Found
Loading: cars/tc2/parameters.txt: Found
Loading: cars/r5/parameters.txt: Found
Loading: cars/tc5/parameters.txt: Found
Loading: cars/sgt/parameters.txt: Found
Loading: cars/tc3/parameters.txt: Found
Loading: cars/adeon/parameters.txt: Found
Loading: cars/fone/parameters.txt: Found
Loading: cars/tc1/parameters.txt: Found
Loading: cars/rotor/parameters.txt: Found
Loading: cars/cougar/parameters.txt: Found
Loading: cars/sugo/parameters.txt: Found
Loading: cars/toyeca/parameters.txt: Found
Loading: cars/amw/parameters.txt: Found
Loading: cars/panga/parameters.txt: Found
Loading: cars/trolley/parameters.txt: Found
Loading: cars/wincar/parameters.txt: Found
Loading: cars/wincar2/parameters.txt: Found
Loading: cars/wincar3/parameters.txt: Found
Loading: cars/wincar4/parameters.txt: Found
Loading: cars/ufo/parameters.txt: Found
Loading: cars/q/parameters.txt: Found
Loading: cars/bigvolt/parameters.txt: Not Found
Loading: cars/bossvolt/parameters.txt: Not Found
Loading: cars/jg6rc/parameters.txt: Not Found
Loading: cars/tc12/parameters.txt: Not Found
Loading: cars/tc10/parameters.txt: Not Found
Loading: cars/tc8/parameters.txt: Not Found
Loading: cars/tc11/parameters.txt: Not Found
Loading: cars/tc9/parameters.txt: Not Found
Loading: cars/jg1jg7/parameters.txt: Not Found
Loading: cars/tc7/parameters.txt: Not Found
Loading: cars/jg3loco/parameters.txt: Not Found
Loading: cars/jg4snw35/parameters.txt: Not Found
Loading: cars/jg5purpxl/parameters.txt: Not Found
Loading: cars/jg2fulonx/parameters.txt: Not Found
Video: Initializing...
Video: Opening window
Video: Found 1 display modes
Video: Setting display mode
Video: Creating OpenGL context
Video: Loading GL functions
===== Video Info =====
GL Vendor: Qualcomm
GL Renderer: Adreno (TM) 420
GL Version: OpenGL ES 3.2 V@145.0 (GIT@If5818605d9)
GL_VERSION_1_2: Not Found
GL_VERSION_ES_CM_1_0: Not Found
GL_SGIS_texture_lod: Not Found
GL_SGIS_generate_mipmap: Not Found
GL_EXT_texture_filter_anisotropic: Found
GL_VERSION_1_3: Not Found
GL_ARB_texture_env_combine: Not Found
GL_EXT_texture_env_combine: Not Found
GL_ARB_multitexture: Not Found
GL_ARB_multisample: Not Found
GL_EXT_multisample: Not Found
GL_VERSION_1_4: Not Found
GL_EXT_fog_coord: Not Found
GL_ARB_vertex_array_bgra: Not Found
GL_EXT_vertex_array_bgra: Not Found
GL_EXT_clip_volume_hint: Not Found
GL_VERSION_2_0: Not Found
GL_ES_VERSION_2_0: Found
GL_VERSION_3_0: Not Found
GL_ES_VERSION_3_0: Found
GL_ARB_framebuffer_object: Not Found
GL_EXT_framebuffer_object: Not Found
GL_EXT_framebuffer_blit: Not Found
GL_EXT_framebuffer_multisample: Not Found
GL_VERSION_4_1: Not Found
GL_ARB_get_program_binary: Not Found
GL_OES_get_program_binary: Found
===== Video Info =====
Video: Loading shader (type: 0, flags: 0)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_00000000.bin: Found
Video: Loading shader (type: 0, flags: 1)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_00000001.bin: Found
Video: Loading shader (type: 0, flags: 3)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_00000003.bin: Found
Video: Loading shader (type: 0, flags: 103)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_00000103.bin: Found
Video: Loading shader (type: 0, flags: b)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_0000000b.bin: Found
Video: Loading shader (type: 0, flags: 6b)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_0000006b.bin: Found
Video: Loading shader (type: 0, flags: 16b)
Loading: shaders/world_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/world_fs.glsl: Found
Loading: shaders/cache/00000000_0000016b.bin: Found
Video: Loading shader (type: 1, flags: 0)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000000.bin: Found
Video: Loading shader (type: 1, flags: 1)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000001.bin: Found
Video: Loading shader (type: 1, flags: 3)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000003.bin: Found
Video: Loading shader (type: 1, flags: 103)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000103.bin: Found
Video: Loading shader (type: 1, flags: 1b)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_0000001b.bin: Found
Video: Loading shader (type: 1, flags: 7b)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_0000007b.bin: Found
Video: Loading shader (type: 1, flags: 17b)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_0000017b.bin: Found
Video: Loading shader (type: 1, flags: a3)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000000a3.bin: Found
Video: Loading shader (type: 1, flags: 100bb)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000100bb.bin: Found
Video: Loading shader (type: 1, flags: 201a1)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000201a1.bin: Found
Video: Loading shader (type: 1, flags: 301a1)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000301a1.bin: Found
Video: Loading shader (type: 1, flags: 401a1)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000401a1.bin: Found
Video: Loading shader (type: 1, flags: 5)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000005.bin: Found
Video: Loading shader (type: 1, flags: 25)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000025.bin: Found
Video: Loading shader (type: 1, flags: 125)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_00000125.bin: Found
Video: Loading shader (type: 1, flags: a5)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000000a5.bin: Found
Video: Loading shader (type: 1, flags: 301a5)
Loading: shaders/model_vs.glsl: Found
Loading: shaders/lights_vs.glsl: Found
Loading: shaders/effects_vs.glsl: Found
Loading: shaders/model_fs.glsl: Found
Loading: shaders/cache/00000001_000301a5.bin: Found
Video: Loading shader (type: 2, flags: 0)
Loading: shaders/screen_vs.glsl: Found
Loading: shaders/screen_fs.glsl: Found
Loading: shaders/cache/00000002_00000000.bin: Found
Video: Loading shader (type: 2, flags: 100)
Loading: shaders/screen_vs.glsl: Found
Loading: shaders/screen_fs.glsl: Found
Loading: shaders/cache/00000002_00000100.bin: Found
Video: Done
Input: 1 GameController mappings added
Input: Found controller at slot 0: Android Accelerometer (GUID: 416e64726f696420416363656c65726f)
Loading: cars/misc/parameters.txt: Not Found
Loading: profiles/pyves/profile.ini: Found
Loading: profiles/pyves/profile.ini: Found
Loading: levels/stunts/stunts.fob: Found
Loading: profiles/pyves/nhood1.level: Found
Loading: profiles/pyves/market2.level: Found
Loading: profiles/pyves/muse2.level: Found
Loading: profiles/pyves/garden1.level: Found
Loading: profiles/pyves/roof.level: Found
Loading: profiles/pyves/toylite.level: Found
Loading: profiles/pyves/wild_west1.level: Found
Loading: profiles/pyves/toy2.level: Found
Loading: profiles/pyves/nhood2.level: Found
Loading: profiles/pyves/ship1.level: Found
Loading: profiles/pyves/muse1.level: Found
Loading: profiles/pyves/market1.level: Found
Loading: profiles/pyves/wild_west2.level: Found
Loading: profiles/pyves/ship2.level: Found
Loading: profiles/pyves/stunts.stunt: Found
Loading: strings/english.txt: Found
Loading: gfx/font.bmo: Found
Loading: gfx/font.bmn: Not Found
Loading: gfx/font.bmp: Found
Loading: gfx/font.bmq: Not Found
Loading: gfx/spru.bmo: Not Found
Loading: gfx/spru.bmp: Found
Loading: gfx/spru.bmq: Not Found
Loading: gfx/overlay.bmo: Found
Loading: gfx/overlay.bmn: Not Found
Loading: gfx/overlay.bmp: Found
Loading: gfx/overlay.bmq: Not Found
Loading: gfx/loadinga.bmo: Not Found
Loading: gfx/loadinga.bmp: Found
Loading: gfx/loadinga.bmq: Found
Loading: gfx/loadinga.bmr: Not Found
Loading: gfx/loadingb.bmo: Not Found
Loading: gfx/loadingb.bmp: Found
Loading: gfx/loadingb.bmq: Found
Loading: gfx/loadingb.bmr: Not Found
Loading: gfx/loadingc.bmo: Not Found
Loading: gfx/loadingc.bmp: Found
Loading: gfx/loadingc.bmq: Found
Loading: gfx/loadingc.bmr: Not Found
Loading: gfx/devlogo1a.bmo: Not Found
Loading: gfx/devlogo1a.bmp: Found
Loading: gfx/devlogo1a.bmq: Not Found
Loading: gfx/devlogo1b.bmo: Not Found
Loading: gfx/devlogo1b.bmp: Found
Loading: gfx/devlogo1b.bmq: Not Found
Loading: gfx/devlogo1c.bmo: Not Found
Loading: gfx/devlogo1c.bmp: Found
Loading: gfx/devlogo1c.bmq: Not Found
Loading: gfx/devlogo2a.bmo: Not Found
Loading: gfx/devlogo2a.bmp: Found
Loading: gfx/devlogo2a.bmq: Not Found
Loading: gfx/devlogo2b.bmo: Not Found
Loading: gfx/devlogo2b.bmp: Found
Loading: gfx/devlogo2b.bmq: Not Found
Loading: gfx/devlogo2c.bmo: Not Found
Loading: gfx/devlogo2c.bmp: Found
Loading: gfx/devlogo2c.bmq: Not Found
Loading: gfx/font.bmo: Found
Loading: gfx/font.bmn: Not Found
Loading: gfx/font.bmp: Found
Loading: gfx/font.bmq: Not Found
Loading: gfx/spru.bmo: Not Found
Loading: gfx/spru.bmp: Found
Loading: gfx/spru.bmq: Not Found
Loading: gfx/overlay.bmo: Found
Loading: gfx/overlay.bmn: Not Found
Loading: gfx/overlay.bmp: Found
Loading: gfx/overlay.bmq: Not Found
Loading: gfx/loadinga.bmo: Not Found
Loading: gfx/loadinga.bmp: Found
Loading: gfx/loadinga.bmq: Found
Loading: gfx/loadinga.bmr: Not Found
Loading: gfx/loadingb.bmo: Not Found
Loading: gfx/loadingb.bmp: Found
Loading: gfx/loadingb.bmq: Found
Loading: gfx/loadingb.bmr: Not Found
Loading: gfx/loadingc.bmo: Not Found
Loading: gfx/loadingc.bmp: Found
Loading: gfx/loadingc.bmq: Found
Loading: gfx/loadingc.bmr: Not Found
Loading: profiles/pyves/intro.level: Not Found
Loading: levels/intro/intro.pan: Not Found
Loading: levels/intro/intro.inf: Found
Loading: gfx/fxpage1.bmo: Not Found
Loading: gfx/fxpage1.bmp: Found
Loading: gfx/fxpage1.bmq: Not Found
Loading: gfx/fxpage2.bmo: Not Found
Loading: gfx/fxpage2.bmp: Found
Loading: gfx/fxpage2.bmq: Not Found
Loading: gfx/fxpage3.bmo: Not Found
Loading: gfx/fxpage3.bmp: Found
Loading: gfx/fxpage3.bmq: Not Found
Loading: gfx/envstill.bmo: Not Found
Loading: gfx/envstill.bmp: Found
Loading: gfx/envstill.bmq: Found
Loading: gfx/envstill.bmr: Not Found
Loading: gfx/envroll.bmo: Not Found
Loading: gfx/envroll.bmp: Found
Loading: gfx/envroll.bmq: Found
Loading: gfx/envroll.bmr: Not Found
Loading: cars/misc/shadow.bmo: Not Found
Loading: cars/misc/shadow.bmp: Found
Loading: cars/misc/shadow.bmq: Found
Loading: cars/misc/shadow.bmr: Not Found
Loading: levels/intro/introa.bmo: Not Found
Loading: levels/intro/introa.bmp: Found
Loading: levels/intro/introa.bmq: Not Found
Loading: levels/intro/introb.bmo: Not Found
Loading: levels/intro/introb.bmp: Found
Loading: levels/intro/introb.bmq: Not Found
Loading: levels/intro/introc.bmo: Not Found
Loading: levels/intro/introc.bmp: Not Found
Loading: levels/intro/introd.bmo: Not Found
Loading: levels/intro/introd.bmp: Not Found
Loading: levels/intro/introe.bmo: Not Found
Loading: levels/intro/introe.bmp: Not Found
Loading: levels/intro/introf.bmo: Not Found
Loading: levels/intro/introf.bmp: Not Found
Loading: levels/intro/introg.bmo: Not Found
Loading: levels/intro/introg.bmp: Not Found
Loading: levels/intro/introh.bmo: Not Found
Loading: levels/intro/introh.bmp: Not Found
Loading: levels/intro/introi.bmo: Not Found
Loading: levels/intro/introi.bmp: Not Found
Loading: levels/intro/introj.bmo: Not Found
Loading: levels/intro/introj.bmp: Not Found
Loading: levels/intro/intro.w: Found
Loading: levels/intro/intro.vis: Found
World: Cubes 4 Buffers 4 Groups 4
Loading: levels/intro/intro.rim: Found
Loading: levels/intro/intro.fin: Found
Loading: levels/intro/intro.ncp: Found
Loading: levels/intro/intro.lit: Found
Loading: levels/intro/intro.taz: Not Found
Loading: levels/intro/intro.fan: Not Found
Loading: levels/intro/intro.fld: Not Found
Loading: levels/intro/intro.pan: Not Found
Loading: levels/intro/intro.cam: Not Found
Loading: models/go3.m: Found
Loading: models/go2.m: Found
Loading: models/go1.m: Found
Loading: models/gogo.m: Found
Loading: models/drum.m: Found
Loading: models/mt.bin: Found
AL: Existing OpenAL error in LoadSfx(): 0
Loading: levels/intro/intro.tri: Not Found
Loading: models/pickup.m: Found
Loading: models/pickup.hul: Not Found
Loading: models/pickup.ncp: Not Found
Loading: models/firework.m: Found
Loading: models/firework.hul: Found
Loading: models/wbomb.m: Found
Loading: models/wbomb.hul: Not Found
Loading: models/wbomb.ncp: Not Found
Loading: models/ball.m: Found
Loading: models/ball.hul: Not Found
Loading: models/ball.ncp: Not Found
Loading: models/ball.m: Found
Loading: models/ball.hul: Not Found
Loading: models/ball.ncp: Not Found
Loading: models/star.m: Found
Loading: models/star.hul: Not Found
Loading: models/star.ncp: Not Found
Loading: levels/intro/intro.fob: Not Found
Loading: levels/intro/properties.txt: Not Found
Loading: cars/ufo/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "50.000000"
Loading: cars/ufo/car.bmo: Not Found
Loading: cars/ufo/car.bmp: Found
Loading: cars/ufo/car.bmq: Found
Loading: cars/ufo/car.bmr: Not Found
Loading: cars/ufo/shadow.bmo: Not Found
Loading: cars/ufo/shadow.bmp: Found
Loading: cars/ufo/shadow.bmq: Found
Loading: cars/ufo/shadow.bmr: Not Found
Loading: cars/ufo/body.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/ufo/hull.hul: Found
Loading: cars/rc/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "90.000000"
Loading: cars/rc/car.bmo: Not Found
Loading: cars/rc/car.bmp: Found
Loading: cars/rc/car.bmq: Found
Loading: cars/rc/car.bmr: Not Found
Loading: cars/rc/body.prm: Found
Loading: cars/rc/wheelfl.prm: Found
Loading: cars/rc/wheelfr.prm: Found
Loading: cars/rc/wheelbl.prm: Found
Loading: cars/rc/wheelbr.prm: Found
Loading: cars/rc/spring.prm: Found
Loading: cars/rc/axle.prm: Found
Loading: cars/rc/pin.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/rc/hull.hul: Found
Loading: cars/flag/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "50.000000"
Loading: cars/flag/car.bmo: Not Found
Loading: cars/flag/car.bmp: Found
Loading: cars/flag/car.bmq: Found
Loading: cars/flag/car.bmr: Not Found
Loading: cars/flag/body.prm: Found
Loading: cars/flag/wheelfl.prm: Found
Loading: cars/flag/wheelfr.prm: Found
Loading: cars/flag/wheelbl.prm: Found
Loading: cars/flag/wheelbr.prm: Found
Loading: cars/flag/spring.prm: Found
Loading: cars/flag/axle.prm: Found
Loading: cars/flag/pin.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/flag/hull.hul: Found
Loading: models/probe.m: Found
Loading: models/probe.hul: Found
Loading: levels/intro/ufopath.pth: Found
Loading: gfx/font.bmo: Found
Loading: gfx/font.bmn: Not Found
Loading: gfx/font.bmp: Found
Loading: gfx/font.bmq: Not Found
Loading: gfx/spru.bmo: Not Found
Loading: gfx/spru.bmp: Found
Loading: gfx/spru.bmq: Not Found
Loading: gfx/overlay.bmo: Found
Loading: gfx/overlay.bmn: Not Found
Loading: gfx/overlay.bmp: Found
Loading: gfx/overlay.bmq: Not Found
Loading: gfx/loadinga.bmo: Not Found
Loading: gfx/loadinga.bmp: Found
Loading: gfx/loadinga.bmq: Found
Loading: gfx/loadinga.bmr: Not Found
Loading: gfx/loadingb.bmo: Not Found
Loading: gfx/loadingb.bmp: Found
Loading: gfx/loadingb.bmq: Found
Loading: gfx/loadingb.bmr: Not Found
Loading: gfx/loadingc.bmo: Not Found
Loading: gfx/loadingc.bmp: Found
Loading: gfx/loadingc.bmq: Found
Loading: gfx/loadingc.bmr: Not Found
Loading: profiles/pyves/frontend.level: Not Found
Loading: levels/frontend/frontend.pan: Found
Loading: levels/frontend/frontend.inf: Found
Loading: gfx/fxpage1.bmo: Not Found
Loading: gfx/fxpage1.bmp: Found
Loading: gfx/fxpage1.bmq: Not Found
Loading: gfx/fxpage2.bmo: Not Found
Loading: gfx/fxpage2.bmp: Found
Loading: gfx/fxpage2.bmq: Not Found
Loading: gfx/fxpage3.bmo: Not Found
Loading: gfx/fxpage3.bmp: Found
Loading: gfx/fxpage3.bmq: Not Found
Loading: gfx/envfront.bmo: Not Found
Loading: gfx/envfront.bmp: Found
Loading: gfx/envfront.bmq: Found
Loading: gfx/envfront.bmr: Not Found
Loading: gfx/envroll.bmo: Not Found
Loading: gfx/envroll.bmp: Found
Loading: gfx/envroll.bmq: Found
Loading: gfx/envroll.bmr: Not Found
Loading: cars/misc/shadow.bmo: Not Found
Loading: cars/misc/shadow.bmp: Found
Loading: cars/misc/shadow.bmq: Found
Loading: cars/misc/shadow.bmr: Not Found
Loading: levels/frontend/frontenda.bmo: Not Found
Loading: levels/frontend/frontenda.bmp: Found
Loading: levels/frontend/frontenda.bmq: Found
Loading: levels/frontend/frontenda.bmr: Not Found
Loading: levels/frontend/frontendb.bmo: Not Found
Loading: levels/frontend/frontendb.bmp: Found
Loading: levels/frontend/frontendb.bmq: Found
Loading: levels/frontend/frontendb.bmr: Not Found
Loading: levels/frontend/frontendc.bmo: Not Found
Loading: levels/frontend/frontendc.bmp: Found
Loading: levels/frontend/frontendc.bmq: Found
Loading: levels/frontend/frontendc.bmr: Not Found
Loading: levels/frontend/frontendd.bmo: Not Found
Loading: levels/frontend/frontendd.bmp: Found
Loading: levels/frontend/frontendd.bmq: Found
Loading: levels/frontend/frontendd.bmr: Not Found
Loading: levels/frontend/frontende.bmo: Not Found
Loading: levels/frontend/frontende.bmp: Found
Loading: levels/frontend/frontende.bmq: Found
Loading: levels/frontend/frontende.bmr: Not Found
Loading: levels/frontend/frontendf.bmo: Not Found
Loading: levels/frontend/frontendf.bmp: Found
Loading: levels/frontend/frontendf.bmq: Found
Loading: levels/frontend/frontendf.bmr: Not Found
Loading: levels/frontend/frontendg.bmo: Not Found
Loading: levels/frontend/frontendg.bmp: Found
Loading: levels/frontend/frontendg.bmq: Found
Loading: levels/frontend/frontendg.bmr: Not Found
Loading: levels/frontend/frontendh.bmo: Not Found
Loading: levels/frontend/frontendh.bmp: Found
Loading: levels/frontend/frontendh.bmq: Found
Loading: levels/frontend/frontendh.bmr: Not Found
Loading: levels/frontend/frontendi.bmo: Not Found
Loading: levels/frontend/frontendi.bmp: Found
Loading: levels/frontend/frontendi.bmq: Found
Loading: levels/frontend/frontendi.bmr: Not Found
Loading: levels/frontend/frontendj.bmo: Not Found
Loading: levels/frontend/frontendj.bmp: Not Found
Loading: levels/frontend/frontend.w: Found
Loading: levels/frontend/frontend.vis: Found
World: Cubes 235 Buffers 316 Groups 316
Loading: levels/frontend/frontend.rim: Found
Loading: levels/frontend/bballbox.prm: Found
Loading: levels/frontend/bballbox.ncp: Not Found
Loading: levels/frontend/box01.prm: Found
Loading: levels/frontend/box01.ncp: Not Found
Loading: levels/frontend/box02.prm: Found
Loading: levels/frontend/box02.ncp: Not Found
Loading: levels/frontend/box03.prm: Found
Loading: levels/frontend/box03.ncp: Not Found
Loading: levels/frontend/box04.prm: Found
Loading: levels/frontend/box04.ncp: Not Found
Loading: levels/frontend/box05.prm: Found
Loading: levels/frontend/box05.ncp: Not Found
Loading: levels/frontend/box5.prm: Found
Loading: levels/frontend/box5.ncp: Not Found
Loading: levels/frontend/chicks.prm: Found
Loading: levels/frontend/chicks.ncp: Not Found
Loading: levels/frontend/clockcase.prm: Found
Loading: levels/frontend/clockcase.ncp: Not Found
Loading: levels/frontend/cup01.prm: Found
Loading: levels/frontend/cup01.ncp: Not Found
Loading: levels/frontend/helbladebig.prm: Found
Loading: levels/frontend/helbladebig.ncp: Not Found
Loading: levels/frontend/helbladesmall.prm: Found
Loading: levels/frontend/helbladesmall.ncp: Not Found
Loading: levels/frontend/hellbody.prm: Found
Loading: levels/frontend/hellbody.ncp: Not Found
Loading: levels/frontend/hellsb.prm: Found
Loading: levels/frontend/hellsb.ncp: Not Found
Loading: levels/frontend/largemagstand.prm: Found
Loading: levels/frontend/largemagstand.ncp: Not Found
Loading: levels/frontend/light.prm: Found
Loading: levels/frontend/light.ncp: Not Found
Loading: levels/frontend/magstand.prm: Found
Loading: levels/frontend/magstand.ncp: Not Found
Loading: levels/frontend/pangacard.prm: Found
Loading: levels/frontend/pangacard.ncp: Found
Loading: levels/frontend/plain.prm: Found
Loading: levels/frontend/plain.ncp: Not Found
Loading: levels/frontend/podium.prm: Found
Loading: levels/frontend/podium.ncp: Found
Loading: levels/frontend/posterstand.prm: Found
Loading: levels/frontend/posterstand.ncp: Not Found
Loading: levels/frontend/posterstand2.prm: Found
Loading: levels/frontend/posterstand2.ncp: Not Found
Loading: levels/frontend/salebin.prm: Found
Loading: levels/frontend/salebin.ncp: Not Found
Loading: levels/frontend/smallscreen.prm: Found
Loading: levels/frontend/smallscreen.ncp: Not Found
Loading: levels/frontend/track.prm: Found
Loading: levels/frontend/track.ncp: Not Found
Loading: levels/frontend/tvstand.prm: Found
Loading: levels/frontend/tvstand.ncp: Not Found
Loading: levels/frontend/ufostand.prm: Found
Loading: levels/frontend/ufostand.ncp: Not Found
Loading: levels/frontend/frontend.fin: Found
Loading: levels/frontend/frontend.ncp: Found
Loading: levels/frontend/frontend.lit: Found
Loading: levels/frontend/frontend.taz: Found
Loading: levels/frontend/frontend.fan: Found
Loading: levels/frontend/frontend.fld: Found
Loading: levels/frontend/frontend.pan: Found
Loading: levels/frontend/frontend.cam: Found
Loading: models/go3.m: Found
Loading: models/go2.m: Found
Loading: models/go1.m: Found
Loading: models/gogo.m: Found
Loading: models/drum.m: Found
Loading: models/mt.bin: Found
AL: Existing OpenAL error in LoadSfx(): 0
Loading: levels/frontend/frontend.tri: Found
Loading: models/pickup.m: Found
Loading: models/pickup.hul: Not Found
Loading: models/pickup.ncp: Not Found
Loading: models/firework.m: Found
Loading: models/firework.hul: Found
Loading: models/wbomb.m: Found
Loading: models/wbomb.hul: Not Found
Loading: models/wbomb.ncp: Not Found
Loading: models/ball.m: Found
Loading: models/ball.hul: Not Found
Loading: models/ball.ncp: Not Found
Loading: models/ball.m: Found
Loading: models/ball.hul: Not Found
Loading: models/ball.ncp: Not Found
Loading: models/star.m: Found
Loading: models/star.hul: Not Found
Loading: models/star.ncp: Not Found
Loading: levels/frontend/frontend.fob: Found
Loading: levels/frontend/smallscreen.m: Found
Loading: levels/frontend/smallscreen.hul: Not Found
Loading: levels/frontend/smallscreen.ncp: Not Found
Loading: levels/frontend/namestand.m: Found
Loading: levels/frontend/namestand.hul: Not Found
Loading: levels/frontend/namestand.ncp: Not Found
Loading: levels/frontend/namewheel.m: Found
Loading: levels/frontend/namewheel.hul: Not Found
Loading: levels/frontend/namewheel.ncp: Not Found
Loading: levels/frontend/carbox.m: Found
Loading: levels/frontend/carbox.hul: Not Found
Loading: levels/frontend/carbox.ncp: Not Found
Loading: levels/frontend/plainbox.m: Found
Loading: levels/frontend/plainbox.hul: Not Found
Loading: levels/frontend/plainbox.ncp: Not Found
Loading: models/cone.m: Found
Loading: models/cone.hul: Found
Loading: levels/frontend/bigscreen.m: Found
Loading: levels/frontend/bigscreen.hul: Not Found
Loading: levels/frontend/bigscreen.ncp: Not Found
Loading: gfx/toylite.bmo: Not Found
Loading: gfx/toylite.bmp: Found
Loading: gfx/toylite.bmq: Found
Loading: gfx/toylite.bmr: Not Found
Loading: levels/frontend/clockbody.m: Found
Loading: levels/frontend/clockbody.hul: Not Found
Loading: levels/frontend/clockbody.ncp: Not Found
Loading: levels/frontend/clockhandsmall.m: Found
Loading: levels/frontend/clockhandsmall.hul: Not Found
Loading: levels/frontend/clockhandsmall.ncp: Not Found
Loading: levels/frontend/clockhandlarge.m: Found
Loading: levels/frontend/clockhandlarge.hul: Not Found
Loading: levels/frontend/clockhandlarge.ncp: Not Found
Loading: levels/frontend/clockdisc.m: Found
Loading: levels/frontend/clockdisc.hul: Not Found
Loading: levels/frontend/clockdisc.ncp: Not Found
Loading: levels/frontend/cup04.m: Found
Loading: levels/frontend/cup04.hul: Not Found
Loading: levels/frontend/cup04.ncp: Not Found
Loading: levels/frontend/cup02.m: Found
Loading: levels/frontend/cup02.hul: Not Found
Loading: levels/frontend/cup02.ncp: Not Found
Loading: levels/frontend/cup01.m: Found
Loading: levels/frontend/cup01.hul: Not Found
Loading: levels/frontend/cup01.ncp: Not Found
Loading: levels/frontend/cup03.m: Found
Loading: levels/frontend/cup03.hul: Not Found
Loading: levels/frontend/cup03.ncp: Not Found
Loading: levels/frontend/properties.txt: Not Found
Loading: cars/wincar/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "50.000000"
Loading: cars/wincar/car.bmo: Not Found
Loading: cars/wincar/car.bmp: Found
Loading: cars/wincar/car.bmq: Found
Loading: cars/wincar/car.bmr: Not Found
Loading: cars/wincar/shadow.bmo: Not Found
Loading: cars/wincar/shadow.bmp: Found
Loading: cars/wincar/shadow.bmq: Found
Loading: cars/wincar/shadow.bmr: Not Found
Loading: cars/wincar/body.prm: Found
Loading: cars/wincar/wheelfl.prm: Found
Loading: cars/wincar/wheelfr.prm: Found
Loading: cars/wincar/wheelbl.prm: Found
Loading: cars/wincar/wheelbr.prm: Found
Loading: cars/wincar/key.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/wincar/hull.hul: Found
Loading: cars/wincar2/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "50.000000"
Loading: cars/wincar2/car.bmo: Not Found
Loading: cars/wincar2/car.bmp: Found
Loading: cars/wincar2/car.bmq: Found
Loading: cars/wincar2/car.bmr: Not Found
Loading: cars/wincar2/shadow.bmo: Not Found
Loading: cars/wincar2/shadow.bmp: Found
Loading: cars/wincar2/shadow.bmq: Found
Loading: cars/wincar2/shadow.bmr: Not Found
Loading: cars/wincar2/body.prm: Found
Loading: cars/wincar2/wheelfl.prm: Found
Loading: cars/wincar2/wheelfr.prm: Found
Loading: cars/wincar2/wheelbl.prm: Found
Loading: cars/wincar2/wheelbr.prm: Found
Loading: cars/wincar2/key.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/wincar2/hull.hul: Found
Loading: cars/wincar3/parameters.txt: Found
Warning: Unrecognised word: "Handling"
Warning: Unrecognised word: "50.000000"
Loading: cars/wincar3/car.bmo: Not Found
Loading: cars/wincar3/car.bmp: Found
Loading: cars/wincar3/car.bmq: Found
Loading: cars/wincar3/car.bmr: Not Found
Loading: cars/wincar3/shadow.bmo: Not Found
Loading: cars/wincar3/shadow.bmp: Found
Loading: cars/wincar3/shadow.bmq: Found
Loading: cars/wincar3/shadow.bmr: Not Found
Loading: cars/wincar3/body.prm: Found
Loading: cars/wincar3/wheelfl.prm: Found
Loading: cars/wincar3/wheelfr.prm: Found
Loading: cars/wincar3/wheelbl.prm: Found
Loading: cars/wincar3/wheelbr.prm: Found
Loading: cars/wincar3/key.prm: Found
Loading: cars/misc/aerial.m: Found
Loading: cars/misc/aerialt.m: Found
Loading: cars/wincar3/hull.hul: Found
Loading: levels/frontend/carbox1.bmo: Not Found
Loading: levels/frontend/carbox1.bmp: Found
Loading: levels/frontend/carbox1.bmq: Found
Loading: levels/frontend/carbox1.bmr: Not Found
Loading: levels/frontend/carbox2.bmo: Not Found
Loading: levels/frontend/carbox2.bmp: Found
Loading: levels/frontend/carbox2.bmq: Found
Loading: levels/frontend/carbox2.bmr: Not Found
Loading: levels/frontend/carbox3.bmo: Not Found
Loading: levels/frontend/carbox3.bmp: Found
Loading: levels/frontend/carbox3.bmq: Found
Loading: levels/frontend/carbox3.bmr: Not Found
Loading: profiles/rvgl.ini: Found
Loading: profiles/pyves/profile.ini: Found
Loading: profiles/pyves/nhood1.level: Found
Loading: profiles/pyves/market2.level: Found
Loading: profiles/pyves/muse2.level: Found
Loading: profiles/pyves/garden1.level: Found
Loading: profiles/pyves/roof.level: Found
Loading: profiles/pyves/toylite.level: Found
Loading: profiles/pyves/wild_west1.level: Found
Loading: profiles/pyves/toy2.level: Found
Loading: profiles/pyves/nhood2.level: Found
Loading: profiles/pyves/ship1.level: Found
Loading: profiles/pyves/muse1.level: Found
Loading: profiles/pyves/market1.level: Found
Loading: profiles/pyves/wild_west2.level: Found
Loading: profiles/pyves/ship2.level: Found
Loading: profiles/pyves/stunts.stunt: Found

I tested this on my GPD XD Plus and it works great. Loads up faster than my Linux PC. Multiplayer also works good with rvgl on Linux over LAN. I have yet to test with other people online, but I have some friends who may help with that sometime soon. It also seems to work with the custom cars and tracks that we use.

A few issues I have though. The controller doesn't work with the menus at all and hitting backspace on the virtual keyboard keeps backspacing until you close out of the app and re-open it. Also the game sound/music glitches out if you exit out of the demo. Have to swipe the game away in recents to fix it.

Other than that, great job on the port! I am glad to finally have a portable version of rvgl.

Edit: Just noticed another random bug. The joysticks sometimes don't get picked up. Closing out of the app and re-opening seems to make them work again. They only work with the Xbox layout. The PS3 layout registers them as buttons.

Edit 2: Just did some testing with a friend of mine. Online multiplayer works well and seems stable. Couple other issues though. The hostname entry box makes what you are typing disappear if it is a long hostname. It seems to still work though. Also there is no horn button on the touch screen.

The Android version is updated to 18.0428a. Download it from the release post.

As of this release, there is a single apk that provides both the shader-based and legacy rendering modes. The shader-based renderer is enabled by default, so 's' users should simply be able to update to the new build. When the shader mode is active, you should see the build number display in the main menu turn yellow.

A few issues I have though. The controller doesn't work with the menus at all and hitting backspace on the virtual keyboard keeps backspacing until you close out of the app and re-open it. Also the game sound/music glitches out if you exit out of the demo. Have to swipe the game away in recents to fix it.

Only touch inputs are supported for the menus on Android, this is a known limitation for now. I've heard about the backspacing glitch before, but I'm unable to reproduce it on my Android 4.1 device. I'll look more into it though.

There's a bug on the latest version on android where it won't let me in. It would give me an error about a shader being too long and there is no way to access rvgl.ini. I have all the assets downloaded and made an RVGL folder in my device. It used tp work in previous versions. And the AVG Antivirus detects it as a virus. If you want a pic of the long shader. Just ask me. I'm also new here

There's a bug on the latest version on android where it won't let me in. It would give me an error about a shader being too long and there is no way to access rvgl.ini. I have all the assets downloaded and made an RVGL folder in my device. It used tp work in previous versions. And the AVG Antivirus detects it as a virus. If you want a pic of the long shader. Just ask me. I'm also new here

The latest RVGL alpha on Android enables the shader-based renderer by default. The previous alphas were using the legacy renderer and it appears that worked fine for you. You can edit your rvgl.ini and disable the shader renderer, but it's better that we try and get shader mode working. I'll need to see your profiles/re-volt_log.txt file from the phone.