ThemModdingHerds.GFS 1.2.0

dotnet add package ThemModdingHerds.GFS --version 1.2.0
NuGet\Install-Package ThemModdingHerds.GFS -Version 1.2.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ThemModdingHerds.GFS" Version="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ThemModdingHerds.GFS --version 1.2.0
#r "nuget: ThemModdingHerds.GFS, 1.2.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ThemModdingHerds.GFS as a Cake Addin
#addin nuget:?package=ThemModdingHerds.GFS&version=1.2.0

// Install ThemModdingHerds.GFS as a Cake Tool
#tool nuget:?package=ThemModdingHerds.GFS&version=1.2.0

Reverge Package File

Reverge Package File (.gfs) parser library for C#

Structure

Everything is Big Endian

struct Pascal64String
{
    size_t length;
    char chars[length];
};

struct Header
{
    uint dataOffset;
    Pascal64String identifier;
    Pascal64String version;
    size_t entryCount;
};

struct Entry
{
    Pascal64String path;
    size_t size;
    int alignment;
};

Header header;
Entry entries[header.entryCount];

Calculate Data Offset

size_t runningOffset = header.dataOffset;

for(size_t i = 0;i < header.entryCount;i++)
{
    Entry entry = entries[i];
    runningOffset += (entry.alignment - (runningOffset % entry.size)) % entry.alignment
    // runningOffset is the position of the data from entries[i]
    runningOffset += entry.size;
}

Usage

For reading:

using ThemModdingHerds.GFS;
using ThemModdingHerds.IO;

BinaryReader reader = new BinaryReader(someStreamOrFilePath);
RevergePackage file = reader.ReadRevergePackage(); // extends List<RevergePackageEntry>
RevergePackageHeader header = file.Header; // contains file count, offset, version and file identifier
RevergePackageEntry entry = file[index]; // contains all the files and their data

or parsing a folder into one:

using ThemModdingHerds.GFS;

GFSFile file = GFSFile.Read(pathToFolder); // now the folder became a .gfs file

Credits

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.0 96 2/19/2024
1.1.1 93 2/12/2024
1.1.0 123 12/25/2023
1.0.3 117 12/20/2023
1.0.2 103 12/20/2023
1.0.1 108 12/19/2023
1.0.0 99 12/18/2023