Skip to content
Robot War Engine - Real-time strategy game engine compatible with Total Annihilation
Branch: master
Clone or download
Latest commit 1340337 Jun 15, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
proto Support build queues May 19, 2019
shaders Draw resource produced and consumed text in colour Apr 19, 2019
src Check that build panel definition exists before using it Jun 15, 2019
test Don't select units that aren't inside the bandbox Jun 15, 2019
.clang-format Reformat code with clang-format 6 Apr 14, 2018
.gitignore Add IDE settings directories to .gitignore Aug 11, 2018
.gitmodules Revert "Add CNL library" Apr 21, 2019
.travis.yml Use `npm ci` to install node modules May 24, 2019
CMakeLists.txt Extract functions for getting from collections with options Jun 8, 2019
LICENSE Add license Aug 20, 2017 Update MSVC build instructions to avoid installing May 30, 2019
appveyor.bat Use `npm ci` to install node modules May 24, 2019
appveyor.yml Use `npm ci` to install node modules May 24, 2019 Support specifying network players Jun 15, 2018 Add a script to reformat CMakeLists.txt Jan 23, 2018 Add script for fixing include lines Mar 6, 2018 Add script to remove empty cpp files May 26, 2018
travis.bash Print node, npm and cmake version info during build May 24, 2019

Robot War Engine

An open-source real-time strategy game engine that is highly compatible with Total Annihilation data files.

Build Status

AppVeyor build status Travis CI build Status


There is currently no stable release. If you would like try out the latest, bleeding edge version, the latest zip file and/or installer is available at:

To find the files, click "Environment: RWE_COMPILER=MSYS; Configuration: Release", then "Artifacts".

RWE is currently only available on Windows, however the code is also built and tested on Linux. Official Linux binaries will be available when the project reaches a stable version.

Source code is hosted on Github:

How to Install

  1. Create the folder %AppData%/RWE/Data and copy your TA data files to it (.hpi, .ufo, rev31.gp3, etc.)
  2. Run rwe.exe (if you used the installer, RWE will be in your start menu items)

How to Play


  • Scroll through the map using the arrow keys (UP, DOWN, LEFT, RIGHT).


  • Left click to select units.
  • Right click to move units to the clicked area on the map.
  • To deselect units, left click on the map itself, off the unit.
  • To attack, with the unit selected, press A and select where to attack.
  • To stop units attacking, select them and press S.


  • To show the collision grid, press F9.
  • To show unit pathfinding, press F10. Unit pathfinding will only display when a unit is moving/has arrived at their destination.
  • To show passable/impassible terrain for units, press F11 (Be sure to have the unit selected for this to display!). This will show where units can travel according to their movement class.

Development Status

Progress updates are posted to a thread on the TAUniverse forums, usually once a week. See:

How to Build

First fetch the source code:

git clone
cd rwe
git submodule update --init --recursive

Then follow the instructions for your platform.

Windows with Visual Studio

Get the RWE MSVC libraries bundle. A python 3 script is provided that will do this for you:

cd /path/to/rwe
python ./

Alternatively you can double-click the script in Explorer and it should run that way.

If the script completes successfully you should have a libs/_msvc folder containing various library files.

Now open Visual Studio 2017, go to File > Open > CMake... and select the CMakeLists.txt in the rwe folder. Choose x64-Debug in the build configuration dropdown. Finally, go to CMake > Debug from Build Folder > rwe.exe to build and launch RWE.

Windows with MSYS2

Download and install MSYS2 (

Install the required packages:

pacman -S make unzip mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain
pacman -S \
  mingw-w64-x86_64-boost \
  mingw-w64-x86_64-SDL2 \
  mingw-w64-x86_64-SDL2_image \
  mingw-w64-x86_64-SDL2_mixer \
  mingw-w64-x86_64-SDL2_net \
  mingw-w64-x86_64-glew \
  mingw-w64-x86_64-smpeg2 \
  mingw-w64-x86_64-zlib \

Open the MSYS MinGW 64-bit terminal.

Compile protobuf:

cd /path/to/rwe
cd libs

Generate and build the project:

cd /path/to/rwe
mkdir build
cd build
cmake .. -G 'Unix Makefiles'

Once built, launch RWE from the top-level directory:

cd /path/to/rwe


Install the necessary packages:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install \
  gcc-7 \
  g++-7 \
  libboost-dev \
  libboost-filesystem-dev \
  libboost-program-options-dev \
  libsdl2-dev \
  libsdl2-image-dev \
  libsdl2-net-dev \
  libsdl2-mixer-dev \
  libglew-dev \
  zlib1g-dev \

Ensure you have a recent version of CMake (3.8+). The one provided by your package manager may not be new enough. Here's how you might install CMake:

wget ''
tar -xf cmake-3.8.2-Linux-x86_64.tar.gz
export CMAKE_MODULE_PATH=$(pwd)/cmake-3.8.2-Linux-x86_64/share/cmake-3.8/Modules
export PATH=$(pwd)/cmake-3.8.2-Linux-x86_64/bin:$PATH

Compile protobuf:

cd /path/to/rwe
cd libs

Now build the code:

cd /path/to/rwe
mkdir build
cd build
export CC=gcc-7 CXX=g++-7
cmake .. -G 'Unix Makefiles'

Install some TA data files (.hpi, .ufo, .ccx, rev31.gp3, etc.) to your local data directory:

mkdir -p $HOME/.rwe/Data
cp /path/to/totala/*.hpi $HOME/.rwe/Data
cp /path/to/totala/*.ufo $HOME/.rwe/Data
cp /path/to/totala/*.ccx $HOME/.rwe/Data
cp /path/to/totala/*.gpf $HOME/.rwe/Data
cp /path/to/totala/*.gp3 $HOME/.rwe/Data

Alternatively you can symlink .rwe/Data to your TA directory.

Finally, launch RWE from the top-level project directory:

cd /path/to/rwe

The Launcher

The launcher application provides the multiplayer lobby for RWE.


Multiplayer is implemented via a separate application rather than by recreating the original in-game multiplayer lobby for the following reasons.

In the future, the goal is to improve the multiplayer lobby experience beyond what is supported by the orignal TA multiplayer lobby. The RWE launcher will eventually support managing installed mods, and will ensure that all players in a multiplayer game have the same mods enabled before RWE is launched. It is impractical to achieve this with an implementation of the original multiplayer lobby inside RWE because RWE is primarily driven by the supplied game data, and this data dictates the design and layout of screens, as well as what screens are even available. An interface that manages mods must exist and work independently of any individual mod's game data. In this context, original TA data is also a mod that may or may not be available.

The engine codebase is already quite large and unwieldy. It is written in C++ for performance, but this does not provide a great development experience. The multiplayer lobby is not performance-critical, and given what we want to accomplish in future, it seems more practical to use a different platform that provides a better developer experience and is more suited to building traditional GUI applications.

Technology Choices

The launcher is an Electron application written in TypeScript with React and Redux.

How to Build and Run for Development

First go to the launcher directory and install the required npm modules.

cd path/to/rwe/launcher
npm install

Then start the webpack dev server

npm run server

The server will start up and stay running until interrupted. It serves the compiled application code during development and provides hot-reloading.

Open another terminal session for the next step, launching the application itself.

For development, you will need to set the RWE_HOME environment variable to a directory containing the rwe and rwe_bridge programs.

export RWE_HOME=/my/installed/rwe/dir

Now you can start the application.

npm start

The application window should now appear.

The launcher expects to talk to a master server that manages the list of publicly available games. In development, the launcher will try to connect to a master server instance running on the local machine. To start a master server instance locally, open another terminal session and run the following:

npm run master-server

The master server will start up and stay running until interrupted. Any running launcher instances should automatically connect to the master server.

How To Package

For releases, the launcher must be bundled up as a complete Electron application. To do this, run the following:

npm run package

The built application will be written out to a subdirectory whose name depends on the target platform. For example, for 64-bit Windows the directory name is rwe-launcher-win32-x64.

You can’t perform that action at this time.