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.
Files changed (145) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +142 -0
  3. package/dist/bin/convert.d.ts +2 -0
  4. package/dist/bin/convert.js +145 -0
  5. package/dist/bin/convert.js.map +1 -0
  6. package/dist/bin/helpers.d.ts +18 -0
  7. package/dist/bin/helpers.js +160 -0
  8. package/dist/bin/helpers.js.map +1 -0
  9. package/dist/common/BinaryIO.d.ts +64 -0
  10. package/dist/common/BinaryIO.js +293 -0
  11. package/dist/common/BinaryIO.js.map +1 -0
  12. package/dist/common/Color.d.ts +25 -0
  13. package/dist/common/Color.js +45 -0
  14. package/dist/common/Color.js.map +1 -0
  15. package/dist/common/Light.d.ts +47 -0
  16. package/dist/common/Light.js +78 -0
  17. package/dist/common/Light.js.map +1 -0
  18. package/dist/common/TextIO.d.ts +4 -0
  19. package/dist/common/TextIO.js +16 -0
  20. package/dist/common/TextIO.js.map +1 -0
  21. package/dist/common/constants.d.ts +71 -0
  22. package/dist/common/constants.js +230 -0
  23. package/dist/common/constants.js.map +1 -0
  24. package/dist/common/helpers.d.ts +18 -0
  25. package/dist/common/helpers.js +62 -0
  26. package/dist/common/helpers.js.map +1 -0
  27. package/dist/common/types.d.ts +27 -0
  28. package/dist/common/types.js +3 -0
  29. package/dist/common/types.js.map +1 -0
  30. package/dist/dlf/DLF.d.ts +25 -0
  31. package/dist/dlf/DLF.js +63 -0
  32. package/dist/dlf/DLF.js.map +1 -0
  33. package/dist/dlf/DlfHeader.d.ts +30 -0
  34. package/dist/dlf/DlfHeader.js +87 -0
  35. package/dist/dlf/DlfHeader.js.map +1 -0
  36. package/dist/dlf/Fog.d.ts +27 -0
  37. package/dist/dlf/Fog.js +64 -0
  38. package/dist/dlf/Fog.js.map +1 -0
  39. package/dist/dlf/InteactiveObject.d.ts +18 -0
  40. package/dist/dlf/InteactiveObject.js +41 -0
  41. package/dist/dlf/InteactiveObject.js.map +1 -0
  42. package/dist/dlf/PathHeader.d.ts +27 -0
  43. package/dist/dlf/PathHeader.js +64 -0
  44. package/dist/dlf/PathHeader.js.map +1 -0
  45. package/dist/dlf/Pathway.d.ts +17 -0
  46. package/dist/dlf/Pathway.js +40 -0
  47. package/dist/dlf/Pathway.js.map +1 -0
  48. package/dist/dlf/Scene.d.ts +16 -0
  49. package/dist/dlf/Scene.js +36 -0
  50. package/dist/dlf/Scene.js.map +1 -0
  51. package/dist/ftl/FTL.d.ts +10 -0
  52. package/dist/ftl/FTL.js +115 -0
  53. package/dist/ftl/FTL.js.map +1 -0
  54. package/dist/ftl/FtlHeader.d.ts +12 -0
  55. package/dist/ftl/FtlHeader.js +24 -0
  56. package/dist/ftl/FtlHeader.js.map +1 -0
  57. package/dist/fts/Anchor.d.ts +12 -0
  58. package/dist/fts/Anchor.js +35 -0
  59. package/dist/fts/Anchor.js.map +1 -0
  60. package/dist/fts/AnchorData.d.ts +20 -0
  61. package/dist/fts/AnchorData.js +31 -0
  62. package/dist/fts/AnchorData.js.map +1 -0
  63. package/dist/fts/Cell.d.ts +12 -0
  64. package/dist/fts/Cell.js +32 -0
  65. package/dist/fts/Cell.js.map +1 -0
  66. package/dist/fts/EPData.d.ts +19 -0
  67. package/dist/fts/EPData.js +22 -0
  68. package/dist/fts/EPData.js.map +1 -0
  69. package/dist/fts/FTS.d.ts +28 -0
  70. package/dist/fts/FTS.js +88 -0
  71. package/dist/fts/FTS.js.map +1 -0
  72. package/dist/fts/FtsHeader.d.ts +18 -0
  73. package/dist/fts/FtsHeader.js +45 -0
  74. package/dist/fts/FtsHeader.js.map +1 -0
  75. package/dist/fts/Polygon.d.ts +29 -0
  76. package/dist/fts/Polygon.js +49 -0
  77. package/dist/fts/Polygon.js.map +1 -0
  78. package/dist/fts/Portal.d.ts +19 -0
  79. package/dist/fts/Portal.js +32 -0
  80. package/dist/fts/Portal.js.map +1 -0
  81. package/dist/fts/PortalPolygon.d.ts +29 -0
  82. package/dist/fts/PortalPolygon.js +59 -0
  83. package/dist/fts/PortalPolygon.js.map +1 -0
  84. package/dist/fts/Room.d.ts +12 -0
  85. package/dist/fts/Room.js +27 -0
  86. package/dist/fts/Room.js.map +1 -0
  87. package/dist/fts/RoomData.d.ts +16 -0
  88. package/dist/fts/RoomData.js +29 -0
  89. package/dist/fts/RoomData.js.map +1 -0
  90. package/dist/fts/RoomDistance.d.ts +17 -0
  91. package/dist/fts/RoomDistance.js +27 -0
  92. package/dist/fts/RoomDistance.js.map +1 -0
  93. package/dist/fts/SceneHeader.d.ts +21 -0
  94. package/dist/fts/SceneHeader.js +45 -0
  95. package/dist/fts/SceneHeader.js.map +1 -0
  96. package/dist/fts/SceneInfo.d.ts +16 -0
  97. package/dist/fts/SceneInfo.js +26 -0
  98. package/dist/fts/SceneInfo.js.map +1 -0
  99. package/dist/fts/TextureContainer.d.ts +16 -0
  100. package/dist/fts/TextureContainer.js +27 -0
  101. package/dist/fts/TextureContainer.js.map +1 -0
  102. package/dist/fts/TextureVertex.d.ts +21 -0
  103. package/dist/fts/TextureVertex.js +34 -0
  104. package/dist/fts/TextureVertex.js.map +1 -0
  105. package/dist/fts/UniqueHeader.d.ts +15 -0
  106. package/dist/fts/UniqueHeader.js +25 -0
  107. package/dist/fts/UniqueHeader.js.map +1 -0
  108. package/dist/fts/Vertex.d.ts +19 -0
  109. package/dist/fts/Vertex.js +23 -0
  110. package/dist/fts/Vertex.js.map +1 -0
  111. package/dist/helpers.d.ts +1 -0
  112. package/dist/helpers.js +6 -0
  113. package/dist/helpers.js.map +1 -0
  114. package/dist/index.d.ts +5 -0
  115. package/dist/index.js +14 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/llf/LLF.d.ts +14 -0
  118. package/dist/llf/LLF.js +44 -0
  119. package/dist/llf/LLF.js.map +1 -0
  120. package/dist/llf/LightingHeader.d.ts +11 -0
  121. package/dist/llf/LightingHeader.js +26 -0
  122. package/dist/llf/LightingHeader.js.map +1 -0
  123. package/dist/llf/LlfHeader.d.ts +20 -0
  124. package/dist/llf/LlfHeader.js +53 -0
  125. package/dist/llf/LlfHeader.js.map +1 -0
  126. package/dist/tea/NewKeyFrame.d.ts +16 -0
  127. package/dist/tea/NewKeyFrame.js +33 -0
  128. package/dist/tea/NewKeyFrame.js.map +1 -0
  129. package/dist/tea/OldKeyFrame.d.ts +22 -0
  130. package/dist/tea/OldKeyFrame.js +30 -0
  131. package/dist/tea/OldKeyFrame.js.map +1 -0
  132. package/dist/tea/TEA.d.ts +26 -0
  133. package/dist/tea/TEA.js +82 -0
  134. package/dist/tea/TEA.js.map +1 -0
  135. package/dist/tea/TeaHeader.d.ts +20 -0
  136. package/dist/tea/TeaHeader.js +29 -0
  137. package/dist/tea/TeaHeader.js.map +1 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -0
  139. package/dist/types.d.ts +33 -0
  140. package/dist/types.js +19 -0
  141. package/dist/types.js.map +1 -0
  142. package/dist/utils.d.ts +3 -0
  143. package/dist/utils.js +9 -0
  144. package/dist/utils.js.map +1 -0
  145. 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';
@@ -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"}
@@ -0,0 +1,5 @@
1
+ export { DLF } from './dlf/DLF';
2
+ export { FTS } from './fts/FTS';
3
+ export { LLF } from './llf/LLF';
4
+ export { FTL } from './ftl/FTL';
5
+ export { TEA } from './tea/TEA';
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
+ }
@@ -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
+ }