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.
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.
cpxtool
: command line tool to work with campaign and scenario files (view details and extract).genie-datextract
: convert .dat files between game versions, or just extract to raw.drstool
: list and/or extract contents from .drs files (graphics, sound, etc.)pcriotool
: list or show a single string from the language DLLs.genie-bindiff
: very simple binary differ (mostly for debugging, better to use dhex if you need something serious).picviewer
: display SLP/SMP/SMX files.drsexplorer
: browse and show SLP/SMP/SMX graphics in a DRS archive.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
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 .
File formats used in Genie that are not supported (yet):
In progress (i. e. started on importing code from elsewhere and got bored):
martin/dds
branch.