rw-parser-ng 2.1.0 → 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 (142) 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/renderware/txd/TxdParser.js +3 -2
  81. package/lib/txd/bitmap-decoder.d.ts +3 -0
  82. package/lib/txd/bitmap-decoder.js +57 -0
  83. package/lib/txd/index.d.ts +3 -0
  84. package/lib/txd/index.js +19 -0
  85. package/lib/txd/parser.d.ts +8 -0
  86. package/lib/txd/parser.js +122 -0
  87. package/lib/txd/types.d.ts +27 -0
  88. package/lib/txd/types.js +2 -0
  89. package/package.json +16 -9
  90. package/src/codecs/bitmap.ts +75 -0
  91. package/src/codecs/color.ts +40 -0
  92. package/src/codecs/dxt.ts +243 -0
  93. package/src/codecs/formats.ts +28 -0
  94. package/src/codecs/index.ts +5 -0
  95. package/src/codecs/palette.ts +106 -0
  96. package/src/common/types.ts +59 -0
  97. package/src/core/byte-stream.ts +87 -0
  98. package/src/core/errors.ts +7 -0
  99. package/src/core/index.ts +5 -0
  100. package/src/core/rw-file.ts +23 -0
  101. package/src/core/rw-sections.ts +24 -0
  102. package/src/core/rw-version.ts +24 -0
  103. package/src/dff/dff-model-type.ts +5 -0
  104. package/src/dff/index.ts +4 -0
  105. package/src/dff/parser.ts +142 -0
  106. package/src/dff/readers/2d-effect.ts +265 -0
  107. package/src/dff/readers/geometry.ts +264 -0
  108. package/src/dff/readers/index.ts +5 -0
  109. package/src/dff/readers/material.ts +89 -0
  110. package/src/dff/readers/mesh.ts +93 -0
  111. package/src/dff/readers/structure.ts +79 -0
  112. package/src/dff/types.ts +278 -0
  113. package/src/fxp/index.ts +2 -0
  114. package/src/fxp/info-parser.ts +166 -0
  115. package/src/fxp/parser.ts +323 -0
  116. package/src/fxp/types/common.ts +23 -0
  117. package/src/fxp/types/index.ts +3 -0
  118. package/src/fxp/types/info.ts +251 -0
  119. package/src/fxp/types/system.ts +30 -0
  120. package/src/ifp/index.ts +4 -0
  121. package/src/ifp/parser.ts +16 -0
  122. package/src/ifp/readers/anp3.ts +75 -0
  123. package/src/ifp/readers/anpk.ts +110 -0
  124. package/src/ifp/types.ts +33 -0
  125. package/src/index.ts +6 -12
  126. package/src/txd/bitmap-decoder.ts +73 -0
  127. package/src/txd/index.ts +3 -0
  128. package/src/txd/parser.ts +148 -0
  129. package/src/txd/types.ts +29 -0
  130. package/src/renderware/RwFile.ts +0 -26
  131. package/src/renderware/RwSections.ts +0 -27
  132. package/src/renderware/common/types.ts +0 -59
  133. package/src/renderware/dff/DffModelType.ts +0 -5
  134. package/src/renderware/dff/DffParser.ts +0 -611
  135. package/src/renderware/errors/RwParseError.ts +0 -11
  136. package/src/renderware/ifp/IfpData.ts +0 -33
  137. package/src/renderware/ifp/IfpParser.ts +0 -203
  138. package/src/renderware/txd/TxdParser.ts +0 -234
  139. package/src/renderware/utils/ImageDecoder.ts +0 -571
  140. package/src/renderware/utils/ImageFormatEnums.ts +0 -28
  141. package/src/renderware/utils/RwVersion.ts +0 -28
  142. package/src/utils/ByteStream.ts +0 -80
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFxpContent = parseFxpContent;
4
+ exports.parseFxpFile = parseFxpFile;
5
+ var info_parser_1 = require("./info-parser");
6
+ var INFO_TYPE_MAP = {
7
+ "FX_INFO_EMRATE_DATA:": "emrate",
8
+ "FX_INFO_EMSIZE_DATA:": "emsize",
9
+ "FX_INFO_EMSPEED_DATA:": "emspeed",
10
+ "FX_INFO_EMDIR_DATA:": "emdir",
11
+ "FX_INFO_EMANGLE_DATA:": "emangle",
12
+ "FX_INFO_EMLIFE_DATA:": "emlife",
13
+ "FX_INFO_EMPOS_DATA:": "empos",
14
+ "FX_INFO_EMWEATHER_DATA:": "emweather",
15
+ "FX_INFO_EMROTATION_DATA:": "emrotation",
16
+ "FX_INFO_NOISE_DATA:": "noise",
17
+ "FX_INFO_FORCE_DATA:": "force",
18
+ "FX_INFO_FRICTION_DATA:": "friction",
19
+ "FX_INFO_ATTRACTPT_DATA:": "attractpt",
20
+ "FX_INFO_ATTRACTLINE_DATA:": "attractline",
21
+ "FX_INFO_GROUNDCOLLIDE_DATA:": "groundcollide",
22
+ "FX_INFO_WIND_DATA:": "wind",
23
+ "FX_INFO_JITTER_DATA:": "jitter",
24
+ "FX_INFO_ROTSPEED_DATA:": "rotspeed",
25
+ "FX_INFO_FLOAT_DATA:": "float",
26
+ "FX_INFO_UNDERWATER_DATA:": "underwater",
27
+ "FX_INFO_COLOUR_DATA:": "colour",
28
+ "FX_INFO_SIZE_DATA:": "size",
29
+ "FX_INFO_SPRITERECT_DATA:": "spriterect",
30
+ "FX_INFO_HEATHAZE_DATA:": "heathaze",
31
+ "FX_INFO_TRAIL_DATA:": "trail",
32
+ "FX_INFO_FLAT_DATA:": "flat",
33
+ "FX_INFO_DIR_DATA:": "dir",
34
+ "FX_INFO_ANIMTEX_DATA:": "animtex",
35
+ "FX_INFO_COLOURRANGE_DATA:": "colourrange",
36
+ "FX_INFO_SELFLIT_DATA:": "selflit",
37
+ "FX_INFO_COLOURBRIGHT_DATA:": "colourbright",
38
+ "FX_INFO_SMOKE_DATA:": "smoke",
39
+ };
40
+ var FxpParserImpl = /** @class */ (function () {
41
+ function FxpParserImpl() {
42
+ this._lines = [];
43
+ this._pos = 0;
44
+ }
45
+ FxpParserImpl.prototype.parse = function (content) {
46
+ this._lines = content.split("\n").map(function (l) { return l.trim(); });
47
+ this._pos = 0;
48
+ var systems = new Map();
49
+ this._expectLine("FX_PROJECT_DATA:");
50
+ while (this._pos < this._lines.length) {
51
+ var line = this._currentLine();
52
+ if (!line) {
53
+ this._pos++;
54
+ continue;
55
+ }
56
+ if (line === "FX_SYSTEM_DATA:") {
57
+ this._pos++;
58
+ this._skipEmpty();
59
+ var version = parseInt(this._currentLine(), 10);
60
+ this._pos++;
61
+ var system = this._parseSystem(version);
62
+ systems.set(system.name, system);
63
+ }
64
+ else {
65
+ this._pos++;
66
+ }
67
+ }
68
+ return { systems: systems };
69
+ };
70
+ FxpParserImpl.prototype._parseSystem = function (version) {
71
+ var _a, _b;
72
+ this._skipEmpty();
73
+ var filename = version > 100 ? this._readField("FILENAME:") : "";
74
+ var name = this._readField("NAME:");
75
+ var length = parseFloat(this._readField("LENGTH:"));
76
+ var loopIntervalMin = 0, loopLength = 0;
77
+ if (version >= 106) {
78
+ loopIntervalMin = parseFloat(this._currentLine());
79
+ this._pos++;
80
+ loopLength = parseFloat(this._currentLine());
81
+ this._pos++;
82
+ }
83
+ var playMode = parseInt(this._readField("PLAYMODE:"), 10);
84
+ var cullDist = parseFloat(this._readField("CULLDIST:"));
85
+ var boundingSphere = null;
86
+ if (version > 103) {
87
+ var parts = this._readField("BOUNDINGSPHERE:").split(/\s+/).map(parseFloat);
88
+ boundingSphere = {
89
+ x: parts[0],
90
+ y: parts[1],
91
+ z: parts[2],
92
+ radius: parts[3],
93
+ };
94
+ }
95
+ var numPrims = parseInt(this._readField("NUM_PRIMS:"), 10);
96
+ var prims = [];
97
+ for (var i = 0; i < numPrims; i++) {
98
+ this._skipEmpty();
99
+ if (this._currentLine() === "FX_PRIM_EMITTER_DATA:") {
100
+ this._pos++;
101
+ prims.push(this._parsePrimEmitter(version));
102
+ }
103
+ else {
104
+ this._pos++;
105
+ i--;
106
+ }
107
+ }
108
+ if (version >= 108) {
109
+ this._skipEmpty();
110
+ if ((_a = this._currentLine()) === null || _a === void 0 ? void 0 : _a.startsWith("OMITTEXTURES:"))
111
+ this._pos++;
112
+ }
113
+ if (version >= 109) {
114
+ this._skipEmpty();
115
+ if ((_b = this._currentLine()) === null || _b === void 0 ? void 0 : _b.startsWith("TXDNAME:"))
116
+ this._pos++;
117
+ }
118
+ return {
119
+ filename: filename,
120
+ name: name,
121
+ length: length,
122
+ loopIntervalMin: loopIntervalMin,
123
+ loopLength: loopLength,
124
+ playMode: playMode,
125
+ cullDist: cullDist,
126
+ boundingSphere: boundingSphere,
127
+ prims: prims,
128
+ };
129
+ };
130
+ FxpParserImpl.prototype._parsePrimEmitter = function (version) {
131
+ var _a, _b, _c;
132
+ this._skipEmpty();
133
+ this._expectLine("FX_PRIM_BASE_DATA:");
134
+ var name = this._readField("NAME:");
135
+ var matrix = this._parseMatrix();
136
+ var textures = [this._readNullableTexture("TEXTURE:")];
137
+ if (version > 101) {
138
+ textures.push(this._readNullableTexture("TEXTURE2:"));
139
+ textures.push(this._readNullableTexture("TEXTURE3:"));
140
+ textures.push(this._readNullableTexture("TEXTURE4:"));
141
+ }
142
+ var alphaOn = this._readField("ALPHAON:") === "1";
143
+ var srcBlendId = parseInt(this._readField("SRCBLENDID:"), 10);
144
+ var dstBlendId = parseInt(this._readField("DSTBLENDID:"), 10);
145
+ var numInfos = parseInt(this._readField("NUM_INFOS:"), 10);
146
+ var infos = [];
147
+ for (var i = 0; i < numInfos; i++) {
148
+ this._skipEmpty();
149
+ var infoType = this._currentLine();
150
+ this._pos++;
151
+ var typeKey = INFO_TYPE_MAP[infoType];
152
+ if (!typeKey) {
153
+ this._skipUnknownInfo();
154
+ continue;
155
+ }
156
+ this._skipEmpty();
157
+ if ((_a = this._currentLine()) === null || _a === void 0 ? void 0 : _a.startsWith("TIMEMODEPRT:"))
158
+ this._pos++;
159
+ var interps = typeKey === "underwater" || typeKey === "selflit" ? {} : this._parseAllInterps();
160
+ var info = (0, info_parser_1.parseInfo)(typeKey, interps);
161
+ if (info)
162
+ infos.push(info);
163
+ }
164
+ var lodStart = 0, lodEnd = 0;
165
+ this._skipEmpty();
166
+ if ((_b = this._currentLine()) === null || _b === void 0 ? void 0 : _b.startsWith("LODSTART:"))
167
+ lodStart = parseFloat(this._readField("LODSTART:"));
168
+ this._skipEmpty();
169
+ if ((_c = this._currentLine()) === null || _c === void 0 ? void 0 : _c.startsWith("LODEND:"))
170
+ lodEnd = parseFloat(this._readField("LODEND:"));
171
+ return {
172
+ name: name,
173
+ matrix: matrix,
174
+ textures: textures,
175
+ alphaOn: alphaOn,
176
+ srcBlendId: srcBlendId,
177
+ dstBlendId: dstBlendId,
178
+ lodStart: lodStart,
179
+ lodEnd: lodEnd,
180
+ infos: infos,
181
+ };
182
+ };
183
+ FxpParserImpl.prototype._parseAllInterps = function () {
184
+ var result = {};
185
+ while (this._pos < this._lines.length) {
186
+ this._skipEmpty();
187
+ var line = this._currentLine();
188
+ if (this._isBlockEnd(line))
189
+ break;
190
+ if (line.endsWith(":") && !line.startsWith("FX_")) {
191
+ var fieldName = line.slice(0, -1).toUpperCase();
192
+ this._pos++;
193
+ this._skipEmpty();
194
+ if (this._currentLine() === "FX_INTERP_DATA:") {
195
+ result[fieldName] = this._parseInterpolation();
196
+ }
197
+ }
198
+ else {
199
+ this._pos++;
200
+ }
201
+ }
202
+ return result;
203
+ };
204
+ FxpParserImpl.prototype._isBlockEnd = function (line) {
205
+ return (!line ||
206
+ line.startsWith("FX_INFO_") ||
207
+ line.startsWith("LODSTART:") ||
208
+ line.startsWith("LODEND:") ||
209
+ line.startsWith("FX_PRIM_") ||
210
+ line.startsWith("FX_SYSTEM_DATA:") ||
211
+ line.startsWith("OMITTEXTURES:") ||
212
+ line.startsWith("TXDNAME:"));
213
+ };
214
+ FxpParserImpl.prototype._parseInterpolation = function () {
215
+ this._expectLine("FX_INTERP_DATA:");
216
+ var looped = this._readField("LOOPED:") === "1";
217
+ var numKeys = parseInt(this._readField("NUM_KEYS:"), 10);
218
+ var keys = [];
219
+ for (var i = 0; i < numKeys; i++) {
220
+ this._expectLine("FX_KEYFLOAT_DATA:");
221
+ keys.push({
222
+ time: parseFloat(this._readField("TIME:")),
223
+ value: parseFloat(this._readField("VAL:")),
224
+ });
225
+ }
226
+ return { looped: looped, keys: keys };
227
+ };
228
+ FxpParserImpl.prototype._parseMatrix = function () {
229
+ this._skipEmpty();
230
+ var line = this._currentLine();
231
+ if (!(line === null || line === void 0 ? void 0 : line.startsWith("MATRIX:"))) {
232
+ return {
233
+ right: { x: 1, y: 0, z: 0 },
234
+ up: { x: 0, y: 1, z: 0 },
235
+ at: { x: 0, y: 0, z: 1 },
236
+ pos: { x: 0, y: 0, z: 0 },
237
+ };
238
+ }
239
+ var p = line.slice(7).trim().split(/\s+/).map(parseFloat);
240
+ this._pos++;
241
+ return {
242
+ right: { x: p[0], y: p[1], z: p[2] },
243
+ up: { x: p[3], y: p[4], z: p[5] },
244
+ at: { x: p[6], y: p[7], z: p[8] },
245
+ pos: { x: p[9], y: p[10], z: p[11] },
246
+ };
247
+ };
248
+ FxpParserImpl.prototype._skipUnknownInfo = function () {
249
+ while (this._pos < this._lines.length && !this._isBlockEnd(this._currentLine()))
250
+ this._pos++;
251
+ };
252
+ FxpParserImpl.prototype._readField = function (prefix) {
253
+ this._skipEmpty();
254
+ var line = this._currentLine();
255
+ if (!(line === null || line === void 0 ? void 0 : line.startsWith(prefix)))
256
+ return "";
257
+ this._pos++;
258
+ return line.slice(prefix.length).trim();
259
+ };
260
+ FxpParserImpl.prototype._readNullableTexture = function (prefix) {
261
+ var val = this._readField(prefix);
262
+ return val === "NULL" || val === "" ? null : val;
263
+ };
264
+ FxpParserImpl.prototype._expectLine = function (expected) {
265
+ this._skipEmpty();
266
+ if (this._currentLine() === expected)
267
+ this._pos++;
268
+ };
269
+ FxpParserImpl.prototype._skipEmpty = function () {
270
+ while (this._pos < this._lines.length && this._lines[this._pos].trim() === "")
271
+ this._pos++;
272
+ };
273
+ FxpParserImpl.prototype._currentLine = function () {
274
+ var _a;
275
+ return (_a = this._lines[this._pos]) !== null && _a !== void 0 ? _a : "";
276
+ };
277
+ return FxpParserImpl;
278
+ }());
279
+ function parseFxpContent(content) {
280
+ return new FxpParserImpl().parse(content);
281
+ }
282
+ function parseFxpFile(filePath) {
283
+ var fs = require("node:fs");
284
+ return parseFxpContent(fs.readFileSync(filePath, "utf-8"));
285
+ }
@@ -0,0 +1,36 @@
1
+ export interface FxKeyframe {
2
+ time: number;
3
+ value: number;
4
+ }
5
+ export interface FxInterpData {
6
+ looped: boolean;
7
+ keys: FxKeyframe[];
8
+ }
9
+ export interface FxMatrix {
10
+ right: {
11
+ x: number;
12
+ y: number;
13
+ z: number;
14
+ };
15
+ up: {
16
+ x: number;
17
+ y: number;
18
+ z: number;
19
+ };
20
+ at: {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ };
25
+ pos: {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ };
30
+ }
31
+ export interface FxBoundingSphere {
32
+ x: number;
33
+ y: number;
34
+ z: number;
35
+ radius: number;
36
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export * from "./common";
2
+ export * from "./info";
3
+ export * from "./system";
@@ -0,0 +1,19 @@
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("./common"), exports);
18
+ __exportStar(require("./info"), exports);
19
+ __exportStar(require("./system"), exports);
@@ -0,0 +1,186 @@
1
+ import type { FxInterpData } from "./common";
2
+ export interface FxInfoEmRate {
3
+ type: "emrate";
4
+ rate: FxInterpData;
5
+ }
6
+ export interface FxInfoEmSize {
7
+ type: "emsize";
8
+ radius: FxInterpData;
9
+ sizeMinX: FxInterpData;
10
+ sizeMaxX: FxInterpData;
11
+ sizeMinY: FxInterpData;
12
+ sizeMaxY: FxInterpData;
13
+ sizeMinZ: FxInterpData;
14
+ sizeMaxZ: FxInterpData;
15
+ }
16
+ export interface FxInfoEmSpeed {
17
+ type: "emspeed";
18
+ speed: FxInterpData;
19
+ bias: FxInterpData;
20
+ }
21
+ export interface FxInfoEmDir {
22
+ type: "emdir";
23
+ dirX: FxInterpData;
24
+ dirY: FxInterpData;
25
+ dirZ: FxInterpData;
26
+ }
27
+ export interface FxInfoEmAngle {
28
+ type: "emangle";
29
+ min: FxInterpData;
30
+ max: FxInterpData;
31
+ }
32
+ export interface FxInfoEmLife {
33
+ type: "emlife";
34
+ life: FxInterpData;
35
+ bias: FxInterpData;
36
+ }
37
+ export interface FxInfoEmPos {
38
+ type: "empos";
39
+ x: FxInterpData;
40
+ y: FxInterpData;
41
+ z: FxInterpData;
42
+ }
43
+ export interface FxInfoEmWeather {
44
+ type: "emweather";
45
+ interp: FxInterpData;
46
+ }
47
+ export interface FxInfoEmRotation {
48
+ type: "emrotation";
49
+ min: FxInterpData;
50
+ max: FxInterpData;
51
+ }
52
+ export interface FxInfoNoise {
53
+ type: "noise";
54
+ x: FxInterpData;
55
+ y: FxInterpData;
56
+ z: FxInterpData;
57
+ }
58
+ export interface FxInfoForce {
59
+ type: "force";
60
+ forceX: FxInterpData;
61
+ forceY: FxInterpData;
62
+ forceZ: FxInterpData;
63
+ }
64
+ export interface FxInfoFriction {
65
+ type: "friction";
66
+ friction: FxInterpData;
67
+ }
68
+ export interface FxInfoAttractPt {
69
+ type: "attractpt";
70
+ x: FxInterpData;
71
+ y: FxInterpData;
72
+ z: FxInterpData;
73
+ power: FxInterpData;
74
+ }
75
+ export interface FxInfoAttractLine {
76
+ type: "attractline";
77
+ x1: FxInterpData;
78
+ y1: FxInterpData;
79
+ z1: FxInterpData;
80
+ x2: FxInterpData;
81
+ y2: FxInterpData;
82
+ z2: FxInterpData;
83
+ power: FxInterpData;
84
+ }
85
+ export interface FxInfoGroundCollide {
86
+ type: "groundcollide";
87
+ damping: FxInterpData;
88
+ bounce: FxInterpData;
89
+ }
90
+ export interface FxInfoWind {
91
+ type: "wind";
92
+ interp: FxInterpData;
93
+ }
94
+ export interface FxInfoJitter {
95
+ type: "jitter";
96
+ x: FxInterpData;
97
+ y: FxInterpData;
98
+ z: FxInterpData;
99
+ }
100
+ export interface FxInfoRotSpeed {
101
+ type: "rotspeed";
102
+ speed: FxInterpData;
103
+ speedBias: FxInterpData;
104
+ accel: FxInterpData;
105
+ accelBias: FxInterpData;
106
+ }
107
+ export interface FxInfoFloat {
108
+ type: "float";
109
+ interp: FxInterpData;
110
+ }
111
+ export interface FxInfoUnderwater {
112
+ type: "underwater";
113
+ }
114
+ export interface FxInfoColour {
115
+ type: "colour";
116
+ red: FxInterpData;
117
+ green: FxInterpData;
118
+ blue: FxInterpData;
119
+ alpha: FxInterpData;
120
+ }
121
+ export interface FxInfoSize {
122
+ type: "size";
123
+ sizeX: FxInterpData;
124
+ sizeY: FxInterpData;
125
+ sizeXBias: FxInterpData;
126
+ sizeYBias: FxInterpData;
127
+ }
128
+ export interface FxInfoSpriteRect {
129
+ type: "spriterect";
130
+ interps: FxInterpData[];
131
+ }
132
+ export interface FxInfoHeatHaze {
133
+ type: "heathaze";
134
+ interps: FxInterpData[];
135
+ }
136
+ export interface FxInfoTrail {
137
+ type: "trail";
138
+ interps: FxInterpData[];
139
+ }
140
+ export interface FxInfoFlat {
141
+ type: "flat";
142
+ rightX: FxInterpData;
143
+ rightY: FxInterpData;
144
+ rightZ: FxInterpData;
145
+ upX: FxInterpData;
146
+ upY: FxInterpData;
147
+ upZ: FxInterpData;
148
+ atX: FxInterpData;
149
+ atY: FxInterpData;
150
+ atZ: FxInterpData;
151
+ }
152
+ export interface FxInfoDir {
153
+ type: "dir";
154
+ interps: FxInterpData[];
155
+ }
156
+ export interface FxInfoAnimTexture {
157
+ type: "animtex";
158
+ interps: FxInterpData[];
159
+ }
160
+ export interface FxInfoColourRange {
161
+ type: "colourrange";
162
+ redMin: FxInterpData;
163
+ redMax: FxInterpData;
164
+ greenMin: FxInterpData;
165
+ greenMax: FxInterpData;
166
+ blueMin: FxInterpData;
167
+ blueMax: FxInterpData;
168
+ alphaMin: FxInterpData;
169
+ alphaMax: FxInterpData;
170
+ }
171
+ export interface FxInfoSelfLit {
172
+ type: "selflit";
173
+ }
174
+ export interface FxInfoColourBright {
175
+ type: "colourbright";
176
+ red: FxInterpData;
177
+ green: FxInterpData;
178
+ blue: FxInterpData;
179
+ alpha: FxInterpData;
180
+ brightness: FxInterpData;
181
+ }
182
+ export interface FxInfoSmoke {
183
+ type: "smoke";
184
+ interps: FxInterpData[];
185
+ }
186
+ export type FxInfo = FxInfoEmRate | FxInfoEmSize | FxInfoEmSpeed | FxInfoEmDir | FxInfoEmAngle | FxInfoEmLife | FxInfoEmPos | FxInfoEmWeather | FxInfoEmRotation | FxInfoNoise | FxInfoForce | FxInfoFriction | FxInfoAttractPt | FxInfoAttractLine | FxInfoGroundCollide | FxInfoWind | FxInfoJitter | FxInfoRotSpeed | FxInfoFloat | FxInfoUnderwater | FxInfoColour | FxInfoSize | FxInfoSpriteRect | FxInfoHeatHaze | FxInfoTrail | FxInfoFlat | FxInfoDir | FxInfoAnimTexture | FxInfoColourRange | FxInfoSelfLit | FxInfoColourBright | FxInfoSmoke;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,27 @@
1
+ import type { FxBoundingSphere, FxMatrix } from "./common";
2
+ import type { FxInfo } from "./info";
3
+ export interface FxEmitterBP {
4
+ name: string;
5
+ matrix: FxMatrix;
6
+ textures: (string | null)[];
7
+ alphaOn: boolean;
8
+ srcBlendId: number;
9
+ dstBlendId: number;
10
+ lodStart: number;
11
+ lodEnd: number;
12
+ infos: FxInfo[];
13
+ }
14
+ export interface FxSystemBP {
15
+ filename: string;
16
+ name: string;
17
+ length: number;
18
+ loopIntervalMin: number;
19
+ loopLength: number;
20
+ playMode: number;
21
+ cullDist: number;
22
+ boundingSphere: FxBoundingSphere | null;
23
+ prims: FxEmitterBP[];
24
+ }
25
+ export interface FxProject {
26
+ systems: Map<string, FxSystemBP>;
27
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export * from "./parser";
2
+ export * from "./readers/anp3";
3
+ export * from "./readers/anpk";
4
+ export * from "./types";
@@ -0,0 +1,20 @@
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("./parser"), exports);
18
+ __exportStar(require("./readers/anp3"), exports);
19
+ __exportStar(require("./readers/anpk"), exports);
20
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,5 @@
1
+ import { RwFile } from "../core/rw-file";
2
+ import type { RwIfp } from "./types";
3
+ export declare class IfpParser extends RwFile {
4
+ parse(): RwIfp;
5
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.IfpParser = void 0;
19
+ var rw_file_1 = require("../core/rw-file");
20
+ var anp3_1 = require("./readers/anp3");
21
+ var anpk_1 = require("./readers/anpk");
22
+ var IfpParser = /** @class */ (function (_super) {
23
+ __extends(IfpParser, _super);
24
+ function IfpParser() {
25
+ return _super !== null && _super.apply(this, arguments) || this;
26
+ }
27
+ IfpParser.prototype.parse = function () {
28
+ var signature = this.readString(4);
29
+ this.setPosition(0);
30
+ if (signature === "ANP3")
31
+ return (0, anp3_1.readAnp3)(this);
32
+ if (signature === "ANPK")
33
+ return (0, anpk_1.readAnpk)(this);
34
+ throw new Error("Unsupported IFP version");
35
+ };
36
+ return IfpParser;
37
+ }(rw_file_1.RwFile));
38
+ exports.IfpParser = IfpParser;
@@ -0,0 +1,3 @@
1
+ import type { RwFile } from "../../core/rw-file";
2
+ import { type RwIfp } from "../types";
3
+ export declare function readAnp3(file: RwFile): RwIfp;