Skip to content
WORK IN PROGRESS Open Source Fantasy Role Playing Game
C C++ Shell
Find file
Latest commit 733b67f Apr 27, 2014 @golightlyb Update

Hero Extant


What is it?

"Hero Extant" is an open source fantasy Role Playing Game (RPG) that uses many simulations to create a believable world.

Imagine if J. R. R. Tolkien and Karl Marx sat down together and created a computer game.

Available for Windows and Linux.

Free Software

You are permitted, free of charge, to use, copy, modify or redistribute this work subject to the conditions found in the COPYING file.

Please refer to the COPYING file for full copyright information, license conditions and disclaimer of warranty.


Very incomplete. Although several prototypes exist -- see below!

Right now it's just a cross-platform OpenGL context that displays a basic tilemap that you can move with the arrow keys. You can also press "a" to play some basic music that is synthesised on-the-fly (sound only plays on Linux only at the moment).

Run with "wgen" as a command line argument to access the (in-progress) standalone world generator component.

Run with "composer" as a command line argument to access the (in-progress) music composer.

Hero Extant development screenshot

See Also the Prototype World Generator

See for the 2010 version!

The prototype world generator has also been ported into Java by avh4 here:

The prototype world generator is also used as an extra feature in TT Tile Tools

System Requirements

  • Operating System: Windows XP / Vista / 7 or Linux
  • Graphics: Graphics card and drivers must support at least OpenGL 3.0 and Shader Language 1.30.
  • Audio: Optional. Any audio device that supports stereo or monophonic output with a sample rate of at least 11 KHz.

Supported GPUs: Nvidia GeForce 600/500/400/300/200/100 series, Nvidia GeForce 9000/8000 series, ATI Radeon HD 7000/6000/5000/4000/3000/2000 series, Intel HD Graphics starting with the "Sandy Bridge" architecture. Please use the latest drivers available from hardware vendors.

Linux users need to support GLX 1.4 as well. You can use the glxinfo program to determine what level of support your system provides. In some cases you may have to use a proprietary graphics driver.

Installing Hero Extant


  • Download the latest Windows package for your platform from
  • Extract the package by right clicking, then choosing the "Extract All" option.
  • 32 bit Windows: double click winstall-w32.exe to install
  • 64 bit Windows: double click winstall-w64.exe to install
  • Optional: You can run the program without installing from the bin folder contained at the root of the package.


  • Create a directory to hold the package: mkdir hero-extant; cd hero-extant
  • Download the latest Linux package by typing wget
  • Extract the package by running the command tar xvzf hero-extant.hex1-linux.LATEST.tgz
  • 32 bit Linux: Run the program directly by typing ./bin/hex32
  • 64 bit Linux: Run the program directly by typing ./bin/hex64

Optional: Install the program by either creating a symlink to the file:

sudo ln -s "`pwd`/bin/hex64" /usr/bin/hex

Or by copying or moving it, e.g. either one of

sudo cp "`pwd`/bin/hex64" /usr/bin/hex
sudo mv "`pwd`/bin/hex64" /usr/bin/hex

You may want to check that nothing with the name hex already exists -- type which hex and pick a different name if necessary.

Optional: Once installed, use the command hex opt add (path) to install .opt files from the opt folder in order to install additional feature packs.

Building Hero Extant from Source

Hero Extant is desgined to be cross-platform. At the moment the build system can create Windows and Linux targets.

The build process itself is designed to run on Linux.

In particular, a Multiarch-capable system is needed to compile both 64 and 32 bit Linux targets. For a full cross compiler, 64 bit Debian stable and oldstable are supported.

The instructions below might look daunting, but most of it is optional and everything is spelled out in detail.

Step One: Dependencies

First Download and install the tup build system from or through your package manger:

sudo apt-get install pkg-config libfuse-dev
git clone git://
cd tup
sudo mv ./tup /usr/bin/tup
cd ..

If you get an error about fuse, try:

sudo gpasswd -a your_username fuse

Then logout and back in again.

Install obvious dependencies:

sudo apt-get install gcc

Install the dependencies for -lX11 and -lGL with (or similar):

sudo apt-get install libx11-dev libgl1-mesa-dev

Optional: For Multiarch targets (i386):

Setup Debian multiarch (assuming you are running 64 bit Debian stable or oldstable):

sudo dpkg --add-architecture i386
sudo apt-get install libc6-dev-i386


sudo apt-get install libx11-dev:i386 libgl1-mesa-dev:i386

If this prompts to REMOVE a package, pick no. (This is a bug [1] [2]). You might have some luck installing Nvidia or ATI packages.

Optional: For Windows targets, sudo apt-get install gcc-mingw32 and verify the compilers exist with ls /usr/bin/*gcc

Optional: to compile with ALSA sound support, sudo apt-get install libasound2 libasound2-dev lib32asound2 lib32asound2-dev

Optional: Alternative C compiler sudo apt-get install clang

  • Extra Optional: to test using wine, build wine64 from either installing missing dependencies one by one as reported by the make file (ignore unimportant ones), or otherwise as follows (32 bit wine is broken so don't bother):


sudo apt-get install bison ccache flex fontforge gcc \
                     gettext git-core libasound2-dev libaudio-dev \
                     libc6-dev libcups2-dev \
                     libdbus-1-dev libelfg0 libesd0-dev libexif-dev \
                     libexpat1-dev libfontconfig1-dev libfreetype6-dev \
                     libgcrypt11-dev libgif-dev \
                     libglib2.0-dev libgnutls-dev \
                     libgpg-error-dev libgphoto2-2-dev libgsm1-dev \
                     libgstreamer0.10-dev \
                     libgstreamer-plugins-base0.10-dev \
                     libhal-dev libhal-storage-dev libice-dev \
                     libjpeg62-dev liblcms1-dev libldap2-dev \
                     libmad0 libmad0-dev \
                     libmpg123-dev libncurses5-dev \
                     libogg-dev  libopenal-dev libopenal1 \
                     libpng12-dev libpopt-dev libsm-dev \
                     libssl-dev libtasn1-3-dev \
                     libusb-dev libvorbis-dev libvorbisfile3 \
                     libx11-dev libxau-dev libxcomposite-dev \
                     libxcursor-dev \
                     libxdmcp-dev libxext-dev libxfixes-dev \
                     libxft-dev libxi-dev libxinerama-dev \
                     libxml2-dev libxmu-dev \
                     libxmu-headers libxrandr-dev libxrender-dev \
                     libxslt1-dev libxt-dev libxv-dev libxxf86vm-dev \
                     m4 make \
                     unixodbc unixodbc-dev \
                     x11proto-composite-dev x11proto-core-dev \
                     x11proto-fixes-dev \
                     x11proto-input-dev x11proto-kb-dev \
                     x11proto-randr-dev x11proto-video-dev \
                     x11proto-xext-dev \
                     x11proto-xf86vidmode-dev \
                     x11proto-xinerama-dev xtrans-dev \
                     zlib1g-dev prelink


git clone git:// ./wine-git
mkdir wine64
cd wine64
../wine-git/configure --enable-win64
sudo make install

Note that this will take AGES to finish.

Extra Optional: to deploy your changes as a package to a remote host, install the fabric python library from as follows:

sudo apt-get install python-pip python-dev
sudo pip install fabric

Step Two: Checkout and Prepare

Checkout the Hero Extant source code

git clone git://
cd hero-extant

Prepare the build system

init tup

Edit tup.config to specify target platforms and build options.

nano tup.config

In particular, look out for CONFIG\_<platform>\_ENABLED.

You may want to change the Linux compiler from clang to gcc at your option. I use gcc as the Linux compiler for debugging or profiling, and clang for normal builds. This is partly because clang has better error messages. But it also generates far faster code when optimisations are turned on -- particularly for the 32 bit versions, where the clang version runs literally twice as fast as the gcc version when generating maps.

Step Three: Compile

Based on your changes to the tup.config file, the tup build system will compile Hero Extant for each target with the following command:

tup upd

You can perform a partial update by naming an output explicitly. For example:

tup upd ./bin/hex-w64.exe

The bin folder should now contain the compiled program for one or more of your chosen platforms:

hex32       - 32 bit Hero Extant for Linux
hex64       - 64 bit Hero Extant for Linux
hex-w32.exe - 32 bit Hero Extant for Windows
hex-w64.exe - 64 bit Hero Extant for Windows

You can either run the program where it is...


Or install it...

Step Four (Optional): Install

You can install your chosen version of Hero Extant so that you can access it easily by typing hex from anywhere.

You can do this by creating a symlink:

sudo ln -s "`pwd`/bin/hex64" /usr/bin/hex

This will automatically update if you compile a new version.

Alternatively you can mv or cp the file instead.

You can now type hex cfg for help managing your preferences such as sound or window size.

Step Five (Optional): Install additional feature packs

Hero Extant can be trivially extended with optional packages containing additional graphics or data.

You can download additional packages from

Use the command hex opt to manage these files.

As an example only, run these commands:

hex opt install example.1.opt

This example package contains an alternate image that will invert the foreground/background colours on the default font. Run hex to see the difference.

To undo this, type:

hex opt remove example

Step Six (Optional): Share your changes

Install fabric (see Step One: Dependencies).

Edit the deploy script:


Then release your changes to a remote host with the command:

fab deploy

This will build packages for Windows and Linux and upload them to your website for you to share.

Please note that if you have modified this software you should make that clear (e.g. in the Readme) -- see COPYING for information about this.

Please Feedback!

This software is in an early stage of development.

Please let me know how you got on with installing, compiling or running this software. Any errors? Any library dependencies that I forgot to mention?

I am eagerly accepting patches that fix portability issues e.g. to build on compilers other than gcc and clang, as well as any reasonable adjustments to support platforms in addition to Windows and Linux.

I can be reached at

Something went wrong with that request. Please try again.