UNPKG

arx-convert

Version:

Converts various Arx Fatalis formats to JSON or YAML and back

56 lines 2.57 kB
import { BinaryIO } from '../common/BinaryIO.js'; import { FTL_VERSION } from './constants.js'; export class FtlHeader { static readFrom(binary) { binary.readString(4); // identifier - always "FTL\0" binary.readFloat32(); // version - always FTL_VERSION binary.readString(512); // checksum - contains data, but ArxLibertatis doesn't read it binary.readInt32(); // 3d data offset - always 544 binary.readInt32(); // cylinder offset - always -1, ignored by arx binary.readInt32(); // progressive data offset - always -1, ignored by arx binary.readInt32(); // clothes data offset - mostly -1, ignored by arx binary.readInt32(); // collision sphere offset - always -1, ignored by arx binary.readInt32(); // physics box offset - always -1, ignored by arx return { numberOfVertices: binary.readInt32(), numberOfFaces: binary.readInt32(), numberOfTextures: binary.readInt32(), numberOfGroups: binary.readInt32(), numberOfActions: binary.readInt32(), numberOfSelections: binary.readInt32(), origin: binary.readUint32(), name: binary.readString(256), }; } static accumulateFrom(json) { const buffer = new ArrayBuffer(FtlHeader.sizeOf()); const binary = new BinaryIO(buffer); binary.writeString('FTL', 4); binary.writeFloat32(FTL_VERSION); binary.writeString('', 512); // checksum binary.writeInt32(544); // 3d data offset binary.writeInt32(-1); // cylinder offset binary.writeInt32(-1); // progressive data offset binary.writeInt32(-1); // clothes data offset binary.writeInt32(-1); // collision sphere offset binary.writeInt32(-1); // physics box offset binary.writeInt32(json.vertices.length); binary.writeInt32(json.faces.length); binary.writeInt32(json.textureContainers.length); binary.writeInt32(json.groups.length); binary.writeInt32(json.actions.length); binary.writeInt32(json.selections.length); binary.writeUint32(json.header.origin); binary.writeString(json.header.name, 256); return buffer; } static sizeOf() { return (BinaryIO.sizeOfString(4) + BinaryIO.sizeOfFloat32() + BinaryIO.sizeOfString(512) + 12 * BinaryIO.sizeOfInt32() + BinaryIO.sizeOfUint32() + BinaryIO.sizeOfString(256)); } } //# sourceMappingURL=FtlHeader.js.map