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_EXAMPLES
toZK_BUILD_EXAMPLES
PHOENIX_BUILD_TESTS
toZK_BUILD_TESTS
PHOENIX_BUILD_SHARED
toZK_BUILD_SHARED
PHOENIX_INSTALL
toZK_ENABLE_INSTALL
PHOENIX_DISABLE_SANIZIZERS
toZK_ENABLE_ASAN
(Danger: The meaning of this variable has been reversed)
phoenix::vdf_file
has been fully removed. Migrate tozenkit::Vfs
!phoenix::way_net::waypoint
has been removedphoenix::archive_reader::read_raw_bytes
has been removed in favour ofphoenix::archive_reader::read_raw_bytes(size_t)
phoenix::model_script::parse_binary
has been removed in favour ofphoenix::model_script::parse
phoenix::vobs::camera_lock_mode
has been removed in favour ofphoenix::vobs::sprite_alignment
phoenix::vob::camera_alignment
has been removed in favour ofphoenix::vob::sprite_camera_facing_mode
phoenix::symbol::{get,set}_{string,int,float}
now take a raw pointer as context.phoenix::cs_camera::frames
has been split intotrajectory_frames
andtarget_frames
Other breaking changes:
- [59d7930] The value setters in
DaedalusSymbol
now take regular pointers for the context (instead ofshared_ptr
) - [cd8092c]
DaedalusScript::enumerate_instances_by_name
now only enumeratesconst
instances
Features
- [cfec005] XZEN-encoded worlds are now supported. Thanks, @ThielHater!
- [13dbb6a] The member array lengths of
vobs::npc
now 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_selectable
in the Daedalus support library - There are two new interfaces for interacting with data which replace
phoenix::buffer
:zenkit::Read
andzenkit::Write
- [535ef54] The
phoenix::mesh
now comes with a new API for retrieving raw, un-triangulated polygons from the mesh data - [9caff1b] Added a getter for
DaedalusInstance
bound 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_object
API. - [34b26bc] Added a new
WriteArchive
API for creating ZenGin Archives using ZenKit - [c3dbd5e...46e9ea4,6aa96dbc,aba71724,cd2e3d7f,60d49f14,05cbd047,9b694f06] Implement
save
for various object types, including the VOb-tree. These objects can now be
loaded, modified and then saved again using ZenKit only. The objects are:VirtualObject
and its descendants,
CutsceneLibrary
,Font
,Mesh
,ModelHierarchy
,Texture
,Vfs
,MultiResolutionMesh
,ModelMesh
,Model
,World
- [fc75d4b] Added
Write
implemented to write to a given file system path - [338cce7] Added getters and setters for the global
DaedalusVm
instance - [369ea8b]
DaedalusVm::print_stack_trace
now reports global state information as well - [f723065,253e29b6] Improved
SaveGame
support drastically. Save games can now be fully parsed and also created usingZenKit
alone. - [202e9b8] Added a
TextureBuilder
for 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
DaedalusVm
andDaedalusScript
- [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]
mio
has been dropped and replaced by a custom, simpler memory mapping implementation (zenkit::Mmap
) - [1f88732] Sped up
Mesh
parsing 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
phoenix
namespace. Migrate to their analogs in thezenkit
namespace instead! Also see the migration guide