diff --git a/SabreTools.Data.Models/N3DS/Enums.cs b/SabreTools.Data.Models/N3DS/Enums.cs index a5bac17d..fd2bcb11 100644 --- a/SabreTools.Data.Models/N3DS/Enums.cs +++ b/SabreTools.Data.Models/N3DS/Enums.cs @@ -226,4 +226,18 @@ namespace SabreTools.Data.Models.N3DS Optional = 0x4000, Shared = 0x8000, } + + /// + public enum Z3DSMetadataItemType : byte + { + /// + /// End marker + /// + End = 0, + + /// + /// Binary metadata + /// + Binary = 1, + } } diff --git a/SabreTools.Data.Models/N3DS/Z3DSMetadata.cs b/SabreTools.Data.Models/N3DS/Z3DSMetadata.cs new file mode 100644 index 00000000..1a799bee --- /dev/null +++ b/SabreTools.Data.Models/N3DS/Z3DSMetadata.cs @@ -0,0 +1,20 @@ +namespace SabreTools.Data.Models.N3DS +{ + /// + /// Metadata block whose size is defined by + /// + /// + public class Z3DSMetadata + { + /// + /// Metadata version + /// + /// Currently only a value of 1 is expected + public byte Version { get; set; } + + /// + /// Set of metadata entries in the block + /// + public Z3DSMetadataItem[] Items { get; set; } = []; + } +} diff --git a/SabreTools.Data.Models/N3DS/Z3DSMetadataItem.cs b/SabreTools.Data.Models/N3DS/Z3DSMetadataItem.cs new file mode 100644 index 00000000..e8476f3f --- /dev/null +++ b/SabreTools.Data.Models/N3DS/Z3DSMetadataItem.cs @@ -0,0 +1,38 @@ +namespace SabreTools.Data.Models.N3DS +{ + /// + /// Metadata item entry + /// + /// + public class Z3DSMetadataItem + { + /// + /// Item type + /// + public Z3DSMetadataItemType Type { get; set; } + + /// + /// Length of the name field + /// + public byte NameLength { get; set; } + + /// + /// Length of the data field + /// + public ushort DataLength { get; set; } + + /// + /// Name encoded as bytes whose length is given + /// by + /// + /// Ignored if is End + public byte[] Name { get; set; } = []; + + /// + /// Data encoded as bytes whose length is given + /// by + /// + /// Ignored if is End + public byte[] Data { get; set; } = []; + } +}