Add format metadata to --no-split
This commit is contained in:
parent
7c395d9f8f
commit
99ab3a04b0
@ -46,6 +46,22 @@ namespace gitadora_texbintool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class FormatInfo
|
||||||
|
{
|
||||||
|
public string Filename;
|
||||||
|
public byte FormatType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FormatMetadata
|
||||||
|
{
|
||||||
|
public List<FormatInfo> FormatInfo;
|
||||||
|
|
||||||
|
public FormatMetadata()
|
||||||
|
{
|
||||||
|
FormatInfo = new List<FormatInfo>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
static int ReadInt32(BinaryReader reader)
|
static int ReadInt32(BinaryReader reader)
|
||||||
@ -457,6 +473,26 @@ namespace gitadora_texbintool
|
|||||||
return texInfoList;
|
return texInfoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FormatMetadata DeserializeFormatMetadata(string filename)
|
||||||
|
{
|
||||||
|
XmlSerializer serializer = new XmlSerializer(typeof(FormatMetadata));
|
||||||
|
|
||||||
|
StreamReader reader = new StreamReader(filename);
|
||||||
|
var formatMetdataList = (FormatMetadata)serializer.Deserialize(reader);
|
||||||
|
reader.Close();
|
||||||
|
|
||||||
|
for (var index = 0; index < formatMetdataList.FormatInfo.Count; index++)
|
||||||
|
{
|
||||||
|
formatMetdataList.FormatInfo[index] = new FormatInfo
|
||||||
|
{
|
||||||
|
Filename = formatMetdataList.FormatInfo[index].Filename,
|
||||||
|
FormatType = formatMetdataList.FormatInfo[index].FormatType,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return formatMetdataList;
|
||||||
|
}
|
||||||
|
|
||||||
static void ParseTexbinFile(string filename, bool splitImages = true)
|
static void ParseTexbinFile(string filename, bool splitImages = true)
|
||||||
{
|
{
|
||||||
var outputPath = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename));
|
var outputPath = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename));
|
||||||
@ -518,6 +554,7 @@ namespace gitadora_texbintool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var formatMetadata = new FormatMetadata();
|
||||||
foreach (var entry in entries)
|
foreach (var entry in entries)
|
||||||
{
|
{
|
||||||
reader.BaseStream.Seek(entry.DataOffset, SeekOrigin.Begin);
|
reader.BaseStream.Seek(entry.DataOffset, SeekOrigin.Begin);
|
||||||
@ -550,6 +587,11 @@ namespace gitadora_texbintool
|
|||||||
rectInfoList.Add(rectInfo);
|
rectInfoList.Add(rectInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
formatMetadata.FormatInfo.Add(new FormatInfo{
|
||||||
|
Filename = entry.Filename,
|
||||||
|
FormatType = data[0x2c]
|
||||||
|
});
|
||||||
|
|
||||||
foreach (var rectInfo in rectInfoList)
|
foreach (var rectInfo in rectInfoList)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -582,6 +624,7 @@ namespace gitadora_texbintool
|
|||||||
Console.WriteLine("Saving {0}...", outputFilename);
|
Console.WriteLine("Saving {0}...", outputFilename);
|
||||||
|
|
||||||
File.WriteAllBytes(outputFilename, extractedData);
|
File.WriteAllBytes(outputFilename, extractedData);
|
||||||
|
// File.WriteAllBytes(outputFilename.Replace(ext, ".bin"), data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -593,6 +636,11 @@ namespace gitadora_texbintool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!splitImages)
|
||||||
|
{
|
||||||
|
Serialize<FormatMetadata>(formatMetadata, Path.Combine(outputPath, "_metadata-format.xml"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -656,8 +704,8 @@ namespace gitadora_texbintool
|
|||||||
|
|
||||||
static void CreateTexbinFile(string pathname, bool generateRectSection = true, bool compressedData = true)
|
static void CreateTexbinFile(string pathname, bool generateRectSection = true, bool compressedData = true)
|
||||||
{
|
{
|
||||||
var filelist = Directory.GetFiles(pathname).Where(x => !x.ToLower().EndsWith("_metadata.xml")).ToArray();
|
var filelist = Directory.GetFiles(pathname).Where(x => !x.ToLower().EndsWith(".xml")).ToArray();
|
||||||
var filelist_unique = filelist.Select(Path.GetFileNameWithoutExtension).Distinct().Where(x => !x.ToLower().EndsWith("_metadata.xml")).ToList();
|
var filelist_unique = filelist.Select(Path.GetFileNameWithoutExtension).Distinct().Where(x => !x.ToLower().EndsWith(".xml")).ToList();
|
||||||
filelist_unique = filelist_unique.Select(x => x.ToUpper()).ToList();
|
filelist_unique = filelist_unique.Select(x => x.ToUpper()).ToList();
|
||||||
|
|
||||||
if (filelist_unique.Count != filelist.Length)
|
if (filelist_unique.Count != filelist.Length)
|
||||||
@ -666,6 +714,24 @@ namespace gitadora_texbintool
|
|||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var formatMetadata = new FormatMetadata();
|
||||||
|
if (File.Exists(Path.Combine(pathname, "_metadata-format.xml")))
|
||||||
|
{
|
||||||
|
formatMetadata = DeserializeFormatMetadata(Path.Combine(pathname, "_metadata-format.xml"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var filename in filelist_unique)
|
||||||
|
{
|
||||||
|
var data = new FormatInfo
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
FormatType = 0,
|
||||||
|
};
|
||||||
|
formatMetadata.FormatInfo.Add(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var nameSection = CreateNameSection(filelist_unique);
|
var nameSection = CreateNameSection(filelist_unique);
|
||||||
|
|
||||||
var dataSection = new List<byte>();
|
var dataSection = new List<byte>();
|
||||||
@ -683,6 +749,12 @@ namespace gitadora_texbintool
|
|||||||
data = gitadora_textool.Program.CreateImageCore(data, true);
|
data = gitadora_textool.Program.CreateImageCore(data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var formatTypeList = formatMetadata.FormatInfo.Where(x =>
|
||||||
|
String.CompareOrdinal(Path.GetFileNameWithoutExtension(filelist_unique[i]),
|
||||||
|
x.Filename) == 0).ToList();
|
||||||
|
|
||||||
|
data[0x2c] = formatTypeList.Count > 0 ? formatTypeList[0].FormatType : data[0x2c];
|
||||||
|
|
||||||
fileinfoSection.AddRange(BitConverter.GetBytes(0));
|
fileinfoSection.AddRange(BitConverter.GetBytes(0));
|
||||||
fileinfoSection.AddRange(BitConverter.GetBytes(data.Length + 0x08));
|
fileinfoSection.AddRange(BitConverter.GetBytes(data.Length + 0x08));
|
||||||
fileinfoSection.AddRange(BitConverter.GetBytes(0x40 + nameSection.Count + (filelist_unique.Count * 0x0c) + dataSection.Count));
|
fileinfoSection.AddRange(BitConverter.GetBytes(0x40 + nameSection.Count + (filelist_unique.Count * 0x0c) + dataSection.Count));
|
||||||
@ -739,7 +811,7 @@ namespace gitadora_texbintool
|
|||||||
|
|
||||||
var rectNameFilelist = rectInfo.RectInfo.Select(x => x.Filename)
|
var rectNameFilelist = rectInfo.RectInfo.Select(x => x.Filename)
|
||||||
.Select(Path.GetFileNameWithoutExtension).Distinct()
|
.Select(Path.GetFileNameWithoutExtension).Distinct()
|
||||||
.Where(x => !x.ToLower().EndsWith("_metadata.xml")).ToList();
|
.Where(x => !x.ToLower().EndsWith(".xml")).ToList();
|
||||||
|
|
||||||
var rectinfoSection = new List<byte>();
|
var rectinfoSection = new List<byte>();
|
||||||
var rectNameSection = CreateNameSection(rectNameFilelist);
|
var rectNameSection = CreateNameSection(rectNameFilelist);
|
||||||
|
Loading…
Reference in New Issue
Block a user