Closed sdwvit closed 3 years ago
const fs = require("fs"); const path = require("path"); const file = path.join(process.cwd(), "path_to_save.d2s"); function calculateSum(data) { let sum = 0; for (let i = 0; i < data.length; i++) { let ch = data[i]; if (i >= 12 && i < 16) { ch = 0; } ch += sum < 0; sum = (sum << 1) + ch; } return sum; } function littleToBigEndian(number) { return new DataView( Int32Array.of( new DataView(Int32Array.of(number).buffer).getUint32(0, true) ).buffer ); } function ashex(buffer) { return buffer.getUint32(0, false).toString(16); } async function readSafeFile() { return await new Promise((resolve, reject) => { fs.readFile(file, (err, data) => { if (err) return reject(err); return resolve(data); }); }); } async function writeCheckSumToSafeFile(data) { return await new Promise((resolve, reject) => { fs.writeFile(file, data, err => { if (err) reject(err); resolve(); }); }); } readSafeFile().then(data => { const sum = calculateSum(data); const bufferSum = littleToBigEndian(sum); const hex = ashex(bufferSum); const newData = data; for (let i = 0; i < 4; i++) { newData[12 + i] = bufferSum.getInt8(i); } writeCheckSumToSafeFile(newData).then(() => console.log(hex)); });
tested with 1.12
Thanks I'll add it somewhere so it's easy to see.
btw you can check https://www.neoseeker.com/diablo-ii/faqs/26409-hex-edit.html for very old hex guide for d2s files