Skip to content

ZenKit

ZenKit Logo

ZenKit is a C++-library for loading and saving proprietary ZenGin files and is intended to be a successor to Andre Taulien's ZenLib. ZenKit wrappers for Java and C# are also available in the form of ZenKitCS and ZenKit4J which are also published to NuGet and Maven Central respectively.

ZenKit is used as the file loading and scripting backend for OpenGothic and has recently found adoption in GothicVR.

File Support

The following file types and operations are supported by ZenKit. Requests to support additional file types are welcome and can be submitted to the GitHub repository.

File Type Extension Load1 Save2 Comment
Model Animation .MAN βœ“ Yes ✘ No β€”
Model Hierarchy .MDH βœ“ Yes βœ“ Yes β€”
Model Mesh .MDM βœ“ Yes βœ“ Yes Saving is only partially supported
Model .MDL βœ“ Yes βœ“ Yes Saving is only partially supported
Morph Mesh .MMB βœ“ Yes ✘ No β€”
Multi Resolution Mesh .MRM βœ“ Yes βœ“ Yes β€”
Mesh .MSH βœ“ Yes βœ“ Yes Saving is only partially supported
Daedalus Script .DAT βœ“ Yes ✘ No A VM implementation is available (see Daedalus VM)
Texture .TEX βœ“ Yes ~ Yes There is currently no API to alter image data
Font .FNT βœ“ Yes βœ“ Yes β€”
ZenGin Archive .ZEN βœ“ Yes βœ“ Yes β€”
Text/Cutscenes .BIN, .CSL, .DAT, .LSC βœ“ Yes βœ“ Yes β€”
Model Script .MDS, .MSB βœ“ Yes ✘ No β€”
Virtual File System .VDF βœ“ Yes βœ“ Yes Allows full integration with the host file system

Daedalus VM

Along facilities to read and write most resource files you might find in a typical Gothic installation, ZenKit also includes a virtual machine which can execute Daedalus scripts. An extensive API is available to inspect the files, add external handlers and bind Daedalus classes into C++-structs. Bindings for the original classes are available as an extension to ZenKit and available to the C# and Java wrappers natively.

Documentation

Additional documentation for ZenKit can be found at zk.gothickit.dev.


  1. ZenKit is able to fully load these files ↩

  2. ZenKit is able to save these files at least partially ↩