/// <summary> /// Creates an empty FMG configured for the specified version. /// </summary> public FMG(FMGVersion version) { Entries = new List <Entry>(); Version = version; BigEndian = Version == FMGVersion.DemonsSouls; }
internal override void Read(BinaryReaderEx br) { br.AssertByte(0); BigEndian = br.ReadBoolean(); Version = br.ReadEnum8 <FMGVersion>(); br.AssertByte(0); br.BigEndian = BigEndian; bool wide = Version == FMGVersion.DarkSouls3; int fileSize = br.ReadInt32(); br.AssertByte(1); br.AssertByte((byte)(Version == FMGVersion.DemonsSouls ? 0xFF : 0x00)); br.AssertByte(0); br.AssertByte(0); int groupCount = br.ReadInt32(); int stringCount = br.ReadInt32(); if (wide) { br.AssertInt32(0xFF); } long stringOffsetsOffset; if (wide) { stringOffsetsOffset = br.ReadInt64(); } else { stringOffsetsOffset = br.ReadInt32(); } if (wide) { br.AssertInt64(0); } else { br.AssertInt32(0); } Entries = new List <Entry>(groupCount); for (int i = 0; i < groupCount; i++) { int offsetIndex = br.ReadInt32(); int firstID = br.ReadInt32(); int lastID = br.ReadInt32(); if (wide) { br.AssertInt32(0); } br.StepIn(stringOffsetsOffset + offsetIndex * (wide ? 8 : 4)); { for (int j = 0; j < lastID - firstID + 1; j++) { long stringOffset; if (wide) { stringOffset = br.ReadInt64(); } else { stringOffset = br.ReadInt32(); } int id = firstID + j; string text = stringOffset != 0 ? br.GetUTF16(stringOffset) : null; Entries.Add(new Entry(id, text)); } } br.StepOut(); } }
/// <summary> /// Creates an empty FMG configured for DS1/DS2. /// </summary> public FMG() { Entries = new List <Entry>(); Version = FMGVersion.DarkSouls1; BigEndian = false; }