Skip to content
Opensource rebuild of the XCOM Apocalypse Engine that requires the original files to run
C++ CMake C NSIS Lua Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.tx Update translations - pull all strings into one file Mar 22, 2016
.vs Set the working dir correctly when running the launcher from msvc Sep 4, 2019
cmake Default to ccache with cmake Nov 28, 2017
data Add cheat option to go forward 1 day or week Sep 5, 2019
dependencies Use CMake's INTERPROCEDURAL_OPTIMIZATION option for LTO Jul 26, 2019
forms Move Transactioncontrol from Forms to UI Sep 16, 2019
framework Lock the framework update loop to a set FPS (default 60) Nov 10, 2019
game Fix the Stormdog not having full ammo loaded on game start Nov 6, 2019
install/windows Add simple "Launcher" Sep 3, 2019
library Remove logger use from Library/colour.cpp Aug 20, 2019
temp PCK Compression Mode 1 fully supported Jul 15, 2014
tests Update test_serialize runner with new gamestate output paths Sep 4, 2019
tools Add a clang-tidy linting script Oct 2, 2019
.clang-format Update clang-format config to 3.8.0 Mar 26, 2016
.clang-tidy Add the clang-tidy script pass to the travis "lint" pass Oct 2, 2019
.gitattributes Disable line-ending normalization on xml files Apr 2, 2016
.gitignore Create data/mods folder Sep 4, 2019
.gitmodules Add initial support for lua 5.3 (#491) Jan 30, 2019
.travis.yml Add the clang-tidy script pass to the travis "lint" pass Oct 2, 2019
CMakeLists.txt Use CMake's INTERPROCEDURAL_OPTIMIZATION option for LTO Jul 26, 2019 Update code-style compiler documentation Jul 23, 2019
LICENSE Test push with LICENSE mod :) Sep 12, 2017 Add qt5 to dependencies in the README Sep 3, 2019
README_HOTKEYS.txt training, portals and fixes Oct 26, 2017
Vagrantfile Vagrantfile: use a 2GiB box Dec 12, 2016
apocicon.ico Add OpenApoc icon (#227) Apr 19, 2019
appveyor-dev.yml Update vcpkg to 2019.10 Nov 12, 2019
appveyor.yml Update vcpkg to 2019.10 Nov 12, 2019
portable.txt Add a "Portable" config mode Sep 8, 2017 Add version.h generated from git describe Sep 10, 2015

OpenApocalypse Tweet

OpenApoc is an open-source re-implementation of the original X-COM: Apocalypse, that requires the original files to run, licensed under the MIT and written in C++ / SDL2. It was originally founded by PmProg in July 2014, and has since grown in community.

Linux Build Status Windows Build Status Openapoc issues See our Trello TO-DO list for more info Translate OpenApoc to your language OpenApoc MIT license
Openapoc forum Openapoc IRC chat Openapoc Discord Openapoc Facebook Openapoc Vkontakte

Table of Contents

Key Features

  • Unlimited modding capabilities, which was not possible in the original
  • Port the game to any platform you like (windows, linux, android etc)
  • Support for modern screen resolutions
  • Added a full debug system (hot keys, etc.)
  • Added 'more options' menu (which many improvements)
  • Added skirmish module (fast fight)
  • We can bring, in mods, Julian Gollop cut ideas into the game
  • The new engine have ample opportunities for expansion and changes
    • High FPS, smooth sound during the game without bugs from original
    • No limitations which were in vanilla

What's left?

  • In order to have a playable game, we need:
    • Aliens moving from building to building
    • Funding for X-Com and orgs
    • Agent Training
    • Bribes

That will be a game which has all of its main mechanics implemented. We still have a long way to go, but that's a point at which you can really play Apocalypse in OpenApoc and do everything you need.

  • And then, to reach a mostly complete state, we also require:
    • Proper portal location in alien dimension
    • Proper portal movement
    • Alien Takeover screen
    • Score screen and graphs
    • Proper collapse algorithm for alien tubes
    • Victory & Defeat screens
    • UFO growth halting when relevant building is destroyed
    • Organisations properly buying their vehicles
    • Organisations making treaties, raiding each other and x-com, sending illegal flyers
    • Proper Music (not just 3 looped tracks)
    • Overspawn
  • Then, to be fully vanilla feature complete, we also need:
    • Better battle AI (behavior, taking cover, more intelligent attack patterns)
    • Better city AI (craft retreat when damaged, other stuff)
    • Proper ground vehicles (occupying lanes, blocking, overtaking etc.)
    • Proper location screen (assigning agents to vehicles)
    • Some fixes to Ufopaedia display
    • Proper transferring agents
    • UI Tooltips
    • Controls for editing text (naming soldiers and other property)
    • Agent medals and statistics
    • Agent name generator (more than 10 names and surnames)
    • Colored text support
  • And then, to be a full 1.0 OpenApoc release, we also need:
    • Different file format than xml for storing save files (at least), so that save/loading takes reasonable amount of time
    • Different handling of game data (separation of "rules" and "gamestate", so that for example you can modify a research project in a mod, add that mod to your playthrough midgame, and not have to lose all progress made on that project, or later remove the project mod, and have the changes reversed but research state persist)
    • Close all issues
    • Maybe something else that didn't come up to mind immediately


OpenApocalypse is built leveraging a number of libraries - to provide needed functionality (and save us the time of implementing it ourselves badly)

  • SDL2
  • Boost - specifially the 'locale' library, used for localisation, 'program-options' for settings management, and 'filesystem'.
  • Libunwind - debug backtracing on linux - not needed on windows.

The following libraries are also used, but are shipped as submodules in the repository and directly included in the build, so you don't need to install these dependencies to build or use openapoc.

  • GLM - Math library.
  • libsmacker - Decoder for .smk video files.
  • lodepng - Reading/writing PNG image files.
  • Lua - Scripting language.
  • miniz - Zlib-comptible compression library.
  • physfs - Library for reading data from .iso files or directory trees (Note: We use a patched version, available on GitHub - required to read the .iso files we use).
  • pugixml - XML library used for reading/writing the game data files.
  • tinyformat - A c++ typesafe string formatting library.

Building on Windows

  • Checkout OpenApoc from GitHub.
  • If you are using the GitHub client for Windows, the submodules should already be setup at first checkout. If not using the github client, or if the submodules have been updated, run the following commands in the 'git shell' from the root of the OpenApoc repository. This should reset the submodule checkouts to the latest versions (NOTE: This will overwrite any changes to code in the dependencies/ directory).
git submodule update --init --recursive
  • All the other dependencies (Boost, SDL2) need to be supplied separately. Install Vcpkg and run the following command:
vcpkg install sdl2 boost-locale boost-program-options boost-uuid boost-crc qt5-base
  • Copy the original XCom:Apocalypse .iso file into the "data/" directory. This could also be a directory containing all the extracted files from the CD, and it should be named the same (IE the directory should be data/cd.iso/). This is used during the build to extract some data tables.
  • Open the Git directory in Visual Studio (if you don't have an Open Folder option, generate a project from CMake).
  • Visual Studio should automatically detect and configure CMake appropriately. To add your Vcpkg dependencies, edit your CMake Settings file and add:
"variables": [
        "name": "CMAKE_TOOLCHAIN_FILE",
        "value": "<path to vcpkg>\\scripts\\buildsystems\\vcpkg.cmake"
  • If you get errors, clear your cache from the CMake menu and generate again.
  • Build (Release/Debug x86/x64 should all work). Release is recommended as Debug is very slow.
  • When running from the Visual Studio UI, the working directory is set to the root of the project, so the data folder should already be in the right place. If you want to run outside of Visual Studio, you need to copy the whole 'data' folder (including the cd.iso file) into the folder openapoc.exe resides in.

Building on Linux

(Tested on Ubuntu 16.04 and Mageia 6)

  • On Ubuntu, install the following packages:
sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-filesystem-dev libboost-program-options-dev qtbase5-dev
  • On Mageia, install the following packages as root:
urpmi "cmake(sdl2)" libstdc++-static-devel boost-devel boost unwind-devel task-c++-devel cmake git qtbase5-devel
  • Checkout OpenApoc from GitHub.
  • Fetch the dependencies from git with the following terminal command (run from the just-created OpenApoc folder).
git submodule update --init --recursive
  • Copy the cd.iso file to the 'data' directory under the repository root (Note - despite dosbox having good linux support, the steam version of X-Com Apocalypse will only install if Steam Play is enabled).
cp /path/to/cd.iso data/
  • Create a subdirectory ('build' in this example) in the OpenApoc checkout directory, and from that use cmake to configure OpenApoc.
cd /path/to/OpenApoc
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
  • This cmake command will fail if we're missing a dependency, or your system is for some other reason unable to build - if you have any issues please contact us (see above for links).
  • Build the project with the following command.
make -j4
  • This should create a directory 'bin' under the build directory, with the 'OpenApoc' executable file. OpenApoc by default expects the data folder to be in the current working directory, so running the executable from the root of the git checkout should work.

How to setup OpenApoc

  • This assumes that you have the file 'cd.iso' - a copy of the original X-Com Apocalypse CD (This can be acquired from Steam - this is required to run)
    • you need have all files in ISO file including MUSIC etc
    • if it's in .iso format, rename it to "cd.iso"
    • if it's not, copy all the contents into a folder and rename the folder to "cd.iso"
    • we also support the .cue / .bin files (which are used, for example, in the version)
    • you rename the .cue file "cd.iso", put it in the data/ folder, then put the .bin file in the same folder

(without changing it's name - so for example the file remails "XCOM.BIN")

  • Download OpenApoc: Windows Build Status
    • If you see a green latest build then you can get it, if it's not then go to HISTORY at the top and click another build that's green
    • Click Platform x64 (or Win32 if you need 32bit binaries)
    • Click ARTIFACTS
    • Download the first option (without "debug" in it)
    • Unzip downloaded file which will create a new folder with everything from us inside
  • Put cd.iso (image or folder) into data folder inside OpenApoc folder
  • Run and enjoy!
    • If you find bug report it here (upload also openapoc_log.txt from game folder)

Contact us

If you're interested, please visit our website. We have forums - please pop by and introduce yourself! We have an IRC channel on Freenode - #openapoc. We have a Facebook page.

You can’t perform that action at this time.