Version 1.3 re-brands "phoenix" as "ZenKit" to avoid confusion with PhoenixTales' Game
of the same name. Basically all APIs have gotten a new look with more appropriate names and a replacement for
phoenix::buffer has been introduced. The build system has also been changed and requires manual intervention when
updating to the new version. A migration guide is available at https://zk.gothickit.dev/library/misc/v1.2-to-v1.3/.
Here are the changes not related to the renamed API.
Breaking Changes
The phoenix CMake target has been renamed to zenkit and the following changes have been made in relation to that
change:
- The following CMake variables have been renamed:
PHOENIX_BUILD_EXAMPLEStoZK_BUILD_EXAMPLESPHOENIX_BUILD_TESTStoZK_BUILD_TESTSPHOENIX_BUILD_SHAREDtoZK_BUILD_SHAREDPHOENIX_INSTALLtoZK_ENABLE_INSTALLPHOENIX_DISABLE_SANIZIZERStoZK_ENABLE_ASAN(Danger: The meaning of this variable has been reversed)
phoenix::vdf_filehas been fully removed. Migrate tozenkit::Vfs!phoenix::way_net::waypointhas been removedphoenix::archive_reader::read_raw_byteshas been removed in favour ofphoenix::archive_reader::read_raw_bytes(size_t)phoenix::model_script::parse_binaryhas been removed in favour ofphoenix::model_script::parsephoenix::vobs::camera_lock_modehas been removed in favour ofphoenix::vobs::sprite_alignmentphoenix::vob::camera_alignmenthas been removed in favour ofphoenix::vob::sprite_camera_facing_modephoenix::symbol::{get,set}_{string,int,float}now take a raw pointer as context.phoenix::cs_camera::frameshas been split intotrajectory_framesandtarget_frames
Other breaking changes:
- [59d7930] The value setters in
DaedalusSymbolnow take regular pointers for the context (instead ofshared_ptr) - [cd8092c]
DaedalusScript::enumerate_instances_by_namenow only enumeratesconstinstances
Features
- [cfec005] XZEN-encoded worlds are now supported. Thanks, @ThielHater!
- [13dbb6a] The member array lengths of
vobs::npcnow have names thanks to a patch by @JucanAndreiDaniel - [bbf0505,ad4a3540] @Try added support for the Nintendo Switch port of Gothic 1 by adding
c_menu_item_frame::frame_pos{x,y}andc_menu_item_flags::hor_selectablein the Daedalus support library - There are two new interfaces for interacting with data which replace
phoenix::buffer:zenkit::Readandzenkit::Write - [535ef54] The
phoenix::meshnow comes with a new API for retrieving raw, un-triangulated polygons from the mesh data - [9caff1b] Added a getter for
DaedalusInstancebound types - [2122d85,7e8b4800,fed97b02,fd58eef2] Added spec-compliant ZenGin Archive parser. This new implementation properly handles
object references and is capable of parsing objects automatically using the newReadArchive::read_objectAPI. - [34b26bc] Added a new
WriteArchiveAPI for creating ZenGin Archives using ZenKit - [c3dbd5e...46e9ea4,6aa96dbc,aba71724,cd2e3d7f,60d49f14,05cbd047,9b694f06] Implement
savefor various object types, including the VOb-tree. These objects can now be
loaded, modified and then saved again using ZenKit only. The objects are:VirtualObjectand its descendants,
CutsceneLibrary,Font,Mesh,ModelHierarchy,Texture,Vfs,MultiResolutionMesh,ModelMesh,Model,World - [fc75d4b] Added
Writeimplemented to write to a given file system path - [338cce7] Added getters and setters for the global
DaedalusVminstance - [369ea8b]
DaedalusVm::print_stack_tracenow reports global state information as well - [f723065,253e29b6] Improved
SaveGamesupport drastically. Save games can now be fully parsed and also created usingZenKitalone. - [202e9b8] Added a
TextureBuilderfor creating new textures from scratch - [a3a408f] Deadalus external functions can now also take a
DaedalusSymbol&as a parameter (instead of just a name) - [d0b8dcf] Add support for loading uncompressed VdfsTool VDFs
- [037db91] Added supported for the ARGB4 texture format
Bugfixes
- [a5cdce4] Fixed possible
nullptr-dereference inVfs::mount_disk - [9d7c3f7] Fixed an integer underflow in
register_default_external - [42efd41] Fixed loading of rigid-body information from save-games.
- [5eb44c8,2b5aa9e8] Fixed some issues with memory leakage in the
Vfs - [713480b] Fixed a dangeling reference issue in
DaedalusVm::register_default_external - [c9acf8e,3d67ed5a] Fixed some broken bounds checks in
DaedalusVmandDaedalusScript - [748962d] Fixed an issue where exported VDF files could not be read in by some tools because the journal was at the incorrect location
- [51540d8] Fixed an issue where the file and directory count was written out-of-order in the VDF export
- [616182a,7dc594e3,36c2e909,f942cf20] Fixed a set of issues preventing files from being read correctly on Windows when MMAP support was disabled.
- [f6ded81] Fixed a segfault which could happen when reading in a world with an empty BSP-tree.
Misc
- Added documentation for all known VObs and their fields. This new documentation can be viewed at
zk.gothickit.dev, and it has been mirrored to the
Gothic Modding Community (GMC)'s page. - [6e71a70]
miohas been dropped and replaced by a custom, simpler memory mapping implementation (zenkit::Mmap) - [1f88732] Sped up
Meshparsing for some Windows systems by up to 15x - [5e60a3a] The VDF export now always outputs the current date as the file's timestamp
- [f53a955] The Daedalus VM's stack is now managed correctly when functions exit with unconsumed data on the stack.
Deprecations
- All APIs in the
phoenixnamespace. Migrate to their analogs in thezenkitnamespace instead! Also see the migration guide