dream_archiveChangelog
Changelog
Every release of dream_archive, newest first. A release marked unreleased is declared in mod.toml and published when its tag is pushed.
Releases
13 declared
-
2.0.0 stable
dream_archive is a Jess package, written in Luau; the Rust crate continues on the rust branch at 1.1.0.
Breaking changes
- The library is the Jess package
org.dreamweave.dream-archive, module@dream-archive, installed with jess rather than Cargo. The Rust cratedream_archivestays at 1.1.0 on crates.io and on this repository'srustbranch, and is no longer developed on main.
org.dreamweave.dream-archive-2.0.0.jpkVerify · sha256 281c27bf86a2…623035730
- Release
- 2.0.0 (stable)
- Size
- 261432 bytes
- SHA-256
- 281c27bf86a2b9ea14dc9baa4959a9a9d213784332acfefcc9a9a9e623035730
- Commit
- 7af9ffda3828
- Package
org.dreamweave.dream-archive- Content digest
- 2542758bf2af0319bcecca13eb44158c43b87733d207eb02f13d647412ee9dc1
- Sources
- 1
Check it yourself:
sha256sum org.dreamweave.dream-archive-2.0.0.jpkmust print the digest above. - The library is the Jess package
-
1.1.0 stable
Relicensed as MIT OR Apache-2.0 and built on l3i 1.1.0.
Changed
- Relicensed from GPL-3.0 to MIT OR Apache-2.0: this is the first release under the new terms, and releases up to and including 1.0.0 stay GPL.
- Requires dream-path 1.1, its first MIT OR Apache-2.0 release.
- l3i 1.1.0 comes from crates.io; the
@dream/archivemodule is unchanged.
dream_archive-1.1.0.crateVerify · sha256 ef05ce9b63b8…01dbc24c7
- Release
- 1.1.0 (stable)
- Size
- 7404128 bytes
- SHA-256
- ef05ce9b63b87ff34e29708aa5d58829608063a64cf236420adbba101dbc24c7
- Commit
- 6cf4005005b5
- Sources
- 1
Check it yourself:
sha256sum dream_archive-1.1.0.cratemust print the digest above. -
1.0.0 stable
First stable release: the Luau binding is an l3i extension providing @dream/archive, every archive family looks entries up by hash, and lookups and zlib reads allocate less.
Breaking changes
- The
luaufeature (luais the old name of the same feature) binds the crate as an l3i extension,luau::ArchiveExtension, providing@dream/archive.dream_archive::lua, themluatypes and thestandalone-luafeature are gone. - Building with the
luaufeature needs l3i's toolchain: clang, lld and cross-language thin LTO. - Every
open*in Luau returns the oneArchivetype;archive:entries()is a view of entry handles, not a table of tables. - Luau entry hashes are integers:
entry.hashandentry.folderHashreplace the old tables and fields, withhashHexandfolderHashHexfor the hex spelling. BA2 hashes aredirectoryHash,fileHashandextensionHash; sizes and offsets aresize,storedSizeandoffseton every format. - Luau integer arguments must be exact:
readEntry(1.5)is an error instead of a rounded read. bsa::Error::InvalidFileRecordFlagsis gone. Nothing returned it: both flag bits of a TES4 file record are read as the format defines them.
Added
get_by_hash,get_id_by_hashandcontains_hashon every archive family,get_idby path, andHashFields::from_numeric.archive:readInto(entry, buffer, offset)in Luau decodes a member straight into abuffer, andarchive:getByHashandarchive:containsHashtake the family's hash shape.- Luau type definitions for the whole module, checked by Luau's own type checker in the tests behind the
luau-analysisfeature. toBuffer()on every Luau builder; onlyba2.Builderhad it.dream_archive::flate2, the re-exportedflate2whoseCompressionset_zlib_leveltakes, so naming a zlib level needs noflate2dependency of your own.
Changed
- Path lookups normalize into a stack buffer instead of allocating:
containsover 4096 distinct paths takes 0.39 ms instead of 1.03 ms (TES3) and 1.43 ms (TES4). - zlib members inflate from the archive through one inflater per thread: a 64 KiB TES4 member reads in 18 µs instead of 68 µs.
- Walking entries from Luau is 5 to 23 times faster than with
mlua, and small calls such ascontainsandreadEntrytake about half as long: 4096 TES3 entries take 0.73 ms instead of 6.15 ms. - dream-path 1.0 and l3i 1.0.0 come from crates.io; Rust 1.92.
Fixed
Dx10Builder::add_dds_bytesandadd_dds_filetake DDS files whose depth field is 1, as many tools write for ordinary textures. A DDS file is a volume texture only when its flags haveDDSD_DEPTHor its caps haveDDSCAPS2_VOLUME.- A cubemap's extended
DX10DDS header has an array size of 1, one cube, as the DDS format and DirectXTex count it: extraction wrote 6, which DirectXTex-based tools read as six cubes, andadd_dds_bytesandadd_dds_filerefused cubemaps saved by texconv. Cubemaps extracted by earlier versions, which say 6 over one cube's data, are still accepted. - Every family matches a lookup path the same way, with dream-path's normalization. BA2 lookups kept repeated separators and dropped a trailing one, so
meshes//door.nifmissed andmeshes/door.nif/found a member a BSA answered the other way round; hash-only TES4 lookups misseda//b/c.nif. Archives without names now hash the normalized path. - Luau
entry.nameis the part of the path after its last separator in every family. For a BA2 entry it was the whole stored path, the same asentry.path. - Luau
entry.folderis""for an entry at the root of a TES3 archive or a BA2, as it was for TES4, instead ofnil;nilmeans the archive stores no names. - The crate builds with only the
ba2feature: it now enables thelz4_flexfeature its compressor needs, which onlybsa-tes4turned on before. Builds with one BSA family alone no longer carry dead code.
Migration
Compose
dream_archive::luau::ArchiveExtensioninto the host's l3iRuntimePlan. A host that still wants thedreamArchiveglobal addsRuntimePolicy::compat_global("@dream/archive", "dreamArchive"). That release's Embedding Luau page listed what scripts must change; the Luau port's documentation replaces it.dream_archive-1.0.0.crateVerify · sha256 fe94718bdde6…1743d2225
- Release
- 1.0.0 (stable)
- Size
- 7408572 bytes
- SHA-256
- fe94718bdde6117e633510a184a036c88bad99d0a745c0d18de21301743d2225
- Commit
- 94f37c74ce28
- Sources
- 1
Check it yourself:
sha256sum dream_archive-1.0.0.cratemust print the digest above. - The
-
0.2.3 stable
Fixed
- TES3 entry hashes are read low half first, so
Entry::hashequalshash_file(path).0.numeric()for the same path.
dream_archive-0.2.3.crateVerify · sha256 25b1eed987e0…4984a149d
- Release
- 0.2.3 (stable)
- Size
- 6689282 bytes
- SHA-256
- 25b1eed987e0302b243cc795cbce18bfc3a1d02db92877edf6bb3784984a149d
- Commit
- 3eaa4d22a03a
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.2.3.cratemust print the digest above. - TES3 entry hashes are read low half first, so
-
0.2.2 stable
Changed
- Rust 1.88, as
mlua0.12 requires.
Fixed
- Fallout 3's voice archives open: their file name block is padded with NUL bytes after the last name.
dream_archive-0.2.2.crateVerify · sha256 5e7837eaef7d…951ff7a73
- Release
- 0.2.2 (stable)
- Size
- 6688798 bytes
- SHA-256
- 5e7837eaef7dd893694b275e94f3e46559514adecdfe503d630332d951ff7a73
- Commit
- 335dd75d1459
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.2.2.cratemust print the digest above. - Rust 1.88, as
-
0.2.0 stable
The Lua API runs on Luau, with camelCase names, and Oblivion's archives open.
Breaking changes
- The Lua bindings build against
mlua0.12;standalone-luaselects Luau instead of LuaJIT. - Lua names are camelCase (
dreamArchive.openPath,archive:readFileRequired), and so are enum values ("bsaTes4","skyrimSe"); constants are UPPER_SNAKE. dream_path0.2 andlz4_flex0.14.
Fixed
- Oblivion's BSAs open. Their version 103 headers set the bit that means XMem compression from version 104 on; it is now ignored for 103, as OpenMW ignores it.
dream_archive-0.2.0.crateVerify · sha256 9b8153b18ab3…39414ae51
- Release
- 0.2.0 (stable)
- Size
- 6688544 bytes
- SHA-256
- 9b8153b18ab32ccc5447f2fb412c2e91c7259374accc12b0d43349139414ae51
- Commit
- 891a4dbde556
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.2.0.cratemust print the digest above. - The Lua bindings build against
-
0.1.6 stable
Added
open_file,open_file_requiredandopen_entry: a member as astd::io::Read, borrowed straight from the archive when it is stored uncompressed.
dream_archive-0.1.6.crateVerify · sha256 b430d6bfd34d…3905fa08f
- Release
- 0.1.6 (stable)
- Size
- 6686453 bytes
- SHA-256
- b430d6bfd34d48ba33ac26ea6d78099e205fbb1b04b54a916bed8bb3905fa08f
- Commit
- 49ec1cf1cb2b
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.6.cratemust print the digest above. -
0.1.5 stable
Added
Dx10Builder::add_archive_entrycopies a DX10 texture's header, chunk records and stored bytes unchanged, instead of rebuilding them.
dream_archive-0.1.5.crateVerify · sha256 a2fb1512b3bd…c892f46b8
- Release
- 0.1.5 (stable)
- Size
- 6684011 bytes
- SHA-256
- a2fb1512b3bd0cce7a79d5b5c8fa2d34dc2b559ca6e0d7232fda651c892f46b8
- Commit
- 275004ee0809
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.5.cratemust print the digest above. -
0.1.1 stable
Builders read files when they write, and can copy entries from an opened archive.
Breaking changes
- Builders write with
write_seek, to anyWrite + Seek;write_tois gone.
Added
add_archive_entryon every builder, andadd_archive_entry_with_compressionon the BA2 and TES4 builders: an entry of an opened archive of the same family, copied when the archive is written.- Stable entry ids:
entries_with_ids,entry_by_id,entry_by_id_requiredandextract_entry_by_id;extracted_lenandextracted_len_by_idfor BA2 and TES4.
Changed
add_fileandadd_dirrecord each source's path and size and read it when the archive is written. A source that changed size in between fails the write.
dream_archive-0.1.1.crateVerify · sha256 5213b694d2b1…3a30c7bce
- Release
- 0.1.1 (stable)
- Size
- 6679730 bytes
- SHA-256
- 5213b694d2b11b6325208dba49f0ae94a37de11331e4ff71149ee933a30c7bce
- Commit
- fe966096a85f
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.1.cratemust print the digest above. - Builders write with
-
0.1.2 stable
Added
dream_pathis re-exported.
Changed
- The
luafeature no longer picks a Lua runtime: the host chooses one through its ownmlua.standalone-luaselects vendored LuaJIT. - Rust 1.87.
dream_archive-0.1.2.crateVerify · sha256 2a92a79eb580…fcf345987
- Release
- 0.1.2 (stable)
- Size
- 6680411 bytes
- SHA-256
- 2a92a79eb58028ad30921937e59b419b6026773c4e8c228559bf73dfcf345987
- Commit
- c07c7f65e0ff
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.2.cratemust print the digest above. -
0.1.4 stable
Added
- A host can add its own Lua methods to the archive userdata:
lua::LuaArchivewitharchive()andpath(),create_module_with_archive_methods,register_archive_methodsandadd_archive_methods.
dream_archive-0.1.4.crateVerify · sha256 26a6ca990278…0c04e539f
- Release
- 0.1.4 (stable)
- Size
- 6681682 bytes
- SHA-256
- 26a6ca990278ecde7e8ec853ab35b3ef6cc3c250063c92b68263cac0c04e539f
- Commit
- f62c6b2bd38c
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.4.cratemust print the digest above. - A host can add its own Lua methods to the archive userdata:
-
0.1.3 stable
Changed
bstrcomes throughdream_pathand is re-exported asdream_archive::bstr; the crate no longer depends on it directly.
dream_archive-0.1.3.crateVerify · sha256 84720935c839…eaa44aafa
- Release
- 0.1.3 (stable)
- Size
- 6680385 bytes
- SHA-256
- 84720935c8390aeac858dd0e6db8c48b2446531aabaafd7a8653907eaa44aafa
- Commit
- 31b8a298bd65
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.3.cratemust print the digest above. -
0.1.0 stable
First release: read, extract and write BA2, TES3 BSA and TES4 BSA archives in pure Rust.
Added
Archive, which detects the family of any supported archive and lists, reads and extracts it.- BA2 GNRL and DX10 reading and extraction; DX10 textures come out as DDS files with headers rebuilt from the archive's metadata. GNMF archives are identified, not extracted.
- TES3 BSA reading, extraction and writing.
- TES4 BSA reading, extraction and writing for versions 103, 104 and 105: zlib and LZ4 frames, string tables, embedded names, and hash-only archives through
extract_to_with_paths. - BA2 GNRL writing, and DX10 writing from DDS files or from texture metadata and raw payloads.
- Legacy filename code pages:
encode_filename,decode_filename_lossyandextract_to_with_encoding. - Parallel extraction behind the
parallelfeature. - Lua bindings through
mluaand vendored LuaJIT, behind theluafeature.
dream_archive-0.1.0.crateVerify · sha256 345dd3d128d5…941ab7323
- Release
- 0.1.0 (stable)
- Size
- 6674592 bytes
- SHA-256
- 345dd3d128d5a2bc571f2977e8ca740861618a8ef737b7cc9c18003941ab7323
- Commit
- 0ee5dcba6cdf
- Sources
- 1
Check it yourself:
sha256sum dream_archive-0.1.0.cratemust print the digest above.