From 2a78bbebda8ee30540bb0c1b1a273c8bc84a002c Mon Sep 17 00:00:00 2001 From: bird_egop Date: Sat, 22 Nov 2025 06:53:07 +0300 Subject: [PATCH] parse binary varset file --- ParkanPlayground/Program.cs | 14 +++++++-- VarsetLib/BinaryVarsetFile.cs | 3 ++ VarsetLib/BinaryVarsetFileParser.cs | 46 +++++++++++++++++++++++++++++ VarsetLib/BinaryVarsetItem.cs | 15 ++++++++++ VarsetLib/VarsetLib.csproj | 4 ++- 5 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 VarsetLib/BinaryVarsetFile.cs create mode 100644 VarsetLib/BinaryVarsetFileParser.cs create mode 100644 VarsetLib/BinaryVarsetItem.cs diff --git a/ParkanPlayground/Program.cs b/ParkanPlayground/Program.cs index 40db8df..2f82177 100644 --- a/ParkanPlayground/Program.cs +++ b/ParkanPlayground/Program.cs @@ -3,15 +3,23 @@ using Common; using MissionTmaLib.Parsing; using NResLib; using ParkanPlayground; +using VarsetLib; // var cpDatEntryConverter = new CpDatEntryConverter(); // cpDatEntryConverter.Convert(); -var converter = new MshConverter(); +// var converter = new MshConverter(); // converter.Convert("E:\\ParkanUnpacked\\fortif.rlb\\133_fr_m_bunker.msh"); -converter.Convert("C:\\Program Files (x86)\\Nikita\\Iron Strategy\\DATA\\MAPS\\SC_1\\Land.msh"); +// converter.Convert("C:\\Program Files (x86)\\Nikita\\Iron Strategy\\DATA\\MAPS\\SC_1\\Land.msh"); // converter.Convert("E:\\ParkanUnpacked\\fortif.rlb\\73_fr_m_brige.msh"); // converter.Convert("E:\\ParkanUnpacked\\intsys.rlb\\277_MESH_o_pws_l_01.msh"); // converter.Convert("E:\\ParkanUnpacked\\static.rlb\\2_MESH_s_stn_0_01.msh"); -// converter.Convert("E:\\ParkanUnpacked\\bases.rlb\\25_MESH_R_H_02.msh"); \ No newline at end of file +// converter.Convert("E:\\ParkanUnpacked\\bases.rlb\\25_MESH_R_H_02.msh"); + + +var fs = new FileStream("E:\\ParkanUnpacked\\behpsp.res\\31_00 00 00 00_prof_generator.var", FileMode.Open, FileAccess.Read, FileShare.Read); + +var file = BinaryVarsetFileParser.Parse(fs); + +_ = 5; \ No newline at end of file diff --git a/VarsetLib/BinaryVarsetFile.cs b/VarsetLib/BinaryVarsetFile.cs new file mode 100644 index 0000000..490c9bb --- /dev/null +++ b/VarsetLib/BinaryVarsetFile.cs @@ -0,0 +1,3 @@ +namespace VarsetLib; + +public record BinaryVarsetFile(int Count, List Items); diff --git a/VarsetLib/BinaryVarsetFileParser.cs b/VarsetLib/BinaryVarsetFileParser.cs new file mode 100644 index 0000000..b3fbb36 --- /dev/null +++ b/VarsetLib/BinaryVarsetFileParser.cs @@ -0,0 +1,46 @@ +using Common; + +namespace VarsetLib; + +public class BinaryVarsetFileParser +{ + public static BinaryVarsetFile Parse(string path) + { + using FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + + return Parse(fs); + } + + public static BinaryVarsetFile Parse(Stream fs) + { + var count = fs.ReadInt32LittleEndian(); + + var items = new List(count); + + Span buf4 = stackalloc byte[4]; + for (int i = 0; i < count; i++) + { + var magic1 = fs.ReadInt32LittleEndian(); + fs.ReadExactly(buf4); + var magic2 = new IntFloatValue(buf4); + + fs.ReadExactly(buf4); + var magic3 = new IntFloatValue(buf4); + var name = fs.ReadLengthPrefixedString(); + var string2 = fs.ReadLengthPrefixedString(); + + fs.ReadExactly(buf4); + var magic4 = new IntFloatValue(buf4); + fs.ReadExactly(buf4); + var magic5 = new IntFloatValue(buf4); + fs.ReadExactly(buf4); + var magic6 = new IntFloatValue(buf4); + fs.ReadExactly(buf4); + var magic7 = new IntFloatValue(buf4); + + items.Add(new BinaryVarsetItem(magic1, magic2, magic3, name, string2, magic4, magic5, magic6, magic7)); + } + + return new BinaryVarsetFile(count, items); + } +} diff --git a/VarsetLib/BinaryVarsetItem.cs b/VarsetLib/BinaryVarsetItem.cs new file mode 100644 index 0000000..84a0841 --- /dev/null +++ b/VarsetLib/BinaryVarsetItem.cs @@ -0,0 +1,15 @@ +using Common; + +namespace VarsetLib; + +public record BinaryVarsetItem( + int Magic1, // length of something + IntFloatValue Magic2, + IntFloatValue Magic3, + string Name, + string String2, + IntFloatValue Magic4, + IntFloatValue Magic5, + IntFloatValue Magic6, + IntFloatValue Magic7 +); diff --git a/VarsetLib/VarsetLib.csproj b/VarsetLib/VarsetLib.csproj index c632161..38858c5 100644 --- a/VarsetLib/VarsetLib.csproj +++ b/VarsetLib/VarsetLib.csproj @@ -1,3 +1,5 @@  - + + +