protected override void LoadIndex(GameInfo game)
{
Directory = ServiceLocator.FileStorage.GetDirectoryName(game.Path);
using (var file = ServiceLocator.FileStorage.OpenFileRead(game.Path))
{
var br = new BinaryReader(file);
while (br.BaseStream.Position < br.BaseStream.Length)
{
var tag = System.Text.Encoding.UTF8.GetString(br.ReadBytes(4));
br.ReadUInt32BigEndian();
switch (tag)
{
case "DCHR":
case "DIRF":
var charset = ReadResTypeList(br);
CharsetResources = new ReadOnlyCollection<Resource>(charset);
break;
case "DOBJ":
ReadDirectoryOfObjects(br);
break;
case "RNAM":
ReadRoomNames(br);
break;
case "DROO":
case "DIRR":
var rooms = ReadResTypeList(br);
RoomResources = new ReadOnlyCollection<Resource>(rooms);
break;
case "DSCR":
case "DIRS":
var scripts = ReadResTypeList(br);
ScriptResources = new ReadOnlyCollection<Resource>(scripts);
break;
case "DRSC":
var roomScripts = ReadResTypeList(br);
RoomScriptResources = new ReadOnlyCollection<Resource>(roomScripts);
break;
case "DCOS":
case "DIRC":
var costumes = ReadResTypeList(br);
CostumeResources = new ReadOnlyCollection<Resource>(costumes);
break;
case "MAXS":
ReadMaxSizes(br);
break;
case "DIRN":
case "DSOU":
var sounds = ReadResTypeList(br);
SoundResources = new ReadOnlyCollection<Resource>(sounds);
break;
case "AARY":
ReadArrayFromIndexFile(br);
break;
case "ANAM": // Used by: The Dig, FT
{
var num = br.ReadUInt16();
AudioNames = new string[num];
for (int i = 0; i < num; i++)
{
AudioNames[i] = br.ReadBytes(9).GetText();
}
}
break;
// default:
// Console.Error.WriteLine("Unknown tag {0} found in index file directory", tag);
// break;
}
}
}
}