Examine savegames
Posted: Thu Nov 03, 2016 3:15 pm
I'm searching for a way get the mod names and their versions from a savegame, something like mod-list.json.
Code: Select all
int main()
{
string file = "C:\\Users\\USER\\Desktop\\level-init.dat";
char* buffer = new char[257];
ifstream is(file, ifstream::binary);
is.read(buffer, 48);
is.read(buffer, 4);
int modCount = buffer[0];
while (modCount > 0)
{
is.read(buffer, 1);
int length = buffer[0];
is.read(buffer, length);
buffer[length] = 0;
cout << buffer;
is.read(buffer, 3);
cout << " v" << ((int)buffer[0]) << '.' << ((int)buffer[1]) << '.' << ((int)buffer[2]) << endl;
modCount--;
}
}
Code: Select all
var fs = require('fs');
fs.readFile('level-init.dat', function(error, buffer) {
if(error) console.log(error);
else {
var modCount = buffer.readUIntBE(48, 1);
for(var i = modCount, pos = 52; i > 0; i--) {
var length = buffer.readUIntBE(pos, 1);
var modName = buffer.toString('utf-8', pos, pos + length + 2).trim();
var vMajor = buffer.readUIntBE(pos + length + 1, 1);
var vMinor = buffer.readUIntBE(pos + length + 2, 1);
var vPatch = buffer.readUIntBE(pos + length + 3, 1);
var fullVersion = 'v' + vMajor + '.' + vMinor + '.' + vPatch;
console.log(modName, fullVersion);
pos += length + 4;
}
}
});
Code: Select all
const fs = require('fs');
function read15() {
fs.readFile('version15.dat', function(error, buffer) {
if(error) console.log(error);
else {
let mods = []
let modCount = buffer.readUIntBE( 48, 1 )
for ( var i = modCount, pos = 52; i > 0; i-- ) {
let length = buffer.readUIntBE( pos, 1 )
let modName = buffer.toString( 'utf-8', pos+1, pos + length + 1 )
let vMajor = buffer.readUIntBE( pos + length + 1, 1 )
let vMinor = buffer.readUIntBE( pos + length + 2, 1 )
let vPatch = buffer.readUIntBE( pos + length + 3, 1 )
let fullVersion = 'v' + vMajor + '.' + vMinor + '.' + vPatch
console.log(modName, fullVersion);
pos += length + 8;
}
}
});
}
function read14() {
fs.readFile('version14.dat', function(error, buffer) {
if(error) console.log(error);
else {
let mods = []
let modCount = buffer.readUIntBE( 48, 1 )
for ( var i = modCount, pos = 52; i > 0; i-- ) {
let length = buffer.readUIntBE( pos, 1 )
let modName = buffer.toString( 'utf-8', pos+1, pos + length + 1 )
let vMajor = buffer.readUIntBE( pos + length + 1, 1 )
let vMinor = buffer.readUIntBE( pos + length + 2, 1 )
let vPatch = buffer.readUIntBE( pos + length + 3, 1 )
let fullVersion = 'v' + vMajor + '.' + vMinor + '.' + vPatch
console.log(modName, fullVersion);
pos += length + 4
}
}
});
}