namespace SabreTools.Data.Models.NintendoDisc { /// /// GameCube / Wii disc boot block header (first 0x440 bytes of the disc) /// /// public sealed class DiscHeader { /// /// 6-character ASCII game ID (e.g. "GALE01") /// /// 6 bytes at offset 0x000 public string GameId { get; set; } = string.Empty; /// /// Zero-based disc number for multi-disc games /// public byte DiscNumber { get; set; } /// /// Disc version /// public byte DiscVersion { get; set; } /// /// Non-zero if audio streaming is enabled /// public byte AudioStreaming { get; set; } /// /// Audio streaming buffer size (in 16 KiB units) /// public byte StreamingBufferSize { get; set; } /// /// Unused 0x0E bytes (offsets 0x00A-0x017) /// public byte[] Padding00A { get; set; } = []; /// /// Wii magic word at offset 0x018 (0x5D1C9EA3 for Wii discs, 0 for GameCube) /// public uint WiiMagic { get; set; } /// /// GameCube magic word at offset 0x01C (0xC2339F3D for GameCube discs) /// public uint GCMagic { get; set; } /// /// Null-terminated ASCII game title (up to 0x60 bytes at offset 0x020) /// public string GameTitle { get; set; } = string.Empty; /// /// Non-zero to disable hash verification (GameCube only) /// public byte DisableHashVerification { get; set; } /// /// Non-zero to disable disc encryption (GameCube only) /// public byte DisableDiscEncryption { get; set; } /// /// Unused padding until DOL/FST offset fields at 0x420 /// public byte[] Padding082 { get; set; } = []; /// /// Offset of the main DOL executable (no shift for GameCube; <<2 for Wii) /// public uint DolOffset { get; set; } /// /// Offset of the File System Table (no shift for GameCube; <<2 for Wii) /// public uint FstOffset { get; set; } /// /// Maximum size of the File System Table in bytes /// public uint FstSize { get; set; } /// /// Remaining bytes to complete the 0x440 header /// public byte[] Padding42C { get; set; } = []; } }