diff --git a/SabreTools.Data.Models/N3DS/Constants.cs b/SabreTools.Data.Models/N3DS/Constants.cs index 7931412e..12483d73 100644 --- a/SabreTools.Data.Models/N3DS/Constants.cs +++ b/SabreTools.Data.Models/N3DS/Constants.cs @@ -22,5 +22,9 @@ namespace SabreTools.Data.Models.N3DS public static byte[] RomfsCounter = [0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; public const int CXTExtendedDataHeaderLength = 0x800; + + // Z3DS + + public const string Z3DSMagicNumber = "Z3DS"; } } diff --git a/SabreTools.Data.Models/N3DS/Z3DSFileHeader.cs b/SabreTools.Data.Models/N3DS/Z3DSFileHeader.cs new file mode 100644 index 00000000..44674c45 --- /dev/null +++ b/SabreTools.Data.Models/N3DS/Z3DSFileHeader.cs @@ -0,0 +1,52 @@ +namespace SabreTools.Data.Models.N3DS +{ + /// + /// File header for Zstd-compressed 3DS data + /// + /// + public class Z3DSFileHeader + { + /// + /// Magic ID, always 'Z3DS' + /// + /// 4 bytes + public string Magic { get; set; } = string.Empty; + + /// + /// Magic ID of the compressed structure + /// + /// 4 bytes + public string UnderlyingMagic { get; set; } = string.Empty; + + /// + /// Header version + /// + /// Currently only a value of 1 is expected + public byte Version { get; set; } + + /// + /// Reserved + /// + public byte Reserved { get; set; } + + /// + /// Header size + /// + public ushort HeaderSize { get; set; } + + /// + /// Metadata size + /// + public uint MetadataSize { get; set; } + + /// + /// Compressed size of the structure data + /// + public ulong CompressedSize { get; set; } + + /// + /// Uncompressed size of the structure data + /// + public ulong UncompressedSize { get; set; } + } +}