mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-05-18 19:31:17 +03:00
55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
namespace ScrLib;
|
|
|
|
public class ScrParser
|
|
{
|
|
public static ScrFile ReadFile(string filePath)
|
|
{
|
|
var fs = new FileStream(filePath, FileMode.Open);
|
|
|
|
var scrFile = new ScrFile();
|
|
|
|
scrFile.Magic = fs.ReadInt32LittleEndian();
|
|
|
|
scrFile.EntryCount = fs.ReadInt32LittleEndian();
|
|
scrFile.Entries = [];
|
|
|
|
for (var i = 0; i < scrFile.EntryCount; i++)
|
|
{
|
|
var entry = new ScrEntry();
|
|
entry.Title = fs.ReadLengthPrefixedString();
|
|
|
|
// тут игра дополнительно вычитывает ещё 1 байт, видимо как \0 для char*
|
|
fs.ReadByte();
|
|
|
|
entry.Index = fs.ReadInt32LittleEndian();
|
|
entry.InnerCount = fs.ReadInt32LittleEndian();
|
|
entry.Inners = [];
|
|
for (var i1 = 0; i1 < entry.InnerCount; i1++)
|
|
{
|
|
var entryInner = new ScrEntryInner();
|
|
entryInner.ScriptIndex = fs.ReadInt32LittleEndian();
|
|
|
|
entryInner.UnkInner2 = fs.ReadInt32LittleEndian();
|
|
entryInner.UnkInner3 = fs.ReadInt32LittleEndian();
|
|
entryInner.UnkInner4 = fs.ReadInt32LittleEndian();
|
|
entryInner.UnkInner5 = fs.ReadInt32LittleEndian();
|
|
|
|
entryInner.ArgumentsCount = fs.ReadInt32LittleEndian();
|
|
|
|
entryInner.Arguments = [];
|
|
|
|
for (var i2 = 0; i2 < entryInner.ArgumentsCount; i2++)
|
|
{
|
|
entryInner.Arguments.Add(fs.ReadInt32LittleEndian());
|
|
}
|
|
|
|
entryInner.UnkInner7 = fs.ReadInt32LittleEndian();
|
|
entry.Inners.Add(entryInner);
|
|
}
|
|
|
|
scrFile.Entries.Add(entry);
|
|
}
|
|
|
|
return scrFile;
|
|
}
|
|
} |