public static void CreateDatWad(QbKey songQk, EndianType endianType, string datFilename, string wadFilename, string songFilename, string guitarFilename, string rhythmFilename, string previewFilename)
{
QbKey[] keys = new QbKey[4];
int[] offsets = new int[5];
int[] sizes = new int[4];
FileHelper.Delete(wadFilename);
FileHelper.Delete(datFilename);
using (FileStream fsWad = File.OpenWrite(wadFilename))
{
offsets[0] = (int)fsWad.Position;
keys[0] = QbKey.Create(string.Format("{0}_guitar", songQk.Text));
sizes[0] = (int)writeFsbToStream(fsWad, guitarFilename, string.Concat(keys[0].Text, ".wav"));
offsets[1] = (int)fsWad.Position;
keys[1] = QbKey.Create(string.Format("{0}_preview", songQk.Text));
sizes[1] = (int)writeFsbToStream(fsWad, previewFilename, string.Concat(keys[1].Text, ".wav"));
offsets[2] = (int)fsWad.Position;
keys[2] = QbKey.Create(string.Format("{0}_rhythm", songQk.Text));
sizes[2] = (int)writeFsbToStream(fsWad, rhythmFilename, string.Concat(keys[2].Text, ".wav"));
offsets[3] = (int)fsWad.Position;
keys[3] = QbKey.Create(string.Format("{0}_song", songQk.Text));
sizes[3] = (int)writeFsbToStream(fsWad, songFilename, string.Concat(keys[3].Text, ".wav"));
offsets[4] = (int)fsWad.Position;
fsWad.Flush();
}
using (FileStream fsDat = File.OpenWrite(datFilename))
{
using (BinaryEndianWriter bw = new BinaryEndianWriter(fsDat))
{
int l = offsets[3] + sizes[3];
if (l % 16 != 0)
l += 16 - (l % 16);
bw.Write((uint)keys.Length, endianType);
bw.Write((uint)l, endianType);
for (int i = 0; i < offsets.Length - 1; i++)
{
bw.Write(keys[i].Crc, endianType);
bw.Write(offsets[i], endianType);
bw.Write(sizes[i], endianType);
bw.Write(new byte[] { 0,0,0,0,0,0,0,0 });
}
fsDat.Flush();
}
}
}