/virtools-shimmer

Reuse proprietary building block libraries in relatively new Virtools releases.

Primary LanguagePythonOtherNOASSERTION

Virtools Shimmer

Make reusing proprietary building blocks library for Virtools a little bit easier.

Quid est?

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).

Quid ais?

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.

Virtools with Building Blocks from Ballance

Quam utor?

  • 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 for VIRTOOLS_INCLUDE_DIR and VIRTOOLS_LIBS_DIR to appropriate paths. Place the generated cks.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 the BuildingBlocks 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.

Quid contribuere?

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:

Quando perficiendum?

Quando parata est.