rw-parser-ng 2.1.1 → 2.3.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 (141) hide show
  1. package/README.md +252 -52
  2. package/lib/codecs/bitmap.d.ts +6 -0
  3. package/lib/codecs/bitmap.js +77 -0
  4. package/lib/codecs/color.d.ts +6 -0
  5. package/lib/codecs/color.js +43 -0
  6. package/lib/codecs/dxt.d.ts +3 -0
  7. package/lib/codecs/dxt.js +212 -0
  8. package/lib/codecs/formats.d.ts +25 -0
  9. package/lib/codecs/formats.js +32 -0
  10. package/lib/codecs/index.d.ts +5 -0
  11. package/lib/codecs/index.js +21 -0
  12. package/lib/codecs/palette.d.ts +6 -0
  13. package/lib/codecs/palette.js +86 -0
  14. package/lib/common/types.d.ts +50 -0
  15. package/lib/common/types.js +2 -0
  16. package/lib/core/byte-stream.d.ts +20 -0
  17. package/lib/core/byte-stream.js +71 -0
  18. package/lib/core/errors.d.ts +5 -0
  19. package/lib/core/errors.js +34 -0
  20. package/lib/core/index.d.ts +5 -0
  21. package/lib/core/index.js +21 -0
  22. package/lib/core/rw-file.d.ts +9 -0
  23. package/lib/core/rw-file.js +36 -0
  24. package/lib/core/rw-sections.d.ts +24 -0
  25. package/lib/core/rw-sections.js +28 -0
  26. package/lib/core/rw-version.d.ts +3 -0
  27. package/lib/core/rw-version.js +27 -0
  28. package/lib/dff/dff-model-type.d.ts +5 -0
  29. package/lib/dff/dff-model-type.js +9 -0
  30. package/lib/dff/index.d.ts +4 -0
  31. package/lib/dff/index.js +20 -0
  32. package/lib/dff/parser.d.ts +5 -0
  33. package/lib/dff/parser.js +154 -0
  34. package/lib/dff/readers/2d-effect.d.ts +3 -0
  35. package/lib/dff/readers/2d-effect.js +211 -0
  36. package/lib/dff/readers/geometry.d.ts +4 -0
  37. package/lib/dff/readers/geometry.js +229 -0
  38. package/lib/dff/readers/index.d.ts +5 -0
  39. package/lib/dff/readers/index.js +21 -0
  40. package/lib/dff/readers/material.d.ts +5 -0
  41. package/lib/dff/readers/material.js +72 -0
  42. package/lib/dff/readers/mesh.d.ts +5 -0
  43. package/lib/dff/readers/mesh.js +84 -0
  44. package/lib/dff/readers/structure.d.ts +6 -0
  45. package/lib/dff/readers/structure.js +67 -0
  46. package/lib/dff/types.d.ts +237 -0
  47. package/lib/dff/types.js +44 -0
  48. package/lib/fxp/index.d.ts +2 -0
  49. package/lib/fxp/index.js +18 -0
  50. package/lib/fxp/info-parser.d.ts +2 -0
  51. package/lib/fxp/info-parser.js +169 -0
  52. package/lib/fxp/parser.d.ts +3 -0
  53. package/lib/fxp/parser.js +285 -0
  54. package/lib/fxp/types/common.d.ts +36 -0
  55. package/lib/fxp/types/common.js +2 -0
  56. package/lib/fxp/types/index.d.ts +3 -0
  57. package/lib/fxp/types/index.js +19 -0
  58. package/lib/fxp/types/info.d.ts +186 -0
  59. package/lib/fxp/types/info.js +2 -0
  60. package/lib/fxp/types/system.d.ts +27 -0
  61. package/lib/fxp/types/system.js +2 -0
  62. package/lib/ifp/index.d.ts +4 -0
  63. package/lib/ifp/index.js +20 -0
  64. package/lib/ifp/parser.d.ts +5 -0
  65. package/lib/ifp/parser.js +38 -0
  66. package/lib/ifp/readers/anp3.d.ts +3 -0
  67. package/lib/ifp/readers/anp3.js +56 -0
  68. package/lib/ifp/readers/anpk.d.ts +3 -0
  69. package/lib/ifp/readers/anpk.js +86 -0
  70. package/lib/ifp/types.d.ts +28 -0
  71. package/lib/ifp/types.js +9 -0
  72. package/lib/index.d.ts +6 -9
  73. package/lib/index.js +6 -13
  74. package/lib/renderware/fxp/FxpData.d.ts +246 -0
  75. package/lib/renderware/fxp/FxpData.js +2 -0
  76. package/lib/renderware/fxp/FxpParser.d.ts +3 -0
  77. package/lib/renderware/fxp/FxpParser.js +512 -0
  78. package/lib/renderware/fxp/index.d.ts +2 -0
  79. package/lib/renderware/fxp/index.js +18 -0
  80. package/lib/txd/bitmap-decoder.d.ts +3 -0
  81. package/lib/txd/bitmap-decoder.js +57 -0
  82. package/lib/txd/index.d.ts +3 -0
  83. package/lib/txd/index.js +19 -0
  84. package/lib/txd/parser.d.ts +8 -0
  85. package/lib/txd/parser.js +122 -0
  86. package/lib/txd/types.d.ts +27 -0
  87. package/lib/txd/types.js +2 -0
  88. package/package.json +16 -9
  89. package/src/codecs/bitmap.ts +75 -0
  90. package/src/codecs/color.ts +40 -0
  91. package/src/codecs/dxt.ts +243 -0
  92. package/src/codecs/formats.ts +28 -0
  93. package/src/codecs/index.ts +5 -0
  94. package/src/codecs/palette.ts +106 -0
  95. package/src/common/types.ts +59 -0
  96. package/src/core/byte-stream.ts +87 -0
  97. package/src/core/errors.ts +7 -0
  98. package/src/core/index.ts +5 -0
  99. package/src/core/rw-file.ts +23 -0
  100. package/src/core/rw-sections.ts +24 -0
  101. package/src/core/rw-version.ts +24 -0
  102. package/src/dff/dff-model-type.ts +5 -0
  103. package/src/dff/index.ts +4 -0
  104. package/src/dff/parser.ts +142 -0
  105. package/src/dff/readers/2d-effect.ts +265 -0
  106. package/src/dff/readers/geometry.ts +264 -0
  107. package/src/dff/readers/index.ts +5 -0
  108. package/src/dff/readers/material.ts +89 -0
  109. package/src/dff/readers/mesh.ts +93 -0
  110. package/src/dff/readers/structure.ts +79 -0
  111. package/src/dff/types.ts +278 -0
  112. package/src/fxp/index.ts +2 -0
  113. package/src/fxp/info-parser.ts +166 -0
  114. package/src/fxp/parser.ts +323 -0
  115. package/src/fxp/types/common.ts +23 -0
  116. package/src/fxp/types/index.ts +3 -0
  117. package/src/fxp/types/info.ts +251 -0
  118. package/src/fxp/types/system.ts +30 -0
  119. package/src/ifp/index.ts +4 -0
  120. package/src/ifp/parser.ts +16 -0
  121. package/src/ifp/readers/anp3.ts +75 -0
  122. package/src/ifp/readers/anpk.ts +110 -0
  123. package/src/ifp/types.ts +33 -0
  124. package/src/index.ts +6 -12
  125. package/src/txd/bitmap-decoder.ts +73 -0
  126. package/src/txd/index.ts +3 -0
  127. package/src/txd/parser.ts +148 -0
  128. package/src/txd/types.ts +29 -0
  129. package/src/renderware/RwFile.ts +0 -26
  130. package/src/renderware/RwSections.ts +0 -27
  131. package/src/renderware/common/types.ts +0 -59
  132. package/src/renderware/dff/DffModelType.ts +0 -5
  133. package/src/renderware/dff/DffParser.ts +0 -611
  134. package/src/renderware/errors/RwParseError.ts +0 -11
  135. package/src/renderware/ifp/IfpData.ts +0 -33
  136. package/src/renderware/ifp/IfpParser.ts +0 -203
  137. package/src/renderware/txd/TxdParser.ts +0 -235
  138. package/src/renderware/utils/ImageDecoder.ts +0 -571
  139. package/src/renderware/utils/ImageFormatEnums.ts +0 -28
  140. package/src/renderware/utils/RwVersion.ts +0 -28
  141. package/src/utils/ByteStream.ts +0 -80
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readGeometryList = readGeometryList;
4
+ exports.readGeometry = readGeometry;
5
+ var rw_sections_1 = require("../../core/rw-sections");
6
+ var rw_version_1 = require("../../core/rw-version");
7
+ var _2d_effect_1 = require("./2d-effect");
8
+ var material_1 = require("./material");
9
+ var mesh_1 = require("./mesh");
10
+ function readGeometryList(file, header) {
11
+ file.readSectionHeader();
12
+ var geometricObjectCount = file.readUint32();
13
+ var geometries = [];
14
+ var versionNumber = (0, rw_version_1.unpackVersion)(header.versionNumber);
15
+ for (var i = 0; i < geometricObjectCount; i++) {
16
+ file.readSectionHeader();
17
+ file.readSectionHeader();
18
+ geometries.push(readGeometry(file, versionNumber));
19
+ }
20
+ return { geometricObjectCount: geometricObjectCount, geometries: geometries };
21
+ }
22
+ function readGeometry(file, versionNumber) {
23
+ var flags = file.readUint16();
24
+ var textureCoordinatesCount = file.readUint8();
25
+ file.readUint8();
26
+ var triangleCount = file.readUint32();
27
+ var vertexCount = file.readUint32();
28
+ file.readUint32();
29
+ if (versionNumber < 0x34000) {
30
+ file.skip(12);
31
+ }
32
+ var isTriangleStrip = (flags & (1 << 0)) !== 0;
33
+ var isTexturedUV1 = (flags & (1 << 2)) !== 0;
34
+ var isGeometryPrelit = (flags & (1 << 3)) !== 0;
35
+ var isTexturedUV2 = (flags & (1 << 7)) !== 0;
36
+ var vertexColorInformation = [];
37
+ if (isGeometryPrelit) {
38
+ for (var i = 0; i < vertexCount; i++) {
39
+ vertexColorInformation.push({
40
+ r: file.readUint8(),
41
+ g: file.readUint8(),
42
+ b: file.readUint8(),
43
+ a: file.readUint8(),
44
+ });
45
+ }
46
+ }
47
+ var textureMappingInformation = [];
48
+ if (isTexturedUV1 || isTexturedUV2) {
49
+ for (var t = 0; t < textureCoordinatesCount; t++) {
50
+ textureMappingInformation[t] = [];
51
+ for (var v = 0; v < vertexCount; v++) {
52
+ textureMappingInformation[t][v] = {
53
+ u: file.readFloat(),
54
+ v: file.readFloat(),
55
+ };
56
+ }
57
+ }
58
+ }
59
+ var triangleInformation = [];
60
+ for (var i = 0; i < triangleCount; i++) {
61
+ var vertex2 = file.readUint16();
62
+ var vertex1 = file.readUint16();
63
+ var materialId = file.readUint16();
64
+ var vertex3 = file.readUint16();
65
+ triangleInformation.push({
66
+ vector: { x: vertex1, y: vertex2, z: vertex3 },
67
+ materialId: materialId,
68
+ });
69
+ }
70
+ var boundingSphere = {
71
+ vector: { x: file.readFloat(), y: file.readFloat(), z: file.readFloat() },
72
+ radius: file.readFloat(),
73
+ };
74
+ var hasVertices = !!file.readUint32();
75
+ var hasNormals = !!file.readUint32();
76
+ var vertexInformation = [];
77
+ if (hasVertices) {
78
+ for (var i = 0; i < vertexCount; i++) {
79
+ vertexInformation.push({
80
+ x: file.readFloat(),
81
+ y: file.readFloat(),
82
+ z: file.readFloat(),
83
+ });
84
+ }
85
+ }
86
+ var normalInformation = [];
87
+ if (hasNormals) {
88
+ for (var i = 0; i < vertexCount; i++) {
89
+ normalInformation.push({
90
+ x: file.readFloat(),
91
+ y: file.readFloat(),
92
+ z: file.readFloat(),
93
+ });
94
+ }
95
+ }
96
+ var materialList = (0, material_1.readMaterialList)(file);
97
+ var extensionSize = file.readSectionHeader().sectionSize;
98
+ var binMesh;
99
+ var skin;
100
+ var effects2d;
101
+ var extraVertColour;
102
+ var breakable;
103
+ var relativePosition = 0;
104
+ while (relativePosition < extensionSize) {
105
+ var extHeader = file.readSectionHeader();
106
+ relativePosition += extHeader.sectionSize + 12;
107
+ var sectionStart = file.getPosition();
108
+ switch (extHeader.sectionType) {
109
+ case rw_sections_1.RwSections.RwBinMesh:
110
+ binMesh = (0, mesh_1.readBinMesh)(file);
111
+ break;
112
+ case rw_sections_1.RwSections.RwSkin:
113
+ skin = (0, mesh_1.readSkin)(file, vertexCount);
114
+ break;
115
+ case rw_sections_1.RwSections.Rw2dEffect:
116
+ effects2d = (0, _2d_effect_1.read2dEffects)(file, extHeader.sectionSize);
117
+ break;
118
+ case rw_sections_1.RwSections.RwExtraVertColour:
119
+ extraVertColour = [];
120
+ for (var i = 0; i < vertexCount; i++) {
121
+ extraVertColour.push({
122
+ r: file.readUint8(),
123
+ g: file.readUint8(),
124
+ b: file.readUint8(),
125
+ a: file.readUint8(),
126
+ });
127
+ }
128
+ break;
129
+ case rw_sections_1.RwSections.RwBreakable:
130
+ breakable = readBreakable(file);
131
+ break;
132
+ default:
133
+ file.skip(extHeader.sectionSize);
134
+ break;
135
+ }
136
+ file.setPosition(sectionStart + extHeader.sectionSize);
137
+ }
138
+ return {
139
+ textureCoordinatesCount: textureCoordinatesCount,
140
+ textureMappingInformation: textureMappingInformation,
141
+ boundingSphere: boundingSphere,
142
+ hasVertices: hasVertices,
143
+ hasNormals: hasNormals,
144
+ isTriangleStrip: isTriangleStrip,
145
+ vertexColorInformation: vertexColorInformation,
146
+ vertexInformation: vertexInformation,
147
+ normalInformation: normalInformation,
148
+ triangleInformation: triangleInformation,
149
+ materialList: materialList,
150
+ binMesh: binMesh,
151
+ skin: skin,
152
+ effects2d: effects2d,
153
+ extraVertColour: extraVertColour,
154
+ breakable: breakable,
155
+ };
156
+ }
157
+ function readBreakable(file) {
158
+ var sectionHeader = file.readUint32();
159
+ if (!sectionHeader)
160
+ return undefined;
161
+ var positionRule = file.readUint32();
162
+ var numVertices = file.readUint16();
163
+ file.skip(2);
164
+ file.skip(4 * 3);
165
+ var numTriangles = file.readUint16();
166
+ file.skip(2);
167
+ file.skip(4 * 2);
168
+ var numMaterials = file.readUint16();
169
+ file.skip(2);
170
+ file.skip(4 * 4);
171
+ var vertices = [];
172
+ for (var i = 0; i < numVertices; i++) {
173
+ vertices.push({
174
+ x: file.readFloat(),
175
+ y: file.readFloat(),
176
+ z: file.readFloat(),
177
+ });
178
+ }
179
+ var texCoords = [];
180
+ for (var i = 0; i < numVertices; i++) {
181
+ texCoords.push({ u: file.readFloat(), v: file.readFloat() });
182
+ }
183
+ var colors = [];
184
+ for (var i = 0; i < numVertices; i++) {
185
+ colors.push({
186
+ r: file.readUint8(),
187
+ g: file.readUint8(),
188
+ b: file.readUint8(),
189
+ a: file.readUint8(),
190
+ });
191
+ }
192
+ var triangles = [];
193
+ for (var i = 0; i < numTriangles; i++) {
194
+ triangles.push({
195
+ a: file.readUint16(),
196
+ b: file.readUint16(),
197
+ c: file.readUint16(),
198
+ });
199
+ }
200
+ var triangleMaterialIndices = [];
201
+ for (var i = 0; i < numTriangles; i++) {
202
+ triangleMaterialIndices.push(file.readUint16());
203
+ }
204
+ var textureNames = [];
205
+ for (var i = 0; i < numMaterials; i++) {
206
+ textureNames.push(file.readString(32).replace(/\0+$/, ""));
207
+ }
208
+ var maskNames = [];
209
+ for (var i = 0; i < numMaterials; i++) {
210
+ maskNames.push(file.readString(32).replace(/\0+$/, ""));
211
+ }
212
+ var materials = [];
213
+ for (var i = 0; i < numMaterials; i++) {
214
+ materials.push({
215
+ textureName: textureNames[i],
216
+ maskName: maskNames[i],
217
+ color: { r: file.readFloat(), g: file.readFloat(), b: file.readFloat() },
218
+ });
219
+ }
220
+ return {
221
+ positionRule: positionRule,
222
+ vertices: vertices,
223
+ texCoords: texCoords,
224
+ colors: colors,
225
+ triangles: triangles,
226
+ triangleMaterialIndices: triangleMaterialIndices,
227
+ materials: materials,
228
+ };
229
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./2d-effect";
2
+ export * from "./geometry";
3
+ export * from "./material";
4
+ export * from "./mesh";
5
+ export * from "./structure";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./2d-effect"), exports);
18
+ __exportStar(require("./geometry"), exports);
19
+ __exportStar(require("./material"), exports);
20
+ __exportStar(require("./mesh"), exports);
21
+ __exportStar(require("./structure"), exports);
@@ -0,0 +1,5 @@
1
+ import type { RwFile } from "../../core/rw-file";
2
+ import type { RwMaterial, RwMaterialList, RwTexture } from "../types";
3
+ export declare function readTexture(file: RwFile): RwTexture;
4
+ export declare function readMaterial(file: RwFile): RwMaterial;
5
+ export declare function readMaterialList(file: RwFile): RwMaterialList;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readTexture = readTexture;
4
+ exports.readMaterial = readMaterial;
5
+ exports.readMaterialList = readMaterialList;
6
+ function readTexture(file) {
7
+ file.readSectionHeader();
8
+ file.readSectionHeader();
9
+ var textureData = file.readUint32();
10
+ var textureFiltering = textureData & 0xff;
11
+ var uAddressing = (textureData & 0xf00) >> 8;
12
+ var vAddressing = (textureData & 0xf000) >> 12;
13
+ var usesMipLevels = (textureData & (1 << 16)) !== 0;
14
+ var textureNameSize = file.readSectionHeader().sectionSize;
15
+ var textureName = file.readString(textureNameSize);
16
+ file.skip(file.readSectionHeader().sectionSize);
17
+ file.skip(file.readSectionHeader().sectionSize);
18
+ return {
19
+ textureFiltering: textureFiltering,
20
+ uAddressing: uAddressing,
21
+ vAddressing: vAddressing,
22
+ usesMipLevels: usesMipLevels,
23
+ textureName: textureName,
24
+ };
25
+ }
26
+ function readMaterial(file) {
27
+ file.readSectionHeader();
28
+ var header = file.readSectionHeader();
29
+ file.skip(4);
30
+ var color = {
31
+ r: file.readUint8(),
32
+ g: file.readUint8(),
33
+ b: file.readUint8(),
34
+ a: file.readUint8(),
35
+ };
36
+ file.skip(4);
37
+ var isTextured = file.readUint32() > 0;
38
+ var ambient;
39
+ var specular;
40
+ var diffuse;
41
+ if (header.versionNumber > 0x30400) {
42
+ ambient = file.readFloat();
43
+ specular = file.readFloat();
44
+ diffuse = file.readFloat();
45
+ }
46
+ var texture;
47
+ if (isTextured) {
48
+ texture = readTexture(file);
49
+ }
50
+ file.skip(file.readSectionHeader().sectionSize);
51
+ return { color: color, isTextured: isTextured, ambient: ambient, specular: specular, diffuse: diffuse, texture: texture };
52
+ }
53
+ function readMaterialList(file) {
54
+ file.readSectionHeader();
55
+ file.readSectionHeader();
56
+ var materialInstanceCount = file.readUint32();
57
+ var materialIndices = [];
58
+ for (var i = 0; i < materialInstanceCount; i++) {
59
+ materialIndices.push(file.readInt32());
60
+ }
61
+ var materialData = [];
62
+ for (var i = 0; i < materialInstanceCount; i++) {
63
+ var materialIndex = materialIndices[i];
64
+ if (materialIndex === -1) {
65
+ materialData.push(readMaterial(file));
66
+ }
67
+ else {
68
+ materialData.push(materialData[materialIndex]);
69
+ }
70
+ }
71
+ return { materialInstanceCount: materialInstanceCount, materialData: materialData };
72
+ }
@@ -0,0 +1,5 @@
1
+ import type { RwFile } from "../../core/rw-file";
2
+ import type { RwBinMesh, RwMesh, RwSkin } from "../types";
3
+ export declare function readMesh(file: RwFile): RwMesh;
4
+ export declare function readBinMesh(file: RwFile): RwBinMesh;
5
+ export declare function readSkin(file: RwFile, vertexCount: number): RwSkin;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readMesh = readMesh;
4
+ exports.readBinMesh = readBinMesh;
5
+ exports.readSkin = readSkin;
6
+ function readMesh(file) {
7
+ var indexCount = file.readUint32();
8
+ var materialIndex = file.readUint32();
9
+ var indices = [];
10
+ for (var i = 0; i < indexCount; i++) {
11
+ indices.push(file.readUint32());
12
+ }
13
+ return { indexCount: indexCount, materialIndex: materialIndex, indices: indices };
14
+ }
15
+ function readBinMesh(file) {
16
+ file.skip(4);
17
+ var meshCount = file.readUint32();
18
+ file.skip(4);
19
+ var meshes = [];
20
+ for (var i = 0; i < meshCount; i++) {
21
+ meshes.push(readMesh(file));
22
+ }
23
+ return { meshCount: meshCount, meshes: meshes };
24
+ }
25
+ function readSkin(file, vertexCount) {
26
+ var boneCount = file.readUint8();
27
+ var usedBoneCount = file.readUint8();
28
+ var maxWeightsPerVertex = file.readUint8();
29
+ file.skip(1);
30
+ file.skip(usedBoneCount);
31
+ var boneVertexIndices = [];
32
+ for (var i = 0; i < vertexCount; i++) {
33
+ var indices = [];
34
+ for (var j = 0; j < 4; j++) {
35
+ indices.push(file.readUint8());
36
+ }
37
+ boneVertexIndices.push(indices);
38
+ }
39
+ var vertexWeights = [];
40
+ for (var i = 0; i < vertexCount; i++) {
41
+ var weights = [];
42
+ for (var j = 0; j < 4; j++) {
43
+ weights.push(file.readFloat());
44
+ }
45
+ vertexWeights.push(weights);
46
+ }
47
+ var inverseBoneMatrices = [];
48
+ for (var i = 0; i < boneCount; i++) {
49
+ inverseBoneMatrices.push({
50
+ right: {
51
+ x: file.readFloat(),
52
+ y: file.readFloat(),
53
+ z: file.readFloat(),
54
+ t: file.readFloat(),
55
+ },
56
+ up: {
57
+ x: file.readFloat(),
58
+ y: file.readFloat(),
59
+ z: file.readFloat(),
60
+ t: file.readFloat(),
61
+ },
62
+ at: {
63
+ x: file.readFloat(),
64
+ y: file.readFloat(),
65
+ z: file.readFloat(),
66
+ t: file.readFloat(),
67
+ },
68
+ transform: {
69
+ x: file.readFloat(),
70
+ y: file.readFloat(),
71
+ z: file.readFloat(),
72
+ t: file.readFloat(),
73
+ },
74
+ });
75
+ }
76
+ return {
77
+ boneCount: boneCount,
78
+ usedBoneCount: usedBoneCount,
79
+ maxWeightsPerVertex: maxWeightsPerVertex,
80
+ boneVertexIndices: boneVertexIndices,
81
+ vertexWeights: vertexWeights,
82
+ inverseBoneMatrices: inverseBoneMatrices,
83
+ };
84
+ }
@@ -0,0 +1,6 @@
1
+ import type { RwFile } from "../../core/rw-file";
2
+ import type { RwAnimNode, RwAtomic, RwClump, RwFrameList } from "../types";
3
+ export declare function readClump(file: RwFile): RwClump;
4
+ export declare function readFrameList(file: RwFile): RwFrameList;
5
+ export declare function readAnimNode(file: RwFile): RwAnimNode;
6
+ export declare function readAtomic(file: RwFile): RwAtomic;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readClump = readClump;
4
+ exports.readFrameList = readFrameList;
5
+ exports.readAnimNode = readAnimNode;
6
+ exports.readAtomic = readAtomic;
7
+ function readClump(file) {
8
+ var versionNumber = file.readSectionHeader().versionNumber;
9
+ var atomicCount = file.readUint32();
10
+ var lightCount;
11
+ var cameraCount;
12
+ if (versionNumber > 0x33000) {
13
+ lightCount = file.readUint32();
14
+ cameraCount = file.readUint32();
15
+ }
16
+ return { atomicCount: atomicCount, lightCount: lightCount, cameraCount: cameraCount };
17
+ }
18
+ function readFrameList(file) {
19
+ file.readSectionHeader();
20
+ var frameCount = file.readUint32();
21
+ var frames = [];
22
+ for (var i = 0; i < frameCount; i++) {
23
+ var rotationMatrix = {
24
+ right: {
25
+ x: file.readFloat(),
26
+ y: file.readFloat(),
27
+ z: file.readFloat(),
28
+ },
29
+ up: { x: file.readFloat(), y: file.readFloat(), z: file.readFloat() },
30
+ at: { x: file.readFloat(), y: file.readFloat(), z: file.readFloat() },
31
+ };
32
+ var coordinatesOffset = {
33
+ x: file.readFloat(),
34
+ y: file.readFloat(),
35
+ z: file.readFloat(),
36
+ };
37
+ var parentFrame = file.readInt32();
38
+ file.skip(4);
39
+ frames.push({ rotationMatrix: rotationMatrix, coordinatesOffset: coordinatesOffset, parentFrame: parentFrame });
40
+ }
41
+ return { frameCount: frameCount, frames: frames };
42
+ }
43
+ function readAnimNode(file) {
44
+ file.skip(4);
45
+ var boneId = file.readInt32();
46
+ var boneCount = file.readInt32();
47
+ var bones = [];
48
+ if (boneCount > 0) {
49
+ file.skip(8);
50
+ }
51
+ for (var i = 0; i < boneCount; i++) {
52
+ bones.push({
53
+ boneId: file.readInt32(),
54
+ boneIndex: file.readInt32(),
55
+ flags: file.readInt32(),
56
+ });
57
+ }
58
+ return { boneId: boneId, bonesCount: boneCount, bones: bones };
59
+ }
60
+ function readAtomic(file) {
61
+ file.readSectionHeader();
62
+ var frameIndex = file.readUint32();
63
+ var geometryIndex = file.readUint32();
64
+ var flags = file.readUint32();
65
+ file.skip(4);
66
+ return { frameIndex: frameIndex, geometryIndex: geometryIndex, flags: flags };
67
+ }