Make reusing proprietary building blocks library for Virtools a little bit easier.
The goal of this project is to make it possible to use building blocks library built for older Virtools versions in relatively newer Virtools authoring environments.
Currently this project focuses specifically on custom building blocks found in Ballance, and the target Virtools platform is Virtools 2.5.
Targeting Virtools 3.0 or 3.5 is possible, but requires quite some extra work (needs shims for VxMath as well).
Yes, this project actually works (as a proof of concept). Building blocks are registered correctly, can be added to new compositions, and settings work as expected. However, at the time of writing, few building blocks will correctly execute, and some build blocks cause errors on file load.
- Run
scripts/gen.py
to generate the headers and trivial implementations of the shim. It needs the pharos-demangle module, which you may have to build and install yourself. - Patch the generated sources with the patches found in the
patches
folder. - Build the project. You have to use the 32-bit version of MSVC (the
msvc_x86
environment if you are using Visual Studio). Don't forget to set the value forVIRTOOLS_INCLUDE_DIR
andVIRTOOLS_LIBS_DIR
to appropriate paths. Place the generatedcks.dll
in the root directory of your Virtools install. - Patch the building block library DLL files with
scripts/bblibpatcher.py
. Place the patched DLL files in theBuildingBlocks
folder in your Virtools install. - Try it!
Personally I would recommend doing the first two steps in a UNIX-like environment (WSL would suffice), since you may have to build stuff with non-trivial dependencies from source and deal with tools from GNU.
The only incomplete part that I can think of in this project right now is virtual function call mapping.
We need to annotate the type of this
pointer of all virtual calls, and map the offsets to new
ones. Fortunately, thanks to prior work of Gamepiaynmo,
amount of work required for it has been drastically reduced.
If you are interested, feel free to contact me. No prior experience of reverse engineering required (I don't have any of that, either)!
If you want to familiarize yourself with the project first, check out the following links:
- A guide to using shims to deal with incompatible runtime environments
- CK2 method signature mapping spread sheet
Quando parata est.