Adds `crucible nwsync emit` and `crucible nwsync assemble`, the split replacement for upstream nwn_nwsync_write, which cannot be used because it wants every hak, the TLK and the module present in one run on one disk. emit explodes one artifact — a .hak/.erf or a loose file such as the TLK — into NWSync blobs (NWCompressedBuffer framing, magic NSYC, zstd) plus a NSYM v3 manifest describing only that artifact, with the same .json sidecar upstream writes. Blob names are the sha1 of the uncompressed bytes, restypes nss/ndb/gic are always skipped, an unresolvable restype is a hard error, a resource over 15 MB fails closed, and no latest or .origin file is ever written. assemble merges the per-artifact manifests into one, reading no bulk data. The merge rule is resref shadowing, not concatenation: a resref present in more than one artifact resolves to the earliest artifact in --order, the way the game resolves it. It refuses to merge across mismatched emitter versions, and takes --group-id from the caller (1 current, 2 testing; 0 is absent). Refs #53.
12 lines
327 B
Go
12 lines
327 B
Go
// Command crucible-nwsync is the standalone nwsync builder (equivalent to
|
|
// `crucible nwsync`). A single-token binary keeps consumer wrapper scripts simple.
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"git.westgate.pw/ShadowsOverWestgate/sow-tools/internal/dispatch"
|
|
)
|
|
|
|
func main() { os.Exit(dispatch.RunBuilder("nwsync", os.Args[1:])) }
|