-
Notifications
You must be signed in to change notification settings - Fork 0
faq
What is RVZ? Dolphin's modern disc container (introduced 2022, successor to WIA): partition data is stored decrypted with hash exceptions, PRNG junk is packed with a recovered seed, and every table carries SHA-1 checksums. RVZ files are typically smaller than the source formats and decode byte-exactly to the original disc.
What is the difference between RVZ and WIA?
WIA is the older container (Purge/Bzip2/LZMA/LZMA2, no Zstd, no junk packing, version
compatible 0x00080000). RVZ adds Zstd, chunk packing and the rvz_packed_size field, and
drops Purge. RVZSharp reads both; writes RVZ.
Can Dolphin open files created by RVZSharp?
The writer mirrors Dolphin's ConvertToWIAOrRVZ byte-for-byte at the container level
(same headers, tables, exception offsets, group layout), so yes — Dolphin should open
converted files. Cross-checking with real Dolphin is part of the open validation work.
What are GCZ/CISO/WBFS/TGC/NFS? Legacy GameCube/Wii image formats (compressed GCZ; simple block-compressed CISO/WBI; Wii Backup File System; Tiny GameCube images; encrypted Wii U–era EGGS/NFS images). All are decoded to the same canonical ISO view — see Legacy formats.
How do I verify a conversion?
rvzsharp decode game.rvz game.iso --sha1 $(sha1sum game.iso | cut -d' ' -f1)or, for an original source image: compute the SHA-1 of the source ISO once, then use
--sha1 on every decode. The suite itself proves byte-exactness via round trips.
Why is WBFS conversion slow?
WBFS has a fixed ~9.4 GiB logical size; converting reads the whole logical image even when
the file is mostly empty clusters. Prefer decode then convert game.iso.
Why does NFS need a content directory?
Dolphin treats NFS files as …/content/hif_000000.nfs with the AES key in
…/code/htk.bin. RVZSharp follows the same convention; use Blob.Open(stream, nfsKey, …)
or the library API to supply the key directly.
Which compression should I use?
zstd (default) for most cases; lzma2 for the best ratio on compressible data; none
for speed. Levels 1–9 (Zstd −131072..22, like Dolphin's CLI).
Does RVZSharp decrypt games? It decrypts partition data with the key found in the image itself (the ticket's title key) purely to re-encode it compactly — the decoded ISO is byte-identical to the original encrypted disc. No console keys are used or required.
Why does the junk look periodic every 32 KiB?
The padding PRNG's stream position is defined as offset % 0x8000; junk at any offset is
the generator output at that remainder. That's the format's definition (Dolphin, the Go
reader and RVZSharp all agree), and it's what makes seed-based packing possible.
What happens if junk detection fails?
GetSeed is best-effort: non-PRNG data is stored literally. The output stays fully valid
— just less compressed.
Why CSharp_RVZSharp.sln and not .slnx?
The repository uses the classic .sln solution format, which the .NET CLI fully supports
(dotnet build, dotnet test, dotnet sln add). The slow test project
(RVZSharp.Slow.Tests) is intentionally not part of the solution, so solution-level
test runs are always fast-only.
How are warnings handled?
TreatWarningsAsErrors is enabled — the build must stay at zero warnings.
Where do the format details come from?
Dolphin's C++ source (References/dolphin-master, especially
Source/Core/DiscIO/WIABlob.cpp and WIACompression.cpp) is the source of truth; the Go
reader (References/rvz-1.0.3) and docs/WiaAndRvz.md are cross-references. See
Testing for how the semantics are pinned by tests.