arx-convert 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +142 -0
- package/dist/bin/convert.d.ts +2 -0
- package/dist/bin/convert.js +145 -0
- package/dist/bin/convert.js.map +1 -0
- package/dist/bin/helpers.d.ts +18 -0
- package/dist/bin/helpers.js +160 -0
- package/dist/bin/helpers.js.map +1 -0
- package/dist/common/BinaryIO.d.ts +64 -0
- package/dist/common/BinaryIO.js +293 -0
- package/dist/common/BinaryIO.js.map +1 -0
- package/dist/common/Color.d.ts +25 -0
- package/dist/common/Color.js +45 -0
- package/dist/common/Color.js.map +1 -0
- package/dist/common/Light.d.ts +47 -0
- package/dist/common/Light.js +78 -0
- package/dist/common/Light.js.map +1 -0
- package/dist/common/TextIO.d.ts +4 -0
- package/dist/common/TextIO.js +16 -0
- package/dist/common/TextIO.js.map +1 -0
- package/dist/common/constants.d.ts +71 -0
- package/dist/common/constants.js +230 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/helpers.d.ts +18 -0
- package/dist/common/helpers.js +62 -0
- package/dist/common/helpers.js.map +1 -0
- package/dist/common/types.d.ts +27 -0
- package/dist/common/types.js +3 -0
- package/dist/common/types.js.map +1 -0
- package/dist/dlf/DLF.d.ts +25 -0
- package/dist/dlf/DLF.js +63 -0
- package/dist/dlf/DLF.js.map +1 -0
- package/dist/dlf/DlfHeader.d.ts +30 -0
- package/dist/dlf/DlfHeader.js +87 -0
- package/dist/dlf/DlfHeader.js.map +1 -0
- package/dist/dlf/Fog.d.ts +27 -0
- package/dist/dlf/Fog.js +64 -0
- package/dist/dlf/Fog.js.map +1 -0
- package/dist/dlf/InteactiveObject.d.ts +18 -0
- package/dist/dlf/InteactiveObject.js +41 -0
- package/dist/dlf/InteactiveObject.js.map +1 -0
- package/dist/dlf/PathHeader.d.ts +27 -0
- package/dist/dlf/PathHeader.js +64 -0
- package/dist/dlf/PathHeader.js.map +1 -0
- package/dist/dlf/Pathway.d.ts +17 -0
- package/dist/dlf/Pathway.js +40 -0
- package/dist/dlf/Pathway.js.map +1 -0
- package/dist/dlf/Scene.d.ts +16 -0
- package/dist/dlf/Scene.js +36 -0
- package/dist/dlf/Scene.js.map +1 -0
- package/dist/ftl/FTL.d.ts +10 -0
- package/dist/ftl/FTL.js +115 -0
- package/dist/ftl/FTL.js.map +1 -0
- package/dist/ftl/FtlHeader.d.ts +12 -0
- package/dist/ftl/FtlHeader.js +24 -0
- package/dist/ftl/FtlHeader.js.map +1 -0
- package/dist/fts/Anchor.d.ts +12 -0
- package/dist/fts/Anchor.js +35 -0
- package/dist/fts/Anchor.js.map +1 -0
- package/dist/fts/AnchorData.d.ts +20 -0
- package/dist/fts/AnchorData.js +31 -0
- package/dist/fts/AnchorData.js.map +1 -0
- package/dist/fts/Cell.d.ts +12 -0
- package/dist/fts/Cell.js +32 -0
- package/dist/fts/Cell.js.map +1 -0
- package/dist/fts/EPData.d.ts +19 -0
- package/dist/fts/EPData.js +22 -0
- package/dist/fts/EPData.js.map +1 -0
- package/dist/fts/FTS.d.ts +28 -0
- package/dist/fts/FTS.js +88 -0
- package/dist/fts/FTS.js.map +1 -0
- package/dist/fts/FtsHeader.d.ts +18 -0
- package/dist/fts/FtsHeader.js +45 -0
- package/dist/fts/FtsHeader.js.map +1 -0
- package/dist/fts/Polygon.d.ts +29 -0
- package/dist/fts/Polygon.js +49 -0
- package/dist/fts/Polygon.js.map +1 -0
- package/dist/fts/Portal.d.ts +19 -0
- package/dist/fts/Portal.js +32 -0
- package/dist/fts/Portal.js.map +1 -0
- package/dist/fts/PortalPolygon.d.ts +29 -0
- package/dist/fts/PortalPolygon.js +59 -0
- package/dist/fts/PortalPolygon.js.map +1 -0
- package/dist/fts/Room.d.ts +12 -0
- package/dist/fts/Room.js +27 -0
- package/dist/fts/Room.js.map +1 -0
- package/dist/fts/RoomData.d.ts +16 -0
- package/dist/fts/RoomData.js +29 -0
- package/dist/fts/RoomData.js.map +1 -0
- package/dist/fts/RoomDistance.d.ts +17 -0
- package/dist/fts/RoomDistance.js +27 -0
- package/dist/fts/RoomDistance.js.map +1 -0
- package/dist/fts/SceneHeader.d.ts +21 -0
- package/dist/fts/SceneHeader.js +45 -0
- package/dist/fts/SceneHeader.js.map +1 -0
- package/dist/fts/SceneInfo.d.ts +16 -0
- package/dist/fts/SceneInfo.js +26 -0
- package/dist/fts/SceneInfo.js.map +1 -0
- package/dist/fts/TextureContainer.d.ts +16 -0
- package/dist/fts/TextureContainer.js +27 -0
- package/dist/fts/TextureContainer.js.map +1 -0
- package/dist/fts/TextureVertex.d.ts +21 -0
- package/dist/fts/TextureVertex.js +34 -0
- package/dist/fts/TextureVertex.js.map +1 -0
- package/dist/fts/UniqueHeader.d.ts +15 -0
- package/dist/fts/UniqueHeader.js +25 -0
- package/dist/fts/UniqueHeader.js.map +1 -0
- package/dist/fts/Vertex.d.ts +19 -0
- package/dist/fts/Vertex.js +23 -0
- package/dist/fts/Vertex.js.map +1 -0
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.js +6 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/llf/LLF.d.ts +14 -0
- package/dist/llf/LLF.js +44 -0
- package/dist/llf/LLF.js.map +1 -0
- package/dist/llf/LightingHeader.d.ts +11 -0
- package/dist/llf/LightingHeader.js +26 -0
- package/dist/llf/LightingHeader.js.map +1 -0
- package/dist/llf/LlfHeader.d.ts +20 -0
- package/dist/llf/LlfHeader.js +53 -0
- package/dist/llf/LlfHeader.js.map +1 -0
- package/dist/tea/NewKeyFrame.d.ts +16 -0
- package/dist/tea/NewKeyFrame.js +33 -0
- package/dist/tea/NewKeyFrame.js.map +1 -0
- package/dist/tea/OldKeyFrame.d.ts +22 -0
- package/dist/tea/OldKeyFrame.js +30 -0
- package/dist/tea/OldKeyFrame.js.map +1 -0
- package/dist/tea/TEA.d.ts +26 -0
- package/dist/tea/TEA.js +82 -0
- package/dist/tea/TEA.js.map +1 -0
- package/dist/tea/TeaHeader.d.ts +20 -0
- package/dist/tea/TeaHeader.js +29 -0
- package/dist/tea/TeaHeader.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxVector3 } from '../common/types';
|
|
5
|
+
/**
|
|
6
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L130
|
|
7
|
+
*/
|
|
8
|
+
export type ArxRoomDistance = {
|
|
9
|
+
distance: number;
|
|
10
|
+
startPosition: ArxVector3;
|
|
11
|
+
endPosition: ArxVector3;
|
|
12
|
+
};
|
|
13
|
+
export declare class RoomDistance {
|
|
14
|
+
static readFrom(binary: BinaryIO): ArxRoomDistance;
|
|
15
|
+
static accumulateFrom(roomDistance: ArxRoomDistance): Buffer;
|
|
16
|
+
static sizeOf(): number;
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoomDistance = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
class RoomDistance {
|
|
7
|
+
static readFrom(binary) {
|
|
8
|
+
return {
|
|
9
|
+
distance: binary.readFloat32(),
|
|
10
|
+
startPosition: binary.readVector3(),
|
|
11
|
+
endPosition: binary.readVector3(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static accumulateFrom(roomDistance) {
|
|
15
|
+
const buffer = node_buffer_1.Buffer.alloc(RoomDistance.sizeOf());
|
|
16
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
17
|
+
binary.writeFloat32(roomDistance.distance);
|
|
18
|
+
binary.writeVector3(roomDistance.startPosition);
|
|
19
|
+
binary.writeVector3(roomDistance.endPosition);
|
|
20
|
+
return buffer;
|
|
21
|
+
}
|
|
22
|
+
static sizeOf() {
|
|
23
|
+
return BinaryIO_1.BinaryIO.sizeOfFloat32() + BinaryIO_1.BinaryIO.sizeOfVector3Array(2);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.RoomDistance = RoomDistance;
|
|
27
|
+
//# sourceMappingURL=RoomDistance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomDistance.js","sourceRoot":"","sources":["../../src/fts/RoomDistance.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAY7C,MAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;YAC9B,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;SAClC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,YAA6B;QACjD,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;QAC/C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAE7C,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,aAAa,EAAE,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;CACF;AAvBD,oCAuBC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxVector3 } from '../common/types';
|
|
5
|
+
import { ArxFTS } from './FTS';
|
|
6
|
+
/**
|
|
7
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L94
|
|
8
|
+
*/
|
|
9
|
+
export type ArxSceneHeader = {
|
|
10
|
+
numberOfTextures: number;
|
|
11
|
+
numberOfAnchors: number;
|
|
12
|
+
playerPosition: ArxVector3;
|
|
13
|
+
mScenePosition: ArxVector3;
|
|
14
|
+
numberOfPortals: number;
|
|
15
|
+
numberOfRooms: number;
|
|
16
|
+
};
|
|
17
|
+
export declare class SceneHeader {
|
|
18
|
+
static readFrom(binary: BinaryIO): ArxSceneHeader;
|
|
19
|
+
static accumulateFrom(json: ArxFTS): Buffer;
|
|
20
|
+
static sizeOf(): number;
|
|
21
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SceneHeader = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
const constants_1 = require("../common/constants");
|
|
7
|
+
const helpers_1 = require("../common/helpers");
|
|
8
|
+
class SceneHeader {
|
|
9
|
+
static readFrom(binary) {
|
|
10
|
+
binary.readFloat32(); // version - always 0.14100000262260437
|
|
11
|
+
binary.readInt32(); // sizeX - always 160
|
|
12
|
+
binary.readInt32(); // sizeZ - always 160
|
|
13
|
+
const numberOfTextures = binary.readInt32();
|
|
14
|
+
binary.readInt32(); // numberOfPolygons - we calculate that from cells
|
|
15
|
+
return {
|
|
16
|
+
numberOfTextures,
|
|
17
|
+
numberOfAnchors: binary.readInt32(),
|
|
18
|
+
playerPosition: binary.readVector3(),
|
|
19
|
+
mScenePosition: binary.readVector3(),
|
|
20
|
+
numberOfPortals: binary.readInt32(),
|
|
21
|
+
numberOfRooms: binary.readInt32() + 1, // rooms are 1 indexed, because an empty room is reserved for room #0
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static accumulateFrom(json) {
|
|
25
|
+
const numberOfRooms = (0, helpers_1.maxAll)((0, helpers_1.uniq)(json.polygons.map(({ room }) => room)));
|
|
26
|
+
const buffer = node_buffer_1.Buffer.alloc(SceneHeader.sizeOf());
|
|
27
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
28
|
+
binary.writeFloat32(constants_1.FTS_VERSION);
|
|
29
|
+
binary.writeInt32(constants_1.MAP_WIDTH_IN_CELLS);
|
|
30
|
+
binary.writeInt32(constants_1.MAP_DEPTH_IN_CELLS);
|
|
31
|
+
binary.writeInt32(json.textureContainers.length);
|
|
32
|
+
binary.writeInt32(json.polygons.length);
|
|
33
|
+
binary.writeInt32(json.anchors.length);
|
|
34
|
+
binary.writeVector3(json.sceneHeader.playerPosition);
|
|
35
|
+
binary.writeVector3(json.sceneHeader.mScenePosition);
|
|
36
|
+
binary.writeInt32(json.portals.length);
|
|
37
|
+
binary.writeInt32(numberOfRooms);
|
|
38
|
+
return buffer;
|
|
39
|
+
}
|
|
40
|
+
static sizeOf() {
|
|
41
|
+
return BinaryIO_1.BinaryIO.sizeOfFloat32() + BinaryIO_1.BinaryIO.sizeOfInt32Array(5 + 2) + BinaryIO_1.BinaryIO.sizeOfVector3Array(2);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.SceneHeader = SceneHeader;
|
|
45
|
+
//# sourceMappingURL=SceneHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneHeader.js","sourceRoot":"","sources":["../../src/fts/SceneHeader.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAC7C,mDAAyF;AACzF,+CAAgD;AAgBhD,MAAa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,MAAM,CAAC,WAAW,EAAE,CAAA,CAAC,uCAAuC;QAC5D,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,qBAAqB;QACxC,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,qBAAqB;QAExC,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;QAE3C,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,kDAAkD;QAErE,OAAO;YACL,gBAAgB;YAChB,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE;YACnC,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE;YACpC,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE;YACpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE;YACnC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,qEAAqE;SAC7G,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY;QAChC,MAAM,aAAa,GAAG,IAAA,gBAAM,EAAC,IAAA,cAAI,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEzE,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,YAAY,CAAC,uBAAW,CAAC,CAAA;QAChC,MAAM,CAAC,UAAU,CAAC,8BAAkB,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,8BAAkB,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QACpD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QACpD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QAEhC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,aAAa,EAAE,GAAG,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;IACrG,CAAC;CACF;AA3CD,kCA2CC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxCell } from './Cell';
|
|
5
|
+
/**
|
|
6
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L125
|
|
7
|
+
*/
|
|
8
|
+
export type ArxSceneInfo = {
|
|
9
|
+
numberOfPolygons: number;
|
|
10
|
+
numberOfAnchors: number;
|
|
11
|
+
};
|
|
12
|
+
export declare class SceneInfo {
|
|
13
|
+
static readFrom(binary: BinaryIO): ArxSceneInfo;
|
|
14
|
+
static accumulateFrom(cell: ArxCell): Buffer;
|
|
15
|
+
static sizeOf(): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SceneInfo = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
class SceneInfo {
|
|
7
|
+
static readFrom(binary) {
|
|
8
|
+
return {
|
|
9
|
+
numberOfPolygons: binary.readInt32(),
|
|
10
|
+
numberOfAnchors: binary.readInt32(),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static accumulateFrom(cell) {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const buffer = node_buffer_1.Buffer.alloc(SceneInfo.sizeOf());
|
|
16
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
17
|
+
binary.writeInt32(cell.polygons.length);
|
|
18
|
+
binary.writeInt32((_b = (_a = cell.anchors) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);
|
|
19
|
+
return buffer;
|
|
20
|
+
}
|
|
21
|
+
static sizeOf() {
|
|
22
|
+
return BinaryIO_1.BinaryIO.sizeOfInt32Array(2);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.SceneInfo = SceneInfo;
|
|
26
|
+
//# sourceMappingURL=SceneInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneInfo.js","sourceRoot":"","sources":["../../src/fts/SceneInfo.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAW7C,MAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,OAAO;YACL,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE;YACpC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE;SACpC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAa;;QACjC,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,CAAC,UAAU,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,mCAAI,CAAC,CAAC,CAAA;QAE5C,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;CACF;AArBD,8BAqBC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
/**
|
|
5
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L107
|
|
6
|
+
*/
|
|
7
|
+
export type ArxTextureContainer = {
|
|
8
|
+
id: number;
|
|
9
|
+
temp: number;
|
|
10
|
+
filename: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class TextureContainer {
|
|
13
|
+
static readFrom(binary: BinaryIO): ArxTextureContainer;
|
|
14
|
+
static accumulateFrom(textureContainer: ArxTextureContainer): Buffer;
|
|
15
|
+
static sizeOf(): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TextureContainer = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
class TextureContainer {
|
|
7
|
+
static readFrom(binary) {
|
|
8
|
+
return {
|
|
9
|
+
id: binary.readInt32(),
|
|
10
|
+
temp: binary.readInt32(),
|
|
11
|
+
filename: binary.readString(256),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static accumulateFrom(textureContainer) {
|
|
15
|
+
const buffer = node_buffer_1.Buffer.alloc(TextureContainer.sizeOf());
|
|
16
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
17
|
+
binary.writeInt32(textureContainer.id);
|
|
18
|
+
binary.writeInt32(textureContainer.temp);
|
|
19
|
+
binary.writeString(textureContainer.filename, 256);
|
|
20
|
+
return buffer;
|
|
21
|
+
}
|
|
22
|
+
static sizeOf() {
|
|
23
|
+
return BinaryIO_1.BinaryIO.sizeOfInt32Array(2) + BinaryIO_1.BinaryIO.sizeOfString(256);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.TextureContainer = TextureContainer;
|
|
27
|
+
//# sourceMappingURL=TextureContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextureContainer.js","sourceRoot":"","sources":["../../src/fts/TextureContainer.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAW7C,MAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;YACtB,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE;YACxB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;SACjC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,gBAAqC;QACzD,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACtC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAElD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,mBAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAClE,CAAC;CACF;AAvBD,4CAuBC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxColor } from '../common/Color';
|
|
5
|
+
import { ArxVector3 } from '../common/types';
|
|
6
|
+
/**
|
|
7
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/GraphicsFormat.h#L82
|
|
8
|
+
*/
|
|
9
|
+
export type ArxTextureVertex = {
|
|
10
|
+
pos: ArxVector3;
|
|
11
|
+
rhw: number;
|
|
12
|
+
color: ArxColor;
|
|
13
|
+
specular: ArxColor;
|
|
14
|
+
tu: number;
|
|
15
|
+
tv: number;
|
|
16
|
+
};
|
|
17
|
+
export declare class TextureVertex {
|
|
18
|
+
static readFrom(binary: BinaryIO): ArxTextureVertex;
|
|
19
|
+
static accumulateFrom(vertex: ArxTextureVertex): Buffer;
|
|
20
|
+
static sizeOf(): number;
|
|
21
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TextureVertex = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
const Color_1 = require("../common/Color");
|
|
7
|
+
class TextureVertex {
|
|
8
|
+
static readFrom(binary) {
|
|
9
|
+
return {
|
|
10
|
+
pos: binary.readVector3(),
|
|
11
|
+
rhw: binary.readFloat32(),
|
|
12
|
+
color: Color_1.Color.readFrom(binary, 'abgr'),
|
|
13
|
+
specular: Color_1.Color.readFrom(binary, 'abgr'),
|
|
14
|
+
tu: binary.readFloat32(),
|
|
15
|
+
tv: binary.readFloat32(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
static accumulateFrom(vertex) {
|
|
19
|
+
const buffer = node_buffer_1.Buffer.alloc(TextureVertex.sizeOf());
|
|
20
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
21
|
+
binary.writeVector3(vertex.pos);
|
|
22
|
+
binary.writeFloat32(vertex.rhw);
|
|
23
|
+
binary.writeBuffer(Color_1.Color.accumulateFrom(vertex.color, 'abgr'));
|
|
24
|
+
binary.writeBuffer(Color_1.Color.accumulateFrom(vertex.specular, 'abgr'));
|
|
25
|
+
binary.writeFloat32(vertex.tu);
|
|
26
|
+
binary.writeFloat32(vertex.tv);
|
|
27
|
+
return buffer;
|
|
28
|
+
}
|
|
29
|
+
static sizeOf() {
|
|
30
|
+
return (BinaryIO_1.BinaryIO.sizeOfVector3() + BinaryIO_1.BinaryIO.sizeOfFloat32() + Color_1.Color.sizeOf('abgr') * 2 + BinaryIO_1.BinaryIO.sizeOfFloat32Array(2));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.TextureVertex = TextureVertex;
|
|
34
|
+
//# sourceMappingURL=TextureVertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextureVertex.js","sourceRoot":"","sources":["../../src/fts/TextureVertex.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAC7C,2CAAiD;AAejD,MAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE;YACzB,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE;YACzB,KAAK,EAAE,aAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACrC,QAAQ,EAAE,aAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACxC,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE;YACxB,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE;SACzB,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAwB;QAC5C,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,WAAW,CAAC,aAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,MAAM,CAAC,WAAW,CAAC,aAAK,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACjE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC9B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,CACL,mBAAQ,CAAC,aAAa,EAAE,GAAG,mBAAQ,CAAC,aAAa,EAAE,GAAG,aAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAChH,CAAA;IACH,CAAC;CACF;AA/BD,sCA+BC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
/**
|
|
5
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L68
|
|
6
|
+
*/
|
|
7
|
+
export type ArxUniqueHeader = {
|
|
8
|
+
path: string;
|
|
9
|
+
check: number[];
|
|
10
|
+
};
|
|
11
|
+
export declare class UniqueHeader {
|
|
12
|
+
static readFrom(binary: BinaryIO): ArxUniqueHeader;
|
|
13
|
+
static accumulateFrom(uniqueHeader: ArxUniqueHeader): Buffer;
|
|
14
|
+
static sizeOf(): number;
|
|
15
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UniqueHeader = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
class UniqueHeader {
|
|
7
|
+
static readFrom(binary) {
|
|
8
|
+
return {
|
|
9
|
+
path: binary.readString(256),
|
|
10
|
+
check: binary.readUint8Array(512),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static accumulateFrom(uniqueHeader) {
|
|
14
|
+
const buffer = node_buffer_1.Buffer.alloc(UniqueHeader.sizeOf());
|
|
15
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
16
|
+
binary.writeString(uniqueHeader.path, 256);
|
|
17
|
+
binary.writeUint8Array(uniqueHeader.check);
|
|
18
|
+
return buffer;
|
|
19
|
+
}
|
|
20
|
+
static sizeOf() {
|
|
21
|
+
return BinaryIO_1.BinaryIO.sizeOfString(256) + BinaryIO_1.BinaryIO.sizeOfUint8Array(512);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.UniqueHeader = UniqueHeader;
|
|
25
|
+
//# sourceMappingURL=UniqueHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniqueHeader.js","sourceRoot":"","sources":["../../src/fts/UniqueHeader.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAU7C,MAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;SAClC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,YAA6B;QACjD,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC1C,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QAE1C,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,mBAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACpE,CAAC;CACF;AArBD,oCAqBC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
/**
|
|
5
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L73
|
|
6
|
+
*/
|
|
7
|
+
export type ArxVertex = {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
z: number;
|
|
11
|
+
u: number;
|
|
12
|
+
v: number;
|
|
13
|
+
llfColorIdx?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare class Vertex {
|
|
16
|
+
static readFrom(binary: BinaryIO): ArxVertex;
|
|
17
|
+
static accumulateFrom({ x, y, z, u, v }: ArxVertex): Buffer;
|
|
18
|
+
static sizeOf(): number;
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Vertex = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
class Vertex {
|
|
7
|
+
static readFrom(binary) {
|
|
8
|
+
// y before x is not a typo!
|
|
9
|
+
const [y, x, z, u, v] = binary.readFloat32Array(5);
|
|
10
|
+
return { x, y, z, u, v };
|
|
11
|
+
}
|
|
12
|
+
static accumulateFrom({ x, y, z, u, v }) {
|
|
13
|
+
const buffer = node_buffer_1.Buffer.alloc(Vertex.sizeOf());
|
|
14
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
15
|
+
binary.writeFloat32Array([y, x, z, u, v]);
|
|
16
|
+
return buffer;
|
|
17
|
+
}
|
|
18
|
+
static sizeOf() {
|
|
19
|
+
return BinaryIO_1.BinaryIO.sizeOfFloat32Array(5);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Vertex = Vertex;
|
|
23
|
+
//# sourceMappingURL=Vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../src/fts/Vertex.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAc7C,MAAa,MAAM;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,4BAA4B;QAC5B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAClD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;QAChD,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC;CACF;AAnBD,wBAmBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getCellCoords } from './common/helpers';
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCellCoords = void 0;
|
|
4
|
+
var helpers_1 = require("./common/helpers");
|
|
5
|
+
Object.defineProperty(exports, "getCellCoords", { enumerable: true, get: function () { return helpers_1.getCellCoords; } });
|
|
6
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAAvC,wGAAA,aAAa,OAAA"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TEA = exports.FTL = exports.LLF = exports.FTS = exports.DLF = void 0;
|
|
4
|
+
var DLF_1 = require("./dlf/DLF");
|
|
5
|
+
Object.defineProperty(exports, "DLF", { enumerable: true, get: function () { return DLF_1.DLF; } });
|
|
6
|
+
var FTS_1 = require("./fts/FTS");
|
|
7
|
+
Object.defineProperty(exports, "FTS", { enumerable: true, get: function () { return FTS_1.FTS; } });
|
|
8
|
+
var LLF_1 = require("./llf/LLF");
|
|
9
|
+
Object.defineProperty(exports, "LLF", { enumerable: true, get: function () { return LLF_1.LLF; } });
|
|
10
|
+
var FTL_1 = require("./ftl/FTL");
|
|
11
|
+
Object.defineProperty(exports, "FTL", { enumerable: true, get: function () { return FTL_1.FTL; } });
|
|
12
|
+
var TEA_1 = require("./tea/TEA");
|
|
13
|
+
Object.defineProperty(exports, "TEA", { enumerable: true, get: function () { return TEA_1.TEA; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAA+B;AAAtB,0FAAA,GAAG,OAAA;AACZ,iCAA+B;AAAtB,0FAAA,GAAG,OAAA;AACZ,iCAA+B;AAAtB,0FAAA,GAAG,OAAA;AACZ,iCAA+B;AAAtB,0FAAA,GAAG,OAAA;AACZ,iCAA+B;AAAtB,0FAAA,GAAG,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { ArxColor } from '../common/Color';
|
|
4
|
+
import { ArxLight } from '../common/Light';
|
|
5
|
+
import { ArxLlfHeader } from './LlfHeader';
|
|
6
|
+
export type ArxLLF = {
|
|
7
|
+
header: Omit<ArxLlfHeader, 'numberOfLights'>;
|
|
8
|
+
lights: ArxLight[];
|
|
9
|
+
colors: ArxColor[];
|
|
10
|
+
};
|
|
11
|
+
export declare class LLF {
|
|
12
|
+
static load(decompressedFile: Buffer): ArxLLF;
|
|
13
|
+
static save(json: ArxLLF): Buffer;
|
|
14
|
+
}
|
package/dist/llf/LLF.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.LLF = void 0;
|
|
15
|
+
const node_buffer_1 = require("node:buffer");
|
|
16
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
17
|
+
const Color_1 = require("../common/Color");
|
|
18
|
+
const helpers_1 = require("../common/helpers");
|
|
19
|
+
const Light_1 = require("../common/Light");
|
|
20
|
+
const LightingHeader_1 = require("./LightingHeader");
|
|
21
|
+
const LlfHeader_1 = require("./LlfHeader");
|
|
22
|
+
class LLF {
|
|
23
|
+
static load(decompressedFile) {
|
|
24
|
+
const file = new BinaryIO_1.BinaryIO(decompressedFile.buffer);
|
|
25
|
+
const _a = LlfHeader_1.LlfHeader.readFrom(file), { numberOfLights } = _a, header = __rest(_a, ["numberOfLights"]);
|
|
26
|
+
const lights = (0, helpers_1.times)(() => Light_1.Light.readFrom(file), numberOfLights);
|
|
27
|
+
const { numberOfColors } = LightingHeader_1.LightingHeader.readFrom(file);
|
|
28
|
+
const colors = (0, helpers_1.times)(() => Color_1.Color.readFrom(file, 'bgra'), numberOfColors);
|
|
29
|
+
return {
|
|
30
|
+
header,
|
|
31
|
+
lights,
|
|
32
|
+
colors,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
static save(json) {
|
|
36
|
+
const header = LlfHeader_1.LlfHeader.accumulateFrom(json);
|
|
37
|
+
const lights = node_buffer_1.Buffer.concat(json.lights.map(Light_1.Light.accumulateFrom));
|
|
38
|
+
const lightingHeader = LightingHeader_1.LightingHeader.accumulateFrom(json.colors);
|
|
39
|
+
const colors = node_buffer_1.Buffer.concat(json.colors.map((color) => Color_1.Color.accumulateFrom(color, 'bgra')));
|
|
40
|
+
return node_buffer_1.Buffer.concat([header, lights, lightingHeader, colors]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.LLF = LLF;
|
|
44
|
+
//# sourceMappingURL=LLF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LLF.js","sourceRoot":"","sources":["../../src/llf/LLF.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,6CAAoC;AACpC,iDAA6C;AAC7C,2CAAiD;AACjD,+CAAyC;AACzC,2CAAiD;AACjD,qDAAiD;AACjD,2CAAqD;AAQrD,MAAa,GAAG;IACd,MAAM,CAAC,IAAI,CAAC,gBAAwB;QAClC,MAAM,IAAI,GAAG,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAElD,MAAM,KAAgC,qBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAxD,EAAE,cAAc,OAAwC,EAAnC,MAAM,cAA3B,kBAA6B,CAA2B,CAAA;QAC9D,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAA;QAEhE,MAAM,EAAE,cAAc,EAAE,GAAG,+BAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,CAAA;QAExE,OAAO;YACL,MAAM;YACN,MAAM;YACN,MAAM;SACP,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAY;QACtB,MAAM,MAAM,GAAG,qBAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,oBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAK,CAAC,cAAc,CAAC,CAAC,CAAA;QAEnE,MAAM,cAAc,GAAG,+BAAc,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjE,MAAM,MAAM,GAAG,oBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAE7F,OAAO,oBAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;IAChE,CAAC;CACF;AA5BD,kBA4BC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
3
|
+
import { Color } from '../common/Color';
|
|
4
|
+
export type ArxLightingHeader = {
|
|
5
|
+
numberOfColors: number;
|
|
6
|
+
};
|
|
7
|
+
export declare class LightingHeader {
|
|
8
|
+
static readFrom(binary: BinaryIO): ArxLightingHeader;
|
|
9
|
+
static accumulateFrom(colors: Color[]): Buffer;
|
|
10
|
+
static sizeOf(): number;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LightingHeader = void 0;
|
|
4
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
5
|
+
class LightingHeader {
|
|
6
|
+
static readFrom(binary) {
|
|
7
|
+
const data = {
|
|
8
|
+
numberOfColors: binary.readInt32(),
|
|
9
|
+
};
|
|
10
|
+
binary.readInt32(); // viewMode (unused)
|
|
11
|
+
binary.readInt32(); // modeLight (unused)
|
|
12
|
+
binary.readInt32(); // lpad
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
static accumulateFrom(colors) {
|
|
16
|
+
const buffer = Buffer.alloc(LightingHeader.sizeOf());
|
|
17
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
18
|
+
binary.writeInt32Array([colors.length, 0, 63, 0]);
|
|
19
|
+
return buffer;
|
|
20
|
+
}
|
|
21
|
+
static sizeOf() {
|
|
22
|
+
return BinaryIO_1.BinaryIO.sizeOfInt32Array(4);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.LightingHeader = LightingHeader;
|
|
26
|
+
//# sourceMappingURL=LightingHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightingHeader.js","sourceRoot":"","sources":["../../src/llf/LightingHeader.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAO7C,MAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,MAAM,IAAI,GAAsB;YAC9B,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE;SACnC,CAAA;QAED,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,oBAAoB;QACvC,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,qBAAqB;QACxC,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,OAAO;QAE1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAe;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;QACpD,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAEjD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;CACF;AAzBD,wCAyBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxLLF } from './LLF';
|
|
5
|
+
/**
|
|
6
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/scene/LevelFormat.h#L178
|
|
7
|
+
*/
|
|
8
|
+
export type ArxLlfHeader = {
|
|
9
|
+
lastUser: string;
|
|
10
|
+
time: number;
|
|
11
|
+
numberOfLights: number;
|
|
12
|
+
numberOfShadowPolygons: number;
|
|
13
|
+
numberOfIgnoredPolygons: number;
|
|
14
|
+
numberOfBackgroundPolygons: number;
|
|
15
|
+
};
|
|
16
|
+
export declare class LlfHeader {
|
|
17
|
+
static readFrom(binary: BinaryIO): ArxLlfHeader;
|
|
18
|
+
static accumulateFrom(json: ArxLLF): Buffer;
|
|
19
|
+
static sizeOf(): number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LlfHeader = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const BinaryIO_1 = require("../common/BinaryIO");
|
|
6
|
+
const constants_1 = require("../common/constants");
|
|
7
|
+
const helpers_1 = require("../common/helpers");
|
|
8
|
+
class LlfHeader {
|
|
9
|
+
static readFrom(binary) {
|
|
10
|
+
binary.readFloat32(); // version - always 1.44
|
|
11
|
+
binary.readString(16); // identifier - always DANAE_LLH_FILE
|
|
12
|
+
const data = {
|
|
13
|
+
lastUser: binary.readString(256),
|
|
14
|
+
time: binary.readInt32(),
|
|
15
|
+
numberOfLights: binary.readInt32(),
|
|
16
|
+
numberOfShadowPolygons: binary.readInt32(),
|
|
17
|
+
numberOfIgnoredPolygons: binary.readInt32(),
|
|
18
|
+
numberOfBackgroundPolygons: binary.readInt32(),
|
|
19
|
+
};
|
|
20
|
+
binary.readInt32Array(256); // pad
|
|
21
|
+
binary.readFloat32Array(256); // fpad
|
|
22
|
+
binary.readString(4096); // cpad
|
|
23
|
+
binary.readInt32Array(256); // bpad
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
26
|
+
static accumulateFrom(json) {
|
|
27
|
+
const buffer = node_buffer_1.Buffer.alloc(LlfHeader.sizeOf());
|
|
28
|
+
const binary = new BinaryIO_1.BinaryIO(buffer.buffer);
|
|
29
|
+
binary.writeFloat32(constants_1.DANAE_VERSION);
|
|
30
|
+
binary.writeString('DANAE_LLH_FILE', 16);
|
|
31
|
+
binary.writeString(json.header.lastUser, 256);
|
|
32
|
+
binary.writeInt32(json.header.time);
|
|
33
|
+
binary.writeInt32(json.lights.length);
|
|
34
|
+
binary.writeInt32(json.header.numberOfShadowPolygons);
|
|
35
|
+
binary.writeInt32(json.header.numberOfIgnoredPolygons);
|
|
36
|
+
binary.writeInt32(json.header.numberOfBackgroundPolygons);
|
|
37
|
+
binary.writeInt32Array((0, helpers_1.repeat)(0, 256));
|
|
38
|
+
binary.writeFloat32Array((0, helpers_1.repeat)(0, 256));
|
|
39
|
+
binary.writeString('', 4096);
|
|
40
|
+
binary.writeInt32Array((0, helpers_1.repeat)(0, 256));
|
|
41
|
+
return buffer;
|
|
42
|
+
}
|
|
43
|
+
static sizeOf() {
|
|
44
|
+
return (BinaryIO_1.BinaryIO.sizeOfFloat32() +
|
|
45
|
+
BinaryIO_1.BinaryIO.sizeOfString(16 + 256) +
|
|
46
|
+
BinaryIO_1.BinaryIO.sizeOfInt32Array(5 + 256) +
|
|
47
|
+
BinaryIO_1.BinaryIO.sizeOfFloat32Array(256) +
|
|
48
|
+
BinaryIO_1.BinaryIO.sizeOfString(4096) +
|
|
49
|
+
BinaryIO_1.BinaryIO.sizeOfInt32Array(256));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.LlfHeader = LlfHeader;
|
|
53
|
+
//# sourceMappingURL=LlfHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlfHeader.js","sourceRoot":"","sources":["../../src/llf/LlfHeader.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AACpC,iDAA6C;AAC7C,mDAAmD;AACnD,+CAA0C;AAe1C,MAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,MAAgB;QAC9B,MAAM,CAAC,WAAW,EAAE,CAAA,CAAC,wBAAwB;QAC7C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,CAAC,qCAAqC;QAE3D,MAAM,IAAI,GAAiB;YACzB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAChC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE;YACxB,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE;YAClC,sBAAsB,EAAE,MAAM,CAAC,SAAS,EAAE;YAC1C,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE;YAC3C,0BAA0B,EAAE,MAAM,CAAC,SAAS,EAAE;SAC/C,CAAA;QAED,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAC,MAAM;QACjC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA,CAAC,OAAO;QACpC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,OAAO;QAC/B,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAC,OAAO;QAElC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,oBAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,YAAY,CAAC,yBAAa,CAAC,CAAA;QAClC,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAC7C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAErC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;QACtD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAA;QAEzD,MAAM,CAAC,eAAe,CAAC,IAAA,gBAAM,EAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,iBAAiB,CAAC,IAAA,gBAAM,EAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC5B,MAAM,CAAC,eAAe,CAAC,IAAA,gBAAM,EAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QAEtC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,CACL,mBAAQ,CAAC,aAAa,EAAE;YACxB,mBAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,CAAC;YAC/B,mBAAQ,CAAC,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAC;YAClC,mBAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAChC,mBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;YAC3B,mBAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAC/B,CAAA;IACH,CAAC;CACF;AAvDD,8BAuDC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { BinaryIO } from '../common/BinaryIO';
|
|
4
|
+
import { ArxTEA } from './TEA';
|
|
5
|
+
import { ArxOldKeyFrame } from './OldKeyFrame';
|
|
6
|
+
/**
|
|
7
|
+
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/animation/AnimationFormat.h#L102
|
|
8
|
+
*/
|
|
9
|
+
export type ArxNewKeyFrame = ArxOldKeyFrame & {
|
|
10
|
+
info_frame: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class NewKeyFrame {
|
|
13
|
+
static readFrom(binary: BinaryIO): ArxNewKeyFrame;
|
|
14
|
+
static accumulateFrom(json: ArxTEA): Buffer;
|
|
15
|
+
static sizeOf(): number;
|
|
16
|
+
}
|