Free (as in freedom) open source clone of the Age of Empires II engine :rocket:

Overview

openage

openage: a volunteer project to create a free engine clone of the Genie Engine used by Age of Empires, Age of Empires II (HD) and Star Wars: Galactic Battlegrounds, comparable to projects like OpenMW, OpenRA, OpenSAGE, OpenTTD and OpenRCT2. At the moment we focus our efforts on the integration of Age of Empires II, while being primarily aimed at POSIX platforms such as GNU/Linux.

openage uses the original game assets (such as sounds and graphics), but (for obvious reasons) doesn't ship them. To play, you require an original AoE II: TC or AoE II: HD installation (via Wine or Steam-Linux).

github stars #sfttech on Freenode #sfttech on matrix.org quality badge

Contact

Contact Where?
Issue Tracker SFTtech/openage
Development Blog blog.openage.dev
Forum reddit /r/openage
Matrix Chat #sfttech:matrix.org
IRC Chat irc.freenode.net #sfttech
Money Sink money sink

Technical foundation

Technology Component
C++17 Engine core
Python3 Scripting, media conversion, in-game console, code generation
Qt5 Graphical user interface
Cython Glue code
CMake Build system
OpenGL3.3 Rendering, shaders
SDL2 Cross-platform Audio/Input/Window handling
Opus Audio codec
nyan Content Configuration and Modding
Humans Mixing together all of the above

Goals

  • Fully authentic look and feel
    • This can only be approximated, since the behaviour of the original game is mostly undocumented, and guessing/experimenting can only get you this close
    • We will not implement useless artificial limitations (max 30 selectable units...)
  • An easily-moddable content format: nyan yet another notation
  • An integrated Python console and API, comparable to blender
  • AI scripting in Python, you can use machine learning
  • Re-creating free game assets
  • Multiplayer (obviously)
  • Matchmaking and ranking with a haskell masterserver
  • Optionally, improvements over the original game
  • Awesome infrastructure such as our own Kevin CI service

But beware, for sanity reasons:

  • No network compatibility with the original game. You really wanna have the same problems again?
  • No binary compatibility with the original game. A one-way script to convert maps/savegames/missions to openage is planned though.

Current State of the Project

Important notice: Gameplay is currently non-functional as the internal simulation is replaced by a more sophisticated implementation. You also might experience errors when running a build. Gameplay will return in a later update. Detailed explanations can be found in this blog post.

Installation Packages

Supported Platforms: Linux, Windows 10, MacOS X 10.14

  • For Linux check at repology if your distribution has any packages available or here for any future updates on *.deb and AppImage packages.

  • For Windows check our release page for the latest installer or here for nightly builds.

Quickstart

Operating System Build status
Debian Sid Todo: Kevin #11
macOS macOS build status
Windows 10 - x64 Build status
  • How do I get this to run on my box?

  • I compiled everything. Now how do I run it?

    • Execute bin/run.
    • The convert script will transform original assets into openage formats, which are a lot saner and more moddable.
    • Use your brain and react to the things you'll see.
  • Waaaaaah! It

    • segfaults
    • prints error messages I don't want to read
    • ate my dog

All of those are features, not bugs.

To turn them off, use ./run --dont-segfault --no-errors --dont-eat-dog.

If this still does not help, try our troubleshooting guide, the contact section or the bug tracker.

Contributing

You might ask yourself now "Yeah, this sounds cool and all, but how do I participate and get famous contribute useful features?".

Fortunately for you, there is a lot to do and we are very grateful for help.

Where do I start?

  • The engine has several core parts that need help. You can look at the project related issues and find something for you, for example:
    • Asset Converter: Converts whatever properietary format used by a Age of Empires 2 into open formats. Written mostly in Python 3. There are a lot of TODOs and beginner issues available right now, so it's a good place to get your feet wet.
    • Game simulation: Also known as the gameplay implementation. Written in C++, using the Entity-Component-System paradigm in addition to an event-driven simulation.
    • Documentation: We not only document code, but also anything technical about the Genie engine and its games. If you like documenting file formats or thouroughly investigating game mechanics, then this might be the right place to start.
  • Check the issues labelled with good first issues. These are tasks that you can start right away and don't require much previous knowledge.
  • Ask us in the chat. Someone there could need help with something.
  • You can also take the initiative and fix a bug you found, create an issue for discussion or implement a feature that we never though of, but always wanted.

Ok, I found something. What now?

  • Tell us, if you haven't already. Chances are that we have additional information and directions.
  • Read the docs. They will answer most "administrative" questions like what code style is used and how the engine core parts are connected.
  • Read the code and get familiar with the engine component you want to work with.
  • Do not hesitate to ask us for help if you do not understand something.

How do I contribute my features/changes?

  • Read the contributing guide.
  • You can upload work in progress (WIP) revisions or drafts of your contribution to get feedback or support.
  • Tell us (again) when you want us to review your work.

I want to help, but I'm not a programmer...

Then openage might be a good reason to become one! We have many issues and tasks for beginners. You just have to ask and we'll find something. Alternatively, lurking is also allowed.


Cheers, happy hecking.

Development Process

What does openage development look like in practice?

How can I help?

All documentation is also in this repo:

  • Code documentation is embedded in the sources for Doxygen (see doc readme).
  • Have a look at the doc directory. This folder tends to get outdated when code changes.

License

GNU GPLv3 or later; see copying.md and legal/GPLv3.

I know that probably nobody is ever gonna look at the copying.md file, but if you want to contribute code to openage, please take the time to skim through it and add yourself to the authors list.

Issues
  • QtQuick GUI

    QtQuick GUI

    I've started the integration of the QtQuick as an ingame GUI. Current state is that it can render the game an the QtQuick scene at the same time.

    Simple hardcode version to be able to understand the workings is on different branch: https://github.com/ChipmunkV/openage/tree/qt-gui-minimal

    There is some simple stuff left to do: resize, input and actual QML code of the skin. (I won't start from that) Locale troubles too: https://github.com/SFTtech/openage/issues/423

    I'll start from the more important question: the connection to the game logic. For now, I can't see how that can be done without at least the separation of the main engine from the SDL initialization code.

    nice new thing ☺ c++ 
    opened by ChipmunkV 38
  • [WIP] nyan specification

    [WIP] nyan specification

    Before I forget, I am committed to write down what @TheJJ explained to me in #228 about nyan. So here it is, an introduction to nyan (for newbies). At least this is my understanding. This is a work in progress and I will see if I am able to do more specifications. In the meantime I'll accept comments, corrections, suggestions..

    improvement documentation to-discuss 
    opened by inakoll 38
  • Add .desktop file and placeholder icon.

    Add .desktop file and placeholder icon.

    When packaging openage it would be nice to have a common .desktop and icon file to use.

    packaging 
    opened by boombatower 37
  • Shots fired & Delta Graphics

    Shots fired & Delta Graphics

    Game Functions:

    • Projectiles use game data for range and arc shape
    • Any building can be used as a dropsite
    • Units can garrision in any building
    • Resource objects can be gathered from
    • F5/F9 quick save and load functions

    Graphics:

    • UnitTexture class handles delta graphics
    • Delta graphics can be animated and directional (ships)
    • TerrainObjects handle building annexes using child/parent spaces
    • Switch between villager graphics depending on which resource is gathered

    User Interface:

    • Selection of units by boxing
    • Display of units hitpoints

    Notes: requires assets to be reconverted.

    currently unsure how about the "projectile_arc" parameter from exported data should be used for scorpions, projectile_arc = 0 for onagers, projectile_arc = 0.4 for regular archers, projectile_arc = -0.06

    nice new thing ☺ c++ 
    opened by Jon0 31
  • Building on OSX 10.10

    Building on OSX 10.10

    Just tried to build on Mac OS X 10.10 and always getting this:

    CMake Error at /usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:136 (message): Could NOT find PythonLibs: Found unsuitable version "2.7.6", but required is at least "3.3" (found /usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib) Call Stack (most recent call first): /usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:341 (_FPHSA_FAILURE_MESSAGE) /usr/local/Cellar/cmake/3.0.0/share/cmake/Modules/FindPythonLibs.cmake:276 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) cpp/CMakeLists.txt:74 (find_package)

    The cmake from brew (3.0.2) didn't work. I've installed 3.0.0 from https://raw.githubusercontent.com/NikolausDemmel/homebrew-devel/master/cmake.rb (with some sha1 manipulation), still no results.

    Will be thankful for any support, and will be glad to help with Mac testings.

    mac os buildsystem 
    opened by dalexandrov 31
  • Windows support [$30]

    Windows support [$30]

    Windows should be a major supported target either by native compilation or cross-compilation.

    Openage currently builds fine under Win32 with some minor patches ( http://i.imgur.com/Hxpym3K.jpg ) but there is no documentation available or binaries. I'll document the steps i used to build for win32 below:

    There is a $30 open bounty on this issue. Add to the bounty at Bountysource.

    windows 
    opened by mappu 30
  • macOS event dispatching broken

    macOS event dispatching broken

    #828 figured out that for a successful mac run the event dispatching for mac needs to be changed. This has to be fixed properly.

    bug mac os c++ just do it 
    opened by TheJJ 29
  • Can not link shader program

    Can not link shader program

    archlinux X86_64 system

    [email protected]:~/openage-master$ make run
    [  1%] Built target pymodules
    [  2%] Built target codegen
    [100%] Built target openage
    ./openage --data=assets
    MSG   data folder will be assets
    MSG   launching engine with data directory 'assets'
    Failed to create secure directory (/run/user/1000/pulse): Permission denied
    MSG   initialized SDL audio subsystems.
    MSG   Using audio device 'default' [freq=48000,format=32784,channels=2,samples=4096]
    DBG2  queried font: DejaVu Serif:style=Book
    DBG2  returning font file /usr/share/fonts/TTF/DejaVuSerif.ttf
    DBG2  queried font: DejaVu Serif:style=Book
    DBG2  returning font file /usr/share/fonts/TTF/DejaVuSerif.ttf
    MSG   initialized SDL video subsystems.
    DBG0  Maximum supported texture size: 4096
    DBG0  Maximum supported texture units: 20
    DBG2  queried font: DejaVu Sans Mono:style=Book
    DBG2  returning font file /usr/share/fonts/TTF/DejaVuSansMono.ttf
    DBG0  console font character size: 8x17
    MSG   Loading time [engine]: 0.484 s
    DBG1  Loaded texture from 'assets/missing.png'
    DBG1  Loaded texture from 'assets/gaben.png'
    DBG0  terrain prefs: 29 tiletypes, 9 blendmodes
    DBG1  Loaded texture from 'assets/converted/Data/terrain.drs/15001.slp.png'
    (...)
    DBG0  neighbor 7 not found.
    MSG   ERROR: Program linking failed
    Fragment info
    -------------
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    FATAL Exception: Program linking failed
    Fragment info
    -------------
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    0(65) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable
    Makefile:46: recipe for target 'run' failed
    make: *** [run] Error 1
    [email protected]:~/openage-master$ 
    
    rendering 
    opened by behind1231 29
  • Game crashes on pressing M |

    Game crashes on pressing M | "Change Mode"

    Whenever I try to change to action mode, the game crashes. Console output:

    Traceback (most recent call last):
      File "run.py", line 15, in init run (/home/lisacvuk/openage/run.cpp:882)
        main()
      File "/home/lisacvuk/openage/openage/__main__.py", line 94, in main
        return args.entrypoint(args, cli.error)
      File "/home/lisacvuk/openage/openage/game/main.py", line 43, in main
        return run_game(args, assets)
      File "openage/game/main_cpp.pyx", line 24, in openage.game.main_cpp.run_game (/home/lisacvuk/openage/openage/game/main_cpp.cpp:962)
        result = run_game_cpp(args_cpp)
      File "", line 0, in 
      File "", line 0, in openage::run_game(openage::main_arguments const&)+0x42d
      File "", line 0, in openage::Engine::run()+0x1f
      File "", line 0, in openage::Engine::loop()+0x3b7
      File "", line 0, in openage::util::gl_check_error()+0x12c
      File "", line 0, in openage::error::Error::Error(openage::log::message const&, bool, bool)+0x152
      File "", line 0, in openage::error::StackAnalyzer::analyze()+0xb6
      File "libopenage/util/opengl.cpp", line 66, in void openage::util::gl_check_error()
        throw Error(MSG(err) <<
    openage.cppinterface.exctranslate.CPPException: OpenGL error state after running draw method: 1285
        out of memory, wtf?
    
    

    Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

    bug c++ 
    opened by lisacvuk 27
  • Create auxilary files for game edition/expansion information

    Create auxilary files for game edition/expansion information

    Fixes #1314 and #1312.

    Things done so far:

    • created version-hash toml files for game editions and expansions inside version-hashes directory
      • every game/expansion has a single toml file
      • remaining games with MD5 hashes were also created(not sure if this was needed to be done)
      • a directory was created to store the files
    • created auxiliary files from GameEdition and GameExpansion enums
      • single files were created for both

    @heinezen any changes or additions needs to be done?

    Also AOE1DE enum in game_version.py has same MD5 hashes for both AoEDE_s.exe and empires.dat. Is that a coincidence?

    nice new thing ☺ python assets hacktoberfest hacktoberfest-accepted 
    opened by drs-11 27
  • Make fails with python/cython error: undefined reference to pthread_*, sem_*, dl*

    Make fails with python/cython error: undefined reference to pthread_*, sem_*, dl*

    Hi, I came across this particular issue (that I have resolved[found a workaround for]) in the make stage where what I think are the python modules (cython I imagine), fails to find these respective libraries that it gives an error for.

    Environment

    • Ubuntu 20.0.4
    • cmake 3.22.0
    • gcc 10.3.0
    • python 3.6.10 using pyenv (a virtualenv/python installation handler)

    Error

    ./Python/dynload_shlib.c:82: error: undefined reference to 'dlsym'
    ./Python/dynload_shlib.c:95: error: undefined reference to 'dlopen'
    ./Python/dynload_shlib.c:126: error: undefined reference to 'dlsym'
    ./Python/dynload_shlib.c:95: error: undefined reference to 'dlopen'
    ./Python/dynload_shlib.c:101: error: undefined reference to 'dlerror'
    Python/thread_pthread.h:252: error: undefined reference to 'pthread_create'
    Python/thread_pthread.h:269: error: undefined reference to 'pthread_detach'
    Python/thread_pthread.h:233: error: undefined reference to 'pthread_attr_setstacksize'
    Python/thread_pthread.h:322: error: undefined reference to 'sem_init'
    Python/thread_pthread.h:347: error: undefined reference to 'sem_destroy'
    Python/thread_pthread.h:386: error: undefined reference to 'sem_wait'
    Python/thread_pthread.h:386: error: undefined reference to 'sem_wait'
    Python/thread_pthread.h:384: error: undefined reference to 'sem_trywait'
    Python/thread_pthread.h:382: error: undefined reference to 'sem_timedwait'
    Python/thread_pthread.h:428: error: undefined reference to 'sem_post'
    Python/thread_pthread.h:649: error: undefined reference to 'pthread_key_create'
    Python/thread_pthread.h:654: error: undefined reference to 'pthread_key_delete'
    Python/thread_pthread.h:677: error: undefined reference to 'pthread_setspecific'
    Python/thread_pthread.h:627: error: undefined reference to 'pthread_attr_setstacksize'
    Python/thread_pthread.h:664: error: undefined reference to 'pthread_key_delete'
    Python/thread_pthread.h:670: error: undefined reference to 'pthread_setspecific'
    Python/thread_pthread.h:684: error: undefined reference to 'pthread_getspecific'
    ./Modules/posixmodule.c:5921: error: undefined reference to 'forkpty'
    ./Modules/posixmodule.c:5827: error: undefined reference to 'openpty'
    ./Modules/signalmodule.c:1119: error: undefined reference to 'pthread_kill'
    ./Modules/signalmodule.c:855: error: undefined reference to 'pthread_sigmask'
    ./Modules/faulthandler.c:577: error: undefined reference to 'pthread_sigmask'
    collect2: error: ld returned 1 exit status
    

    Workaround/Fix

    The issue I think was caused because of me using pyenv for managing my python versions and virtual environments. Pyenv allows me to easily mange and install multiple python versions, and virtual environments, but it therefore does not manage them in the default path. This if not catered for was what led to me believe would cause these issues. Perhaps the problem was that when python is installed using pyenv it does not link against these libraries properly, I could not test this out.
    What I tried and managed to do to fix this was to use my systems python installation, by disabling pyenv for that session. That was done using pyenv local system (specific to pyenv).
    I don't know if this issue would arise for virtualenv as well since I have not used that, but it did arise for pyenv. I managed to proceed and compile, build and test the project successfully afterwards, so theres definitely something conflicting with how the cmake setup might/might not work with pyenv atleast.

    bug python 
    opened by sarcXD 2
  • Cannot specify compile definitions for target

    Cannot specify compile definitions for target "SDL2::SDL2" which is not built by this project

    Hi, I got interested in contributing to this project, and was in the section of building my dev environment. I wanted to report/seek help on this really annoying issue I came across. It doesn't seem to be popular enough to have any posts online either so I'm hoping its easily resolvable. I have also spent a huge chunk of time trying to resolve this myself, going through issues on this repo, as well as any similar ones online (maybe related to cmake or SDL), but found nothing there sadly, most posts were related to using SDL with cmake.

    My Environment

    • Ubuntu 20.04.3 LTS
    • gcc 10.3.0
    • cmake 3.19.4

    I will first try to highlight all that I have done:

    1. Followed the installation steps
    2. Made sure I have installed all dependencies
    3. Removed and reinstalled the libsdl2-dev* packages (incase I did something wrong)
    4. Read and tried to follow through on the troubleshooting section 4.1. I manually passed in my SDL_image location, (although I am not sure if this would be the issue since the script did notify me when SDL2 was not installed on my system, meaning it does detect it in the correct folder, but I might be wrong)

    The exact command I used to run this was

    ./configure -- -Dnyan_DIR=/home/me/Documents/Work/sideProjects/openage-oss-work/nyan/build
    

    I also did use the DSDL2IMAGE_INCLUDE_DIRS flag, and admittedly, I could not exactly tell what I was supposed to point this to, I read the docs but it wasn't clear enough. So, I tried just about everything here, pointing it to where my:

    • SDL.h and SDL-image.h files are located
    • SDL*.so files are located ( I was just trying everything here)
      These were all the locations where my SDL2 files were installed (I think)

    I am posting my entire log for an incase detailed report, before someone asks for it in detail, but I will mention the specific section afterwards to make pinpointing the issue easier.

    ./configure is a convenience script:
    it creates the build directory,  symlinks it,
    and invokes cmake for an out-of-source build.
    
    Nobody is stopping you from skipping ./configure and our Makefile,
    and using CMake directly (e.g. when packaging, or using an IDE).
    For your convenience, ./configure even prints the direct CMake invocation!
    
             build_type | Debug
           cxx_compiler | g++
              cxx_flags | 
       exe_linker_flags | 
         install_prefix | /usr/local
    module_linker_flags | 
    shared_linker_flags | 
    
    config options:
    
              backtrace | if_available
    gperftools-profiler | if_available
    gperftools-tcmalloc | False
                inotify | if_available
                ncurses | if_available
                 opengl | if_available
                 vulkan | if_available
    
    bindir:
    /home/me/Documents/Work/sideProjects/openage-oss-work/openage/.bin/g++-debug-Oauto-sanitize-none/
    
    invocation:
    cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS='' -DCMAKE_EXE_LINKER_FLAGS='' -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_MODULE_LINKER_FLAGS='' -DCMAKE_SHARED_LINKER_FLAGS='' -DCXX_OPTIMIZATION_LEVEL=auto -DCXX_SANITIZE_FATAL=False -DCXX_SANITIZE_MODE=none -DWANT_BACKTRACE=if_available -DWANT_GPERFTOOLS_PROFILER=if_available -DWANT_GPERFTOOLS_TCMALLOC=False -DWANT_INOTIFY=if_available -DWANT_NCURSES=if_available -DWANT_OPENGL=if_available -DWANT_VULKAN=if_available -Dnyan_DIR=/home/me/Documents/Work/sideProjects/openage-oss-work/nyan/build /home/me/Documents/Work/sideProjects/openage-oss-work/openage
    
    (now running cmake:)
    
    
    
     ___  ______ _______ _______ ___
    |  _)/ _____|_______|_______|_  |
    | | ( (____  _____      _     | |    ___  ____  _____ ____  _____  ____ _____
    | |  \____ \|  ___)    | |    | |   / _ \|  _ \| ___ |  _ \(____ |/ _  | ___ |
    | |_ _____) ) |        | |   _| |  | |_| | |_| | ____| | | / ___ ( (_| | ____|
    |___|______/|_|        |_|  (___|   \___/|  __/|_____)_| |_\_____|\___ |_____)
                                             |_|                     (_____|
    
    Welcome to the SFT technologies computer-aided openage build system!
    
    You have chosen, or been chosen, to attempt the daring task of building openage.
    If you have installed all the dependencies that are conveniently listed in
    [doc/building.md], this _might_ just work!
    
    If it doesn't, consider reporting the issue: https://github.com/SFTtech/openage
    Or ask for help:
      * Matrix: #sfttech:matrix.org
      * IRC:    #sfttech on libera.chat
    
    ========================================================
    -- Set PROJECT_VERSION from git.
    CMake Error at libopenage/CMakeLists.txt:51 (target_compile_definitions):
      Cannot specify compile definitions for target "SDL2::SDL2" which is not
      built by this project.
    
    
    -- Could NOT find GCCBacktrace (missing: GCCBacktrace_LIBRARIES GCCBacktrace_INCLUDE_DIRS) 
    -- optional dependency is unavailable: backtrace
    -- Could NOT find GPerfTools (missing: GPERFTOOLS_LIBRARIES GPERFTOOLS_INCLUDE_DIR) 
    -- optional dependency is unavailable: gperftools-profiler
    
    cython module
    	run                                                 [embedded interpreter] [noinstall]
    	openage.cython_check
    	openage.cabextract.lzxd
    	openage.cabextract.cabchecksum                      [standalone]
    	openage.convert.processor.export.terrain_merge
    	openage.convert.processor.export.texture_merge
    	openage.convert.service.export.interface.visgrep
    	openage.convert.service.export.opus.opusenc
    	openage.convert.service.export.png.binpack
    	openage.convert.service.export.png.png_create
    	openage.convert.value_object.read.media.slp
    	openage.convert.value_object.read.media.smp
    	openage.convert.value_object.read.media.smx
    	openage.cppinterface.exctranslate
    	openage.cppinterface.exctranslate_tests
    	openage.cppinterface.pyobject
    	openage.cppinterface.setup_checker
    	openage.cvar.cvar
    	openage.event.demo
    	openage.game.main_cpp
    	openage.log.log_cpp
    	openage.main.main_cpp
    	openage.main.tests
    	openage.renderer.renderer_cpp
    	openage.renderer.tests
    	openage.testing.cpp_testing
    	openage.testing.misc_cpp
    	openage.util.filelike.cpp
    	openage.util.fslike.cpp
    	openage.versions.versions
    
    enabled options:
    	inotify
    	ncurses
    	opengl
    	vulkan
    
    disabled options:
    	backtrace
    	gperftools-profiler
    	gperftools-tcmalloc
    
    openage 0.4.1.694
    
       version string | v0.4.1-694-g6e5546b7
             compiler | GNU 10.3.0
               python | 3.6.10
           build type | Debug
             cxxflags |  -fdiagnostics-color=auto  -Wall -Wextra -pedantic -Wsuggest-override
     build type flags | -g -Og
            build dir | /home/me/Documents/Work/sideProjects/openage-oss-work/openage/.bin/g++-debug-Oauto-sanitize-none
       install prefix | /usr/local
    py install prefix | /usr/local/lib/python3.6/site-packages
    

    Incase the detailed log is too much to go through, this is what I think the exact issue I am coming across is

    CMake Error at libopenage/CMakeLists.txt:51 (target_compile_definitions):
      Cannot specify compile definitions for target "SDL2::SDL2" which is not
      built by this project.
    

    and the line in the libopenage/CMakeList.txt is

    find_package(SDL2 CONFIG REQUIRED)
    target_compile_definitions(SDL2::SDL2 INTERFACE SDL_MAIN_HANDLED)
    find_package(SDL2Image REQUIRED)
    

    I don't exactly know cmake well enough (or at all) and there wasnt any thing related to this exact line that I could use to figure out what exactly went wrong. I am assuming things in cmakelist or the configure file aren't necessarily meant to be changed, so the issue is probably still related to my setup, I'm just having a tremendous amount of trouble figuring out what exactly I am doing wrong.

    I also saw that the .bin/g++-debug-Oauto-sanitize-none/CMakeCache.txt contains what is probably the cache for the cmake run, and well, these are the variables that its using for my sdl2 config

    SDL2IMAGE_INCLUDE_DIRS:PATH=/usr/include
    
    //SDL2 library
    SDL2IMAGE_LIBRARIES:FILEPATH=/usr/lib/x86_64-linux-gnu/libSDL2_image.so
    
    //The directory containing a CMake configuration file for SDL2.
    SDL2_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/SDL2
    

    I would really appreciate if someone who knew this problem well enough, could help, because at this point I've spent far too long enough on this to just abandon it, and have spent enough time on this, that its driving me crazy not knowing anything regarding what might be going wrong here.
    I would also like to thank all the contributors for the existing detailed and rather welcoming guides in advance, since that was what really made it easy for me to try and get started with this in the first place.
    Apologies if I made a mistake somewhere in setting up that I have overlooked, and hopefully this was enough info to help whoever is willing to look at this issue.

    Edit

    Posting my error logs as requested (uploaded them since they're quite large) CMakeError.log CMakeOutput.log

    bug linux buildsystem 
    opened by sarcXD 18
  • Introduce Type hinting

    Introduce Type hinting

    Required skills: Python

    Difficulty: Easy

    The documentation of the Python module could be improved by adding type hinting to the method and member declarations. Type hinting is Python's way of "defining" the type of an input variable (since Python is not strictly typed, this is technically just a recommendation). While useful for documentation purposes, it is also used by IDEs to detect errors or suggesting things for auto-completion.

    In practice it looks like this (note the typing hints in the method header):

    def list_associates(name: str, friends: list[str]: str, enemies: list[str] = None) -> str:
        output = name + 'has friends' + "".join(friends)
    
        if enemies:
            output += 'and also enemies' + "".join(enemies)
    
        return output
    

    We can add type hints to each module one at a time. There's no need to do everything at once. I'm sure there also might be a lot of bugs that could be found along the way.

    Further Reading

    improvement python 
    opened by heinezen 1
  • Optimized PNG compression using in-memory 'files'

    Optimized PNG compression using in-memory 'files'

    An implementation of https://github.com/SFTtech/openage/issues/1376

    Feedback of any kind welcome!

    improvement c++ python assets 
    opened by MavethGH 5
  • [WIP] Use template functions for SMX and SMP file

    [WIP] Use template functions for SMX and SMP file

    Hi, I opened this PR to keep track on my work and to receive some reviews. @heinezen and @TheJJ I really need some walk from you two to complete GH-1370.

    improvement python assets hacktoberfest 
    opened by 9a24f0 4
  • Display conversion progress

    Display conversion progress

    Required skills: Python

    Difficulty: Easy

    For the initial asset conversion, openage provides textual output to signal which stage of conversion has been reached. The output usually looks like this:

    INFO [py] converting metadata
    INFO [py] [0] palette
    INFO [py] [1] empires.dat
    INFO [py] Starting conversion...
    INFO [py] Extracting Genie data...
    INFO [py] Creating API-like objects...
    INFO [py] Linking API-like objects...
    INFO [py] Generating auxiliary objects...
    INFO [py] Creating nyan objects...
    INFO [py] Creating requests for media export...
    INFO [py] Starting export...
    INFO [py] Dumping info file...
    INFO [py] Dumping data files...
    INFO [py] Exporting media files...
    INFO [py] Dumping metadata files...
    INFO [py] [2] player color palette
    INFO [py] [3] terminal color palette
    INFO [py] [4] game specification files
    INFO [py] asset conversion complete; asset version: 7
    

    However, some of these stages can take a while to complete. For example, the whole Exporting media files... stage can take up to 20 minutes. For these stages, it would be nice to have more dynamic updates in form of a progress bar. This would also give much more feedback to users on what's being done at the moment.

    The stages that would benefit the most from a progress bar are:

    • [ ] empires.dat file parsing (See code)
    • [ ] Creating nyan objects... (See code)
    • [ ] Exporting media files... (See code)

    We provide a formatter for the progress bar in our tools: https://github.com/SFTtech/openage/blob/master/openage/util/strings.py#L103

    Further reading:

    python assets good first issue 
    opened by heinezen 22
  • Implement Activity

    Implement Activity

    This issue tracks the implementation of Activity component of the new gamestate. Design document: https://pad.stusta.de/p/openage-activity-system

    nice new thing ☺ c++ to-discuss 
    opened by duanqn 0
  • Parser for the new sprite format

    Parser for the new sprite format

    Resolves https://github.com/SFTtech/openage/issues/1055

    • [x] Introduce new .texture format for texture and subtexture definition
      • [x] specification
      • [x] converter export
    • [x] Parsers for definition files
      • [x] sprite
      • [x] texture
    • [x] Storage classes for animation data
    • [x] Renderer test
      • [x] parsing
      • [x] displaying loaded texture
    rendering c++ python assets documentation 
    opened by heinezen 1
  • Fixing up some Windows build issues

    Fixing up some Windows build issues

    fixes the namespace issue in certain files, adds .cmd script to copy .pyd files into the correct directories on windows, adds a conditional import for windows

    windows buildsystem bugfix 
    opened by xarianthe 3
  • Component skeleton framework

    Component skeleton framework

    Implements the component base classes and a few example components.

    c++ gamelogic api 
    opened by heinezen 1
Releases(v0.4.1)
  • v0.4.1(Aug 15, 2020)

  • v0.4.0(Jun 27, 2019)

    Screenshot of openage on Win10-x64

    Nightly Builds

    If you closely want to follow our development branch, you can find our nightly builds here.

    Beware!

    This is more of a tech demo than a playable game. Expect all kinds of breakage. YOLO. Please give feedback for potential problems in our Matrix channel or on reddit. If you want to support our development, you can do that on liberapay.com/SFTtech

    Changelog

    So much progress..

    Highlights

    • Event-driven gamestate preparations
    • Link to nyan library
    • New renderer implementation (partial)
    • Convert African Kingdoms data (up to HD version 4.3)
    • Cache files for asset loading
    • Modding API specification (v0.2)
    • Out-of-source tree builds
    • Windows MSVC builds and Windows 64-Bit installer

    Visible changes

    • Scrolling only when windows is in focus
    • Middle part of the lower UI
    • Pop space (old gamestate)
    • Market resource prices (old gamestate)
    • Building costs and resource amounts (old gamestate)

    Instructions

    1. Download and check hash
    2. Install
    3. Set a new environment variable AGE2DIR to the path of your Age2-directory. You could also add that in the openage.bat-file, if you like. NOTE: We support Age2-Versions until HD4.3 and old AoC 1.0c, if you have the last Steam-Version read below.
    4. Double-click openage.bat
    5. Wait for the conversion of the assets
    6. Enjoy

    How to set AoE2HD to Version 4.3

    1. Make a backup of your existing Age2HD-folder NOTE: Standard path is C:\Program Files (x86)\Steam\steamapps\common\Age2HD
    2. Open Steam library
    3. Right-click on "Age of Empires II: HD Edition" and click on Properties
    4. Go to Betas
    5. Choose Patch43
    6. Close the window and wait for the download to finish
    Source code(tar.gz)
    Source code(zip)
    openage-v0.4.0-amd64-installer.exe(57.33 MB)
    openage-v0.4.0-amd64-installer.exe.sha256(102 bytes)
    openage-v0.4.0-amd64-portable.7z(52.41 MB)
    openage-v0.4.0-amd64-portable.7z.sha256(100 bytes)
    openage-v0.4.0-x86-installer.exe(51.88 MB)
    openage-v0.4.0-x86-installer.exe.sha256(100 bytes)
    openage-v0.4.0-x86-portable.7z(47.10 MB)
    openage-v0.4.0-x86-portable.7z.sha256(98 bytes)
  • v0.3.0-alpha(Jun 16, 2019)

    Screenshot of openage v0.3.0 on Win10-x64

    Beware!

    This is a installer of openage-v0.3.0-alpha for Windows 10 (64-bit). Use it with caution, it is an early alpha state. Please give feedback for potential problems in our Matrix channel or on reddit. If you want to support our development, you can do that on liberapay.com/SFTtech

    Instructions

    1. Download and check hash
    2. Install
    3. Set a new environment variable AGE2DIR to the path of your Age2-directory. You could also add that in the openage.bat-file, if you like. NOTE: We support Age2-Versions until HD4.3 and old AoC 1.0c, if you have the last Steam-Version read below.
    4. Double-click openage.bat
    5. Wait for the conversion of the assets
    6. Enjoy

    How to set AoE2HD to Version 4.3

    1. Make a backup of your existing Age2HD-folder NOTE: Standard path is C:\Program Files (x86)\Steam\steamapps\common\Age2HD
    2. Open Steam library
    3. Right-click on "Age of Empires II: HD Edition" and click on Properties
    4. Go to Betas
    5. Choose Patch43
    6. Close the window and wait for the download to finish

    Known Problems

    • If you have two (or more) different python installations on your computer try to unset the directory of your own python installation from PATH to make sure openage.bat takes the one from the installDir.
    • Usually it should not give any problems, but if you have Wololo Kingdoms installed and installed mods that change the base assets the converter will not work. A workaround would be to make a backup of your AGE2 directory, let the AGE2DIR environment variable point to that backup and in that backup inside AGE2/resources delete all files except folders. Another workaround would be to backup your AGE2 folder and redownload it to have a clean install. After conversion you replace it with the backup.
    Source code(tar.gz)
    Source code(zip)
    openage-v0.3.0-alpha-win64.exe(33.08 MB)
    openage-v0.3.0-alpha-win64.sha256(92 bytes)
Owner
[SFT]Technologies
We do what we must because we can. \o/
[SFT]Technologies
Agar.io clone written with Socket.IO and HTML5 canvas

Agar.io Clone CONTRIBUTOR WANTED: I'm really sorry for not have enough time to maintain this project. I'm looking for contributors who willing to keep

Huy 2.7k Nov 20, 2021
Freedoom is an entirely free software game based on the Doom engine.

Freedoom The Freedoom project aims to create a complete, free content first person shooter game, but Freedoom by itself is just the raw material for a

null 659 Nov 23, 2021
Minetest is an open source voxel game engine with easy modding and game creation

Minetest Minetest is a free open-source voxel game engine with easy modding and game creation. Copyright (C) 2010-2020 Perttu Ahola [email protected]

Minetest 6.4k Dec 2, 2021
Minetest is an open source voxel game engine with easy modding and game creation

Minetest Minetest is a free open-source voxel game engine with easy modding and game creation. Copyright (C) 2010-2020 Perttu Ahola [email protected]

Minetest 6.4k Nov 21, 2021
Open Source real-time strategy game engine for early Westwood games such as Command & Conquer: Red Alert written in C# using SDL and OpenGL. Runs on Windows, Linux, *BSD and Mac OS X.

OpenRA A Libre/Free Real Time Strategy game engine supporting early Westwood classics. Website: http://www.openra.net IRC: #openra on irc.freenode.net

OpenRA 10.2k Nov 30, 2021
Admin, ban, and comms management system for the Source engine

SourceBans++ Global admin, ban, and communication management system for the Source engine Issues If you have an issue you can report it here. To solve

SourceBans++ Dev Team 241 Nov 28, 2021
♞ lichess.org: the forever free, adless and open source chess server ♞

lichess.org Lila (li[chess in sca]la) is a free online chess game server focused on realtime gameplay and ease of use. It features a search engine, co

Thibault Duplessis 10.2k Nov 30, 2021
Command the forces of The Project in a battle to rebuild the world after mankind has been nearly destroyed by nuclear missiles. A 100% free and open source real-time strategy game for Windows, macOS, Linux, BSD+

Warzone 2100 Homepage of the Warzone 2100 Project Origins Warzone 2100, released in 1999 and developed by Pumpkin Studios, was a ground-breaking and i

The Warzone 2100 Project 2.1k Nov 30, 2021
TripleA is a turn based strategy game and board game engine, similar to Axis & Allies or Risk.

Download and install TripleA TripleA is a free to play, volunteer run, 100% open source gaming community. Contact-us: Forums: Questions & Help Bug Tra

TripleA 295 Nov 29, 2021
GZDoom is a feature centric port for all Doom engine games, based on ZDoom, adding an OpenGL renderer and powerful scripting capabilities

Welcome to GZDoom! GZDoom is a modder-friendly OpenGL and Vulkan source port based on the DOOM engine Copyright (c) 1998-2021 ZDoom + GZDoom teams, an

Christoph Oelckers 1.2k Nov 21, 2021
Modern reimplementation of the Diablo 1 game engine

Hello my friend, stay a while and listen! freeablo is a modern cross platform reimplementation of the game engine used in Diablo 1. As it is just an e

Tom Mason 2.1k Nov 22, 2021
An open source, turn-based strategy game with a high fantasy theme.

About The Battle for Wesnoth is an Open Source, turn-based tactical strategy game with a high fantasy theme, featuring both singleplayer and online/ho

Battle for Wesnoth 3.5k Nov 30, 2021
⚔️ A cross-platform, open source, and super fast MUD client with scripting in Lua

Mudlet Play immersive, multiplayer, pure-text RPGs on Mudlet. Windows: Linux & MacOS: About • Key Features • Download • How To Use • Roadmap • Credits

Mudlet 484 Nov 24, 2021
An open source re-implementation of RollerCoaster Tycoon 2 🎢

OpenRCT2 An open-source re-implementation of RollerCoaster Tycoon 2. A construction and management simulation video game that simulates amusement park

OpenRCT2 10.1k Nov 28, 2021
SuperTux source code

SuperTux SuperTux is a jump'n'run game with strong inspiration from the Super Mario Bros. games for the various Nintendo platforms. Run and jump throu

SuperTux 1.3k Nov 28, 2021
Read the Internet with complete peace of mind and freedom.

readflow Read your Internet article flow in one place with complete peace of mind and freedom. Features Read articles from anywhere in one place. Save

Nicolas Carlier 126 Nov 24, 2021
A terminal for a more modern age

Terminus is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux Integrated SSH client and connection manager I

Eugene 20.2k Nov 30, 2021
A modern, ultra lightweight and rocket fast Content Management System

Redaxscript A modern, ultra lightweight and rocket fast Content Management System for SQLite, MSSQL, MySQL and PostgreSQL. Installation Clone the repo

redaxscript 246 Nov 10, 2021
[WIP] Ulterius™ server where all the magic happens :rocket: :feelsgood:

Ulterius: Easy Remote Management Interested in sublicensing? Want to use our code in your stack or rebrand it for internal use? Reach out to us at and

Ulterius™ 599 Oct 26, 2021
Free/Libre Action Roleplaying Engine (engine only)

Flare Flare (Free Libre Action Roleplaying Engine) is a simple game engine built to handle a very specific kind of game: single-player 2D action RPGs.

FLARE Team 837 Nov 30, 2021
Comments for static sites. Clone of Disqus, but faster, Opensource and sexy.

Glosa: Comments for static sites. Clone of Disqus, but faster, Opensource and sexy. Amazing reasons to use it Opensource. Very fast, responses between

Glosa commentary system 70 Nov 23, 2021
A Stack Overflow clone for teams (self-hosted)

Scoold - Stack Overflow in a JAR Scoold is a Q&A/knowledge base platform written in Java. The project was created back in 2008, released in 2012 as so

Erudika 552 Nov 21, 2021
Node.js and mongoDB Google Drive Clone

MyDrive MyDrive is an Open Source cloud file storage server (Similar To Google Drive). Host myDrive on your own server or trusted platform and then ac

null 2.6k Nov 23, 2021
Agar.io clone written with Socket.IO and HTML5 canvas

Agar.io Clone CONTRIBUTOR WANTED: I'm really sorry for not have enough time to maintain this project. I'm looking for contributors who willing to keep

Huy 2.7k Nov 20, 2021
A self hosted virtual browser (rabb.it clone) that runs in docker.

n.eko This app uses Web RTC to stream a desktop inside of a docker container, I made this because rabb.it went under and my internet can't handle stre

Nurdism 2k Nov 22, 2021
Mahara ePortfolio 84 Nov 30, 2021
Myflix, a Netflix clone!

Myflix tries to be a somewhat simple and lightweight "DIY Netflix", similar to Plex, streama or Emby, for your DIY NAS, especially aimed at the Raspberry Pi/Odroid/etc ecosystem.

null 283 Nov 28, 2021
Team Kodi 13.1k Nov 23, 2021