Rusty Vangers clone
Branch: master
Clone or download
bors and suhr Merge #66
66: RON and `--release` everywhere r=kvark a=suhr

Co-authored-by: Сухарик <>
Latest commit cfa4ad1 Jan 7, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Fix item scale and object palette Jan 6, 2019
config Brought back the old ray tracer as an option Jan 4, 2019
data/shader Enable flood sampling Jan 6, 2019
src Merge #64 Jan 6, 2019
tests First bits of the object loading boilerplate Dec 11, 2018
.gitignore Completely remove the original t_Table Dec 24, 2018
Cargo.lock Preparatory changes for the new raytracing Jan 2, 2019
LICENSE Initial commit Jun 8, 2016 RON and no `--release` Jan 7, 2019
bors.toml Bors-ng support Dec 27, 2017
rustfmt.toml Another Rust format pass, including binaries sources now Dec 20, 2017


Build Status Gitter

Vangers is a legendary game featuring unique gameplay and technical innovation. The idea of this project is to replicate the old look and behavior, but with native hardware acceleration for the graphics.

You need the original game in order to try out vange-rs. The path to resources needs to be set in config/settings.ron.


The project is structured to provide multiple binaries. road binary is for the main game, which includes mechouses, items, and the level. Note: leaving the level="" empty in the config would load a flat boring debug level.

git clone
cd vange-rs
cp config/settings.template.ron config/settings.ron
vi config/settings.ron # set the game path
cargo run --bin road


  • WSAD: movement in the game, rotating the camera around the car during the pause
  • P: enter/exit pause for debugging
  • R: reset forces and orientation of the mechous
  • <>: step physics frame back/forward during the pause
  • Esc: exit


Mechous viewer/debugger

car binary allows to see the mechos with items selected by the configuration. It also shows the debug collision info.

cargo run --bin car


  • WSAD: rotate the camera
  • Esc: exit

mechous debugging

3D model viewer

model binary loads a selected "m3d" from games resource to observe.

cargo run --bin model resource/m3d/items/i21.m3d


  • AD: rotate the camera
  • Esc: exit

item view

Level viewer

level binary allows to fly over a level with free camera. Useful for debugging the level rendering shader.

cargo run --bin level


  • WSAD: move the camera along X-Y plane
  • ZX: move the camera along Z plane
  • Alt + WSAD: rotate the camera
  • Esc: exit

level view


convert binary is a command line utility for converting the game data into formats that are more interoperable. Basically you provide 2 arguments as fully-qualified file names (can be relative, but relative to the current directory - the settings paths are not used here), and the converter figures out the way to convert one into another. Note that only part after "--" makes sense when running a standalone binary.

Note: the destination path is always to a file that gets created or overwritten!

Model (M3D) <-> OBJ+RON

cargo run --bin convert -- game/resource/m3d/items/i21.m3d my_dir/model.ron

The body, wheels, and debris are saved as separate Wavefront OBJ files near the target RON, which contains model meta-data.

You can change the OBJ files using popular mesh editors, save them, and even manually tweak RON, after which you may want to generate a new M3D file:

cargo run --bin convert -- my_dir/model.ron game/resource/m3d/items/i21-new.m3d

modified model


cargo run --bin convert -- game/thechain/fostral/world.ini my_dir/fostral.ron

The RON file contains the size and names of two images: heights and materials. The former conains the following data:

  • R stands for the bottom layer height
  • G stands for the top layer height
  • B stands for the delta between the bottom and the ground above

The materials image only uses two channels:

  • R contains the index of the bottom layer material in its higher 4 bits. The lower 4 bits are ignored.
  • G contains the index of the top layer

You can change the images in a photo editor, and then we can import it as a non-compressed level:

cargo run --bin convert -- my_dir/fostral.ron game/thechain/fostral/output.vmp

modified level

Note: one can easily turn a non-compressed level file (VMP) into a pseudo-compressed one (VMC) by prepending the unzipped etc/ file.


Palette files are really simple one-dimensional arrays of 256 colors. They ca be converted to PNG with the following command:

cargo run --bin convert -- game/thechain/fostral/harmony.pal my_dir/harmony.png

The image can be edited and then converted back to a palette:

cargo run --bin convert -- my_dir/harmony.png my_dir/harmony-new.pal


The game uses gfx-rs pre-LL for graphics and glutin for context creation.

The level is drawn in a single full-screen draw call with a bit of ray tracing magic. There is also an experimental tessellation-based renderer, but neither produce results of sufficient quality.