Divinity Original Sin 2 .net Core -
using System.Xml; public static LsxNode ParseLsx(string filePath)
You will need to parse – these are the most relevant for .NET tooling. 2. Setting Up a .NET Core Project dotnet new console -n Dos2Tool cd Dos2Tool dotnet add package System.Text.Json dotnet add package SharpZipLib # for extracting PAK/LSV compression Recommended: add System.Xml for LSX (XML-like) support. 3. Parsing LSX (Larian XML) Files LSX is a custom XML format. Example root:
using var ms = new MemoryStream(input); using var decompressed = new MemoryStream(); using var lz4Stream = LZ4Stream.Decode(ms); lz4Stream.CopyTo(decompressed); return decompressed.ToArray();
var json = File.ReadAllText(path); return JsonDocument.Parse(json); divinity original sin 2 .net core
var goldNode = xmlDoc.SelectSingleNode("//attribute[@id='Gold']"); if (goldNode != null) goldNode.Attributes["value"].Value = "99999";
| Format | Extension | Purpose | |--------|-----------|---------| | LSX / LSJ / LSB | .lsx , .lsj , .lsb | Larian’s XML/JSON/binary serialization (stats, skills, items, dialogues) | | PAK (Divine Engine) | .pak | Packed game assets (textures, models, audio) | | Save files | .lsv | Compressed LSX containers | | Story scripts | .loca , .osiris | Lua-based story logic |
using (var fs = File.OpenRead("Game.pak")) using (var reader = new BinaryReader(fs)) using System
var magic = reader.ReadInt32(); // "LSPK" var version = reader.ReadInt32(); // Read file table, compression flags, etc.
<save> <region id="GameState"> <node id="Player"> <attribute id="Level" value="12" type="int8" /> </node> </region> </save>
using System.Text.Json; public static JsonDocument ReadLsj(string path) public static byte[] DecompressLsv(byte[] input)
For production tools, recommend shelling out to or wrapping its DLL via P/Invoke. 7. Modifying Save Files (.lsv) .lsv = LZ4 compressed LSX container.
using K4os.Compression.LZ4; using K4os.Compression.LZ4.Streams; public static byte[] DecompressLsv(byte[] input)