Skip to content

[release] v1.3.0

Latest
Compare
Choose a tag to compare
@lmichaelis lmichaelis released this 20 Sep 18:58
· 17 commits to main since this release
313135f

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 to ZK_BUILD_EXAMPLES
    • PHOENIX_BUILD_TESTS to ZK_BUILD_TESTS
    • PHOENIX_BUILD_SHARED to ZK_BUILD_SHARED
    • PHOENIX_INSTALL to ZK_ENABLE_INSTALL
    • PHOENIX_DISABLE_SANIZIZERS to ZK_ENABLE_ASAN (Danger: The meaning of this variable has been reversed)
  • phoenix::vdf_file has been fully removed. Migrate to zenkit::Vfs!
  • phoenix::way_net::waypoint has been removed
  • phoenix::archive_reader::read_raw_bytes has been removed in favour of phoenix::archive_reader::read_raw_bytes(size_t)
  • phoenix::model_script::parse_binary has been removed in favour of phoenix::model_script::parse
  • phoenix::vobs::camera_lock_mode has been removed in favour of phoenix::vobs::sprite_alignment
  • phoenix::vob::camera_alignment has been removed in favour of phoenix::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 into trajectory_frames and target_frames

Other breaking changes:

  • [59d7930] The value setters in DaedalusSymbol now take regular pointers for the context (instead of shared_ptr)
  • [cd8092c] DaedalusScript::enumerate_instances_by_name now only enumerates const 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} and c_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 and zenkit::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 new ReadArchive::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 using ZenKit 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 in Vfs::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 and DaedalusScript
  • [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 the zenkit namespace instead! Also see the migration guide