Releases: hordeforge/unityz
Releases · hordeforge/unityz
Release list
unityz 0.1.10
Added
trees --builtinwith no release argument prints
{"releases":[...]}of the dumps this binary ships.info --jsonon a
UnityFS bundle includes"metadata_only":truewhen default info skipped
object payloads (falsewith--dump/--objects).
unityz 0.1.9
Changed
- Default
infoon 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
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
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.--builtinandtrees --builtinmatch the file's exact
revision; 2021.3.45f2 is no longer an unknown release.
unityz 0.1.6
Changed
infoon 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
.resSnodes stay compressed.--dumpand--objectsstill take the
full-container path. Shader skins in defaultinfo --jsonare omitted
("shaders":[]) because they need those payloads.
unityz 0.1.5
Changed
- Object writer/verify: rewrites now preserve an original object's
alignment-padding bytes and nonzerotruebool 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 andverifyreported 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 --treesmatches more of Unity's MonoBehaviour serialization:
[HideInInspector]publics serialize,[NonSerialized](via the
fdNotSerializedfield 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
(TypeSpecextends, 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. Astring[]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 returnAllocator.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_extensionsincludes.resource.
unityz 0.1.4
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
CLI contract release. Every command now shares one exit-code and output
contract, so scripts can branch on the status without parsing text.
Added
treescommand: exports the type trees embedded in a bundle, WebFile, or
serialized file as a--treesJSON table, MonoBehaviour trees keyed by
their script via the container's MonoScripts (#146).diff --treesdecodes typeless Mono objects for--fields(#143).- Directory
--jsonbatches wrap each file's output as
{"file":...,"results":[...]}, with"error"on a failing member (#140). showaccepts--jsonas 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). extracton a bundle or WebFile extracts the assets inside its nodes by
default;--recursiveis accepted as a no-op (#148).- Batch
extractandfsbwrite each input under<outdir>/<file name>/
so bundles sharing node names cannot overwrite each other (#141, #145). edit --outandtrees --outare 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
diffstopped after the first matched file and ignored
--fields(#139). verify --path-id Non a missing object reported success (#142).edit --patchsilently dropped entries naming missing objects on bundles
and WebFiles; the patch now fails before writing (#150).unityz --versionreported 0.1.1 while the package declared 0.1.2; the
version is now derived frombuild.zig.zon(#144).managedexited 0 with no assemblies found or an unparseable assembly
(#151).