sandsmark / genieutils

A library for reading and writing the file formats used in the Genie engine (AoE, AoC, SWGB, etc.)
GNU Lesser General Public License v3.0
24 stars 7 forks source link
age-of-conquerors age-of-empires age-of-empires-ii aoc aoe aoe2 aoe2hd aok game-resources genie genie-engine star-wars-galactic-battlegrounds swgb

genieutils

Genieutils is a library to work with data and asset files of Genie engine games (everything from AoE1 Alpha versions, via SWGB:CC to the Definitive Editions).

Notice that this library is in developement, that means the API will change. Please also backup your files before editing to avoid file corruption because of possible bugs.

This repo is originally a fork of https://github.com/Tapsa/genieutils, but because a lot of stuff doesn't like github forks, it is now a separate repo.

Features

For a lot of stuff it is also possible to convert between different versions of the formats. The only version conversion that has a tool (i. e. you don't need to write code) is the .dat files, though. For e. g. graphics you will have to hook together the SLP and ICM classes yourself with a couple of lines of C++.

Also includes several extra tools.

Command line tools

Graphical tools (requires Qt)

Dependencies

This assumes that you do a recursive clone of the repo or remember to update the submodules, otherwise you need to install zstr, and winiconv when building for Windows.

You can update submodules after cloning the repo or pulling new commits by doing:

git submodule update --init --recursive

Building

The build uses CMake.

mkdir build && cd build
cmake ..
cmake --build .

This creates a genieutils.dll or libgenieutils.so file.

To create a static library instead, use the GENIEUTILS_STATIC_BUILD flag:

cmake .. -DGENIEUTILS_STATIC_BUILD=YES
cmake --build .

Optionally, enable link-time optimization:

cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_IPO=YES
cmake --build .

TODO

File formats used in Genie that are not supported (yet):

In progress (i. e. started on importing code from elsewhere and got bored):