Skip to content

Releases: hordeforge/unityz

unityz 0.1.10

Choose a tag to compare

@github-actions github-actions released this 14 Sep 17:30
4f21263

Added

  • trees --builtin with no release argument prints
    {"releases":[...]} of the dumps this binary ships. info --json on a
    UnityFS bundle includes "metadata_only":true when default info skipped
    object payloads (false with --dump / --objects).

unityz 0.1.9

Choose a tag to compare

@github-actions github-actions released this 14 Sep 12:25
d97fd0f

Changed

  • Default info on a format 2-8 SerializedFile inside UnityFS decompresses
    only the 16-byte header and the trailing metadata, not the object-data
    hole in between. Format 9+ still uses the [0, data_offset) prefix.
  • Built-in tree tests walk the shipped release table instead of a
    hardcoded count, so adding a dump cannot leave the lookup coverage stale.

unityz 0.1.8

Choose a tag to compare

@github-actions github-actions released this 14 Sep 09:06
c99e631

Added

  • Built-in engine-class type trees for Unity 2019.4.41f2, 2020.3.49f1,
    2021.3.58f1, 2022.3.76f1, and 2023.2.18f1 (latest f1/f2 on each LTS
    line in TypeTreeDumps), packed the same way as 2022.3.62f2 and
    2021.3.45f2. Matching stays exact by release string.

unityz 0.1.7

Choose a tag to compare

@github-actions github-actions released this 14 Sep 07:45
e819955

Added

  • Built-in engine-class type trees for Unity 2021.3.45f2 (291 classes),
    packed from the AssetRipper TypeTreeDumps StructsDump the same way as
    2022.3.62f2. --builtin and trees --builtin match the file's exact
    revision; 2021.3.45f2 is no longer an unknown release.

unityz 0.1.6

Choose a tag to compare

@github-actions github-actions released this 14 Sep 06:17
154332a

Changed

  • info on a UnityFS bundle reads the block table and decompresses only
    the blocks that cover each embedded SerializedFile's metadata (type
    trees and object table). Object payloads, later blocks, and sidecar
    .resS nodes stay compressed. --dump and --objects still take the
    full-container path. Shader skins in default info --json are omitted
    ("shaders":[]) because they need those payloads.

unityz 0.1.5

Choose a tag to compare

@github-actions github-actions released this 05 Sep 05:47
fe08154

Changed

  • Object writer/verify: rewrites now preserve an original object's
    alignment-padding bytes and nonzero true bool bytes. Unity leaves
    struct memory in padding and stores a bool as any nonzero byte, so
    zero-padded rewrites differed from the original in those meaningless
    bytes and verify reported correct decodes as failures. verify
    passes the original buffer through (writeObjectPreserving); edits
    still write normalized zero pads. Class-114 verify round trips after
    the fix: The Forest 324→20, Green Hell 2617→1698, Stranded Deep
    540→386, Raft sharedassets0 354→74, Raft level0 25→21.
  • Verify: NaN payloads no longer count as differences. An f32 NaN
    widened to the value tree's f64 and cast back cannot reproduce the
    original payload, and Unity's data holds quiet NaNs whose exact bits
    no rewrite preserves (Raft's TMPro font gradients). After this,
    verify's bytes-differ count is zero across every test game; the
    remaining failures are all read failures from older class layouts.
  • managed --trees matches more of Unity's MonoBehaviour serialization:
    [HideInInspector] publics serialize, [NonSerialized] (via the
    fdNotSerialized field flag) does not, delegates never do, bools and
    nested-record byte/char/short fields occupy their own 4-byte cells
    while top-level byte/char/short runs pack, strings inside arrays pad
    per element, native engine structs (LayerMask, Hash128) use their
    fixed layouts, and generic/cross-assembly base chains resolve
    (TypeSpec extends, one name index over all assemblies).
    Every class-114 object that reads now round-trips byte-exactly
    (bytes-differ zero across all five test games). The remaining
    failures are read failures from data authored by older class layouts
    (documented in features.md).
  • Object reader/writer: strings inside arrays are each 4-aligned, not
    packed into one run. A string[] whose payload is not a multiple of 4
    misread every following element (an out-of-bounds read on Green Hell's
    ConstructionSlot.m_MatchingItems). Round trips: Green Hell class-114
    3546→2594, Raft level0 35→23, The Forest 527→478.
  • Library: the typed views that build variable-length lists (GameObject,
    Font, ComputeShader, the audio mixer and animator families) take the
    caller's allocator and return Allocator.Error!T; they allocated through
    a hard-coded page allocator that was never freed and swallowed
    out-of-memory. Every typed view now carries a doc comment, the library
    root's status paragraph reflects the current module set, and
    asset_extensions includes .resource.

unityz 0.1.4

Choose a tag to compare

@github-actions github-actions released this 05 Sep 01:06
9218681

Creation and built-in-tree release. Callers can now construct a UnityFS bundle
from empty state and obtain exact engine-class layouts without another Unity
asset or a separate type-tree package.

Added

  • A release-indexed built-in engine-class type-tree database, initially for
    Unity 2022.3.62f2; trees --builtin <release> exports it and --builtin
    lets reading commands decode stripped built-in classes (#156).
  • create <spec.json> --out <file> builds a format-22 SerializedFile and
    UnityFS archive from declared trees, object values, and an optional resource
    sidecar, then verifies the result before its atomic write (#157).

unityz 0.1.3

Choose a tag to compare

@github-actions github-actions released this 04 Sep 15:21
b7ee8db

CLI contract release. Every command now shares one exit-code and output
contract, so scripts can branch on the status without parsing text.

Added

  • trees command: exports the type trees embedded in a bundle, WebFile, or
    serialized file as a --trees JSON table, MonoBehaviour trees keyed by
    their script via the container's MonoScripts (#146).
  • diff --trees decodes typeless Mono objects for --fields (#143).
  • Directory --json batches wrap each file's output as
    {"file":...,"results":[...]}, with "error" on a failing member (#140).
  • show accepts --json as a no-op, so scripts can pass the flag uniformly
    (#142).
  • Tag-driven release workflow, this changelog, and prebuilt Linux x86_64 and
    macOS arm64 binaries on each GitHub Release.

Changed

  • Usage errors (unknown flag, missing argument, malformed id) exit 2; read,
    decode, and check failures exit 1; the diagnostic always goes to stderr and
    a failing run writes nothing to stdout (#139, #141, #148, #151).
  • A file that is not a Unity asset is an error for every command instead of
    a per-command empty success (#140).
  • extract on a bundle or WebFile extracts the assets inside its nodes by
    default; --recursive is accepted as a no-op (#148).
  • Batch extract and fsb write each input under <outdir>/<file name>/
    so bundles sharing node names cannot overwrite each other (#141, #145).
  • edit --out and trees --out are rejected over a directory instead of
    overwriting one output file (#147).
  • Every CLI flag is documented in README.md and docs/features.md (#149).

Fixed

  • Directory diff stopped after the first matched file and ignored
    --fields (#139).
  • verify --path-id N on a missing object reported success (#142).
  • edit --patch silently dropped entries naming missing objects on bundles
    and WebFiles; the patch now fails before writing (#150).
  • unityz --version reported 0.1.1 while the package declared 0.1.2; the
    version is now derived from build.zig.zon (#144).
  • managed exited 0 with no assemblies found or an unparseable assembly
    (#151).