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,512 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFxpContent = parseFxpContent;
4
+ exports.parseFxpFile = parseFxpFile;
5
+ var INFO_TYPE_MAP = {
6
+ "FX_INFO_EMRATE_DATA:": "emrate",
7
+ "FX_INFO_EMSIZE_DATA:": "emsize",
8
+ "FX_INFO_EMSPEED_DATA:": "emspeed",
9
+ "FX_INFO_EMDIR_DATA:": "emdir",
10
+ "FX_INFO_EMANGLE_DATA:": "emangle",
11
+ "FX_INFO_EMLIFE_DATA:": "emlife",
12
+ "FX_INFO_EMPOS_DATA:": "empos",
13
+ "FX_INFO_EMWEATHER_DATA:": "emweather",
14
+ "FX_INFO_EMROTATION_DATA:": "emrotation",
15
+ "FX_INFO_NOISE_DATA:": "noise",
16
+ "FX_INFO_FORCE_DATA:": "force",
17
+ "FX_INFO_FRICTION_DATA:": "friction",
18
+ "FX_INFO_ATTRACTPT_DATA:": "attractpt",
19
+ "FX_INFO_ATTRACTLINE_DATA:": "attractline",
20
+ "FX_INFO_GROUNDCOLLIDE_DATA:": "groundcollide",
21
+ "FX_INFO_WIND_DATA:": "wind",
22
+ "FX_INFO_JITTER_DATA:": "jitter",
23
+ "FX_INFO_ROTSPEED_DATA:": "rotspeed",
24
+ "FX_INFO_FLOAT_DATA:": "float",
25
+ "FX_INFO_UNDERWATER_DATA:": "underwater",
26
+ "FX_INFO_COLOUR_DATA:": "colour",
27
+ "FX_INFO_SIZE_DATA:": "size",
28
+ "FX_INFO_SPRITERECT_DATA:": "spriterect",
29
+ "FX_INFO_HEATHAZE_DATA:": "heathaze",
30
+ "FX_INFO_TRAIL_DATA:": "trail",
31
+ "FX_INFO_FLAT_DATA:": "flat",
32
+ "FX_INFO_DIR_DATA:": "dir",
33
+ "FX_INFO_ANIMTEX_DATA:": "animtex",
34
+ "FX_INFO_COLOURRANGE_DATA:": "colourrange",
35
+ "FX_INFO_SELFLIT_DATA:": "selflit",
36
+ "FX_INFO_COLOURBRIGHT_DATA:": "colourbright",
37
+ "FX_INFO_SMOKE_DATA:": "smoke",
38
+ };
39
+ var FxpParserImpl = /** @class */ (function () {
40
+ function FxpParserImpl() {
41
+ this._lines = [];
42
+ this._pos = 0;
43
+ }
44
+ FxpParserImpl.prototype.parse = function (content) {
45
+ this._lines = content.split("\n").map(function (l) { return l.trim(); });
46
+ this._pos = 0;
47
+ var systems = new Map();
48
+ this._expectLine("FX_PROJECT_DATA:");
49
+ while (this._pos < this._lines.length) {
50
+ var line = this._currentLine();
51
+ if (!line) {
52
+ this._pos++;
53
+ continue;
54
+ }
55
+ if (line === "FX_SYSTEM_DATA:") {
56
+ this._pos++;
57
+ this._skipEmpty();
58
+ var version = parseInt(this._currentLine(), 10);
59
+ this._pos++;
60
+ var system = this._parseSystem(version);
61
+ systems.set(system.name, system);
62
+ }
63
+ else {
64
+ this._pos++;
65
+ }
66
+ }
67
+ return { systems: systems };
68
+ };
69
+ FxpParserImpl.prototype._parseSystem = function (version) {
70
+ var _a, _b;
71
+ this._skipEmpty();
72
+ var filename = "";
73
+ if (version > 100) {
74
+ filename = this._readField("FILENAME:");
75
+ }
76
+ var name = this._readField("NAME:");
77
+ var length = parseFloat(this._readField("LENGTH:"));
78
+ var loopIntervalMin = 0;
79
+ var loopLength = 0;
80
+ if (version >= 106) {
81
+ loopIntervalMin = parseFloat(this._currentLine());
82
+ this._pos++;
83
+ loopLength = parseFloat(this._currentLine());
84
+ this._pos++;
85
+ }
86
+ var playMode = parseInt(this._readField("PLAYMODE:"), 10);
87
+ var cullDist = parseFloat(this._readField("CULLDIST:"));
88
+ var boundingSphere = null;
89
+ if (version > 103) {
90
+ var bsLine = this._readField("BOUNDINGSPHERE:");
91
+ var parts = bsLine.split(/\s+/).map(parseFloat);
92
+ boundingSphere = {
93
+ x: parts[0],
94
+ y: parts[1],
95
+ z: parts[2],
96
+ radius: parts[3],
97
+ };
98
+ }
99
+ var numPrims = parseInt(this._readField("NUM_PRIMS:"), 10);
100
+ var prims = [];
101
+ for (var i = 0; i < numPrims; i++) {
102
+ this._skipEmpty();
103
+ var primLine = this._currentLine();
104
+ if (primLine === "FX_PRIM_EMITTER_DATA:") {
105
+ this._pos++;
106
+ prims.push(this._parsePrimEmitter(version));
107
+ }
108
+ else {
109
+ this._pos++;
110
+ i--;
111
+ }
112
+ }
113
+ if (version >= 108) {
114
+ this._skipEmpty();
115
+ if ((_a = this._currentLine()) === null || _a === void 0 ? void 0 : _a.startsWith("OMITTEXTURES:")) {
116
+ this._pos++;
117
+ }
118
+ }
119
+ if (version >= 109) {
120
+ this._skipEmpty();
121
+ if ((_b = this._currentLine()) === null || _b === void 0 ? void 0 : _b.startsWith("TXDNAME:")) {
122
+ this._pos++;
123
+ }
124
+ }
125
+ return {
126
+ filename: filename,
127
+ name: name,
128
+ length: length,
129
+ loopIntervalMin: loopIntervalMin,
130
+ loopLength: loopLength,
131
+ playMode: playMode,
132
+ cullDist: cullDist,
133
+ boundingSphere: boundingSphere,
134
+ prims: prims,
135
+ };
136
+ };
137
+ FxpParserImpl.prototype._parsePrimEmitter = function (version) {
138
+ var _a, _b, _c;
139
+ this._skipEmpty();
140
+ this._expectLine("FX_PRIM_BASE_DATA:");
141
+ var name = this._readField("NAME:");
142
+ var matrix = this._parseMatrix();
143
+ var textures = [];
144
+ textures.push(this._readNullableTexture("TEXTURE:"));
145
+ if (version > 101) {
146
+ textures.push(this._readNullableTexture("TEXTURE2:"));
147
+ textures.push(this._readNullableTexture("TEXTURE3:"));
148
+ textures.push(this._readNullableTexture("TEXTURE4:"));
149
+ }
150
+ var alphaOn = this._readField("ALPHAON:") === "1";
151
+ var srcBlendId = parseInt(this._readField("SRCBLENDID:"), 10);
152
+ var dstBlendId = parseInt(this._readField("DSTBLENDID:"), 10);
153
+ var numInfos = parseInt(this._readField("NUM_INFOS:"), 10);
154
+ var infos = [];
155
+ for (var i = 0; i < numInfos; i++) {
156
+ this._skipEmpty();
157
+ var infoType = this._currentLine();
158
+ this._pos++;
159
+ var typeKey = INFO_TYPE_MAP[infoType];
160
+ if (!typeKey) {
161
+ this._skipUnknownInfo();
162
+ continue;
163
+ }
164
+ this._skipEmpty();
165
+ if ((_a = this._currentLine()) === null || _a === void 0 ? void 0 : _a.startsWith("TIMEMODEPRT:")) {
166
+ this._pos++;
167
+ }
168
+ var info = this._parseInfo(typeKey);
169
+ if (info) {
170
+ infos.push(info);
171
+ }
172
+ }
173
+ var lodStart = 0;
174
+ var lodEnd = 0;
175
+ this._skipEmpty();
176
+ if ((_b = this._currentLine()) === null || _b === void 0 ? void 0 : _b.startsWith("LODSTART:")) {
177
+ lodStart = parseFloat(this._readField("LODSTART:"));
178
+ }
179
+ this._skipEmpty();
180
+ if ((_c = this._currentLine()) === null || _c === void 0 ? void 0 : _c.startsWith("LODEND:")) {
181
+ lodEnd = parseFloat(this._readField("LODEND:"));
182
+ }
183
+ return {
184
+ name: name,
185
+ matrix: matrix,
186
+ textures: textures,
187
+ alphaOn: alphaOn,
188
+ srcBlendId: srcBlendId,
189
+ dstBlendId: dstBlendId,
190
+ lodStart: lodStart,
191
+ lodEnd: lodEnd,
192
+ infos: infos,
193
+ };
194
+ };
195
+ FxpParserImpl.prototype._parseInfo = function (typeKey) {
196
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61;
197
+ if (typeKey === "underwater" || typeKey === "selflit") {
198
+ return { type: typeKey };
199
+ }
200
+ var interps = this._parseAllInterps();
201
+ switch (typeKey) {
202
+ case "emrate":
203
+ return {
204
+ type: "emrate",
205
+ rate: (_a = interps["RATE"]) !== null && _a !== void 0 ? _a : this._defaultInterp(),
206
+ };
207
+ case "emsize":
208
+ return {
209
+ type: "emsize",
210
+ radius: (_b = interps["RADIUS"]) !== null && _b !== void 0 ? _b : this._defaultInterp(),
211
+ sizeMinX: (_c = interps["SIZEMINX"]) !== null && _c !== void 0 ? _c : this._defaultInterp(),
212
+ sizeMaxX: (_d = interps["SIZEMAXX"]) !== null && _d !== void 0 ? _d : this._defaultInterp(),
213
+ sizeMinY: (_e = interps["SIZEMINY"]) !== null && _e !== void 0 ? _e : this._defaultInterp(),
214
+ sizeMaxY: (_f = interps["SIZEMAXY"]) !== null && _f !== void 0 ? _f : this._defaultInterp(),
215
+ sizeMinZ: (_g = interps["SIZEMINZ"]) !== null && _g !== void 0 ? _g : this._defaultInterp(),
216
+ sizeMaxZ: (_h = interps["SIZEMAXZ"]) !== null && _h !== void 0 ? _h : this._defaultInterp(),
217
+ };
218
+ case "emspeed":
219
+ return {
220
+ type: "emspeed",
221
+ speed: (_j = interps["SPEED"]) !== null && _j !== void 0 ? _j : this._defaultInterp(),
222
+ bias: (_k = interps["BIAS"]) !== null && _k !== void 0 ? _k : this._defaultInterp(),
223
+ };
224
+ case "emdir":
225
+ return {
226
+ type: "emdir",
227
+ dirX: (_l = interps["DIRX"]) !== null && _l !== void 0 ? _l : this._defaultInterp(),
228
+ dirY: (_m = interps["DIRY"]) !== null && _m !== void 0 ? _m : this._defaultInterp(),
229
+ dirZ: (_o = interps["DIRZ"]) !== null && _o !== void 0 ? _o : this._defaultInterp(),
230
+ };
231
+ case "emangle":
232
+ return {
233
+ type: "emangle",
234
+ min: (_q = (_p = interps["MIN"]) !== null && _p !== void 0 ? _p : interps["ANGLEMIN"]) !== null && _q !== void 0 ? _q : this._defaultInterp(),
235
+ max: (_s = (_r = interps["MAX"]) !== null && _r !== void 0 ? _r : interps["ANGLEMAX"]) !== null && _s !== void 0 ? _s : this._defaultInterp(),
236
+ };
237
+ case "emlife":
238
+ return {
239
+ type: "emlife",
240
+ life: (_t = interps["LIFE"]) !== null && _t !== void 0 ? _t : this._defaultInterp(),
241
+ bias: (_u = interps["BIAS"]) !== null && _u !== void 0 ? _u : this._defaultInterp(),
242
+ };
243
+ case "empos":
244
+ return {
245
+ type: "empos",
246
+ x: (_v = interps["X"]) !== null && _v !== void 0 ? _v : this._defaultInterp(),
247
+ y: (_w = interps["Y"]) !== null && _w !== void 0 ? _w : this._defaultInterp(),
248
+ z: (_x = interps["Z"]) !== null && _x !== void 0 ? _x : this._defaultInterp(),
249
+ };
250
+ case "emweather":
251
+ return {
252
+ type: "emweather",
253
+ interp: (_y = interps["WEATHER"]) !== null && _y !== void 0 ? _y : this._defaultInterp(),
254
+ };
255
+ case "emrotation":
256
+ return {
257
+ type: "emrotation",
258
+ min: (_z = interps["ANGLEMIN"]) !== null && _z !== void 0 ? _z : this._defaultInterp(),
259
+ max: (_0 = interps["ANGLEMAX"]) !== null && _0 !== void 0 ? _0 : this._defaultInterp(),
260
+ };
261
+ case "noise":
262
+ return {
263
+ type: "noise",
264
+ x: (_2 = (_1 = interps["NOISE"]) !== null && _1 !== void 0 ? _1 : interps["X"]) !== null && _2 !== void 0 ? _2 : this._defaultInterp(),
265
+ y: (_3 = interps["Y"]) !== null && _3 !== void 0 ? _3 : this._defaultInterp(),
266
+ z: (_4 = interps["Z"]) !== null && _4 !== void 0 ? _4 : this._defaultInterp(),
267
+ };
268
+ case "force":
269
+ return {
270
+ type: "force",
271
+ forceX: (_5 = interps["FORCEX"]) !== null && _5 !== void 0 ? _5 : this._defaultInterp(),
272
+ forceY: (_6 = interps["FORCEY"]) !== null && _6 !== void 0 ? _6 : this._defaultInterp(),
273
+ forceZ: (_7 = interps["FORCEZ"]) !== null && _7 !== void 0 ? _7 : this._defaultInterp(),
274
+ };
275
+ case "friction":
276
+ return {
277
+ type: "friction",
278
+ friction: (_8 = interps["FRICTION"]) !== null && _8 !== void 0 ? _8 : this._defaultInterp(),
279
+ };
280
+ case "attractpt":
281
+ return {
282
+ type: "attractpt",
283
+ x: (_9 = interps["X"]) !== null && _9 !== void 0 ? _9 : this._defaultInterp(),
284
+ y: (_10 = interps["Y"]) !== null && _10 !== void 0 ? _10 : this._defaultInterp(),
285
+ z: (_11 = interps["Z"]) !== null && _11 !== void 0 ? _11 : this._defaultInterp(),
286
+ power: (_12 = interps["POWER"]) !== null && _12 !== void 0 ? _12 : this._defaultInterp(),
287
+ };
288
+ case "attractline":
289
+ return {
290
+ type: "attractline",
291
+ x1: (_13 = interps["X1"]) !== null && _13 !== void 0 ? _13 : this._defaultInterp(),
292
+ y1: (_14 = interps["Y1"]) !== null && _14 !== void 0 ? _14 : this._defaultInterp(),
293
+ z1: (_15 = interps["Z1"]) !== null && _15 !== void 0 ? _15 : this._defaultInterp(),
294
+ x2: (_16 = interps["X2"]) !== null && _16 !== void 0 ? _16 : this._defaultInterp(),
295
+ y2: (_17 = interps["Y2"]) !== null && _17 !== void 0 ? _17 : this._defaultInterp(),
296
+ z2: (_18 = interps["Z2"]) !== null && _18 !== void 0 ? _18 : this._defaultInterp(),
297
+ power: (_19 = interps["POWER"]) !== null && _19 !== void 0 ? _19 : this._defaultInterp(),
298
+ };
299
+ case "groundcollide":
300
+ return {
301
+ type: "groundcollide",
302
+ damping: (_20 = interps["DAMPING"]) !== null && _20 !== void 0 ? _20 : this._defaultInterp(),
303
+ bounce: (_21 = interps["BOUNCE"]) !== null && _21 !== void 0 ? _21 : this._defaultInterp(),
304
+ };
305
+ case "wind":
306
+ return {
307
+ type: "wind",
308
+ interp: (_22 = interps["WINDFACTOR"]) !== null && _22 !== void 0 ? _22 : this._defaultInterp(),
309
+ };
310
+ case "jitter":
311
+ return {
312
+ type: "jitter",
313
+ x: (_23 = interps["X"]) !== null && _23 !== void 0 ? _23 : this._defaultInterp(),
314
+ y: (_24 = interps["Y"]) !== null && _24 !== void 0 ? _24 : this._defaultInterp(),
315
+ z: (_25 = interps["Z"]) !== null && _25 !== void 0 ? _25 : this._defaultInterp(),
316
+ };
317
+ case "rotspeed":
318
+ return {
319
+ type: "rotspeed",
320
+ speed: (_26 = interps["SPEED"]) !== null && _26 !== void 0 ? _26 : this._defaultInterp(),
321
+ speedBias: (_27 = interps["SPEEDBIAS"]) !== null && _27 !== void 0 ? _27 : this._defaultInterp(),
322
+ accel: (_28 = interps["ACCEL"]) !== null && _28 !== void 0 ? _28 : this._defaultInterp(),
323
+ accelBias: (_29 = interps["ACCELBIAS"]) !== null && _29 !== void 0 ? _29 : this._defaultInterp(),
324
+ };
325
+ case "float":
326
+ return {
327
+ type: "float",
328
+ interp: (_30 = interps["FLOAT"]) !== null && _30 !== void 0 ? _30 : this._defaultInterp(),
329
+ };
330
+ case "colour":
331
+ return {
332
+ type: "colour",
333
+ red: (_31 = interps["RED"]) !== null && _31 !== void 0 ? _31 : this._defaultInterp(),
334
+ green: (_32 = interps["GREEN"]) !== null && _32 !== void 0 ? _32 : this._defaultInterp(),
335
+ blue: (_33 = interps["BLUE"]) !== null && _33 !== void 0 ? _33 : this._defaultInterp(),
336
+ alpha: (_34 = interps["ALPHA"]) !== null && _34 !== void 0 ? _34 : this._defaultInterp(),
337
+ };
338
+ case "size":
339
+ return {
340
+ type: "size",
341
+ sizeX: (_35 = interps["SIZEX"]) !== null && _35 !== void 0 ? _35 : this._defaultInterp(),
342
+ sizeY: (_36 = interps["SIZEY"]) !== null && _36 !== void 0 ? _36 : this._defaultInterp(),
343
+ sizeXBias: (_37 = interps["SIZEXBIAS"]) !== null && _37 !== void 0 ? _37 : this._defaultInterp(),
344
+ sizeYBias: (_38 = interps["SIZEYBIAS"]) !== null && _38 !== void 0 ? _38 : this._defaultInterp(),
345
+ };
346
+ case "spriterect":
347
+ return { type: "spriterect", interps: Object.values(interps) };
348
+ case "heathaze":
349
+ return { type: "heathaze", interps: Object.values(interps) };
350
+ case "trail":
351
+ return { type: "trail", interps: Object.values(interps) };
352
+ case "flat":
353
+ return {
354
+ type: "flat",
355
+ rightX: (_39 = interps["RIGHTX"]) !== null && _39 !== void 0 ? _39 : this._defaultInterp(),
356
+ rightY: (_40 = interps["RIGHTY"]) !== null && _40 !== void 0 ? _40 : this._defaultInterp(),
357
+ rightZ: (_41 = interps["RIGHTZ"]) !== null && _41 !== void 0 ? _41 : this._defaultInterp(),
358
+ upX: (_42 = interps["UPX"]) !== null && _42 !== void 0 ? _42 : this._defaultInterp(),
359
+ upY: (_43 = interps["UPY"]) !== null && _43 !== void 0 ? _43 : this._defaultInterp(),
360
+ upZ: (_44 = interps["UPZ"]) !== null && _44 !== void 0 ? _44 : this._defaultInterp(),
361
+ atX: (_45 = interps["ATX"]) !== null && _45 !== void 0 ? _45 : this._defaultInterp(),
362
+ atY: (_46 = interps["ATY"]) !== null && _46 !== void 0 ? _46 : this._defaultInterp(),
363
+ atZ: (_47 = interps["ATZ"]) !== null && _47 !== void 0 ? _47 : this._defaultInterp(),
364
+ };
365
+ case "dir":
366
+ return { type: "dir", interps: Object.values(interps) };
367
+ case "animtex":
368
+ return { type: "animtex", interps: Object.values(interps) };
369
+ case "colourrange":
370
+ return {
371
+ type: "colourrange",
372
+ redMin: (_48 = interps["REDMIN"]) !== null && _48 !== void 0 ? _48 : this._defaultInterp(),
373
+ redMax: (_49 = interps["REDMAX"]) !== null && _49 !== void 0 ? _49 : this._defaultInterp(),
374
+ greenMin: (_50 = interps["GREENMIN"]) !== null && _50 !== void 0 ? _50 : this._defaultInterp(),
375
+ greenMax: (_51 = interps["GREENMAX"]) !== null && _51 !== void 0 ? _51 : this._defaultInterp(),
376
+ blueMin: (_52 = interps["BLUEMIN"]) !== null && _52 !== void 0 ? _52 : this._defaultInterp(),
377
+ blueMax: (_53 = interps["BLUEMAX"]) !== null && _53 !== void 0 ? _53 : this._defaultInterp(),
378
+ alphaMin: (_54 = interps["ALPHAMIN"]) !== null && _54 !== void 0 ? _54 : this._defaultInterp(),
379
+ alphaMax: (_55 = interps["ALPHAMAX"]) !== null && _55 !== void 0 ? _55 : this._defaultInterp(),
380
+ };
381
+ case "colourbright":
382
+ return {
383
+ type: "colourbright",
384
+ red: (_56 = interps["RED"]) !== null && _56 !== void 0 ? _56 : this._defaultInterp(),
385
+ green: (_57 = interps["GREEN"]) !== null && _57 !== void 0 ? _57 : this._defaultInterp(),
386
+ blue: (_58 = interps["BLUE"]) !== null && _58 !== void 0 ? _58 : this._defaultInterp(),
387
+ alpha: (_59 = interps["ALPHA"]) !== null && _59 !== void 0 ? _59 : this._defaultInterp(),
388
+ brightness: (_61 = (_60 = interps["BRIGHTNESS"]) !== null && _60 !== void 0 ? _60 : interps["BIAS"]) !== null && _61 !== void 0 ? _61 : this._defaultInterp(),
389
+ };
390
+ case "smoke":
391
+ return { type: "smoke", interps: Object.values(interps) };
392
+ default:
393
+ return null;
394
+ }
395
+ };
396
+ FxpParserImpl.prototype._defaultInterp = function () {
397
+ return { looped: false, keys: [] };
398
+ };
399
+ FxpParserImpl.prototype._parseAllInterps = function () {
400
+ var result = {};
401
+ while (this._pos < this._lines.length) {
402
+ this._skipEmpty();
403
+ var line = this._currentLine();
404
+ if (this._isBlockEnd(line)) {
405
+ break;
406
+ }
407
+ if (line.endsWith(":") && !line.startsWith("FX_")) {
408
+ var fieldName = line.slice(0, -1).toUpperCase();
409
+ this._pos++;
410
+ this._skipEmpty();
411
+ if (this._currentLine() === "FX_INTERP_DATA:") {
412
+ result[fieldName] = this._parseInterpolation();
413
+ }
414
+ }
415
+ else {
416
+ this._pos++;
417
+ }
418
+ }
419
+ return result;
420
+ };
421
+ FxpParserImpl.prototype._isBlockEnd = function (line) {
422
+ return (!line ||
423
+ line.startsWith("FX_INFO_") ||
424
+ line.startsWith("LODSTART:") ||
425
+ line.startsWith("LODEND:") ||
426
+ line.startsWith("FX_PRIM_") ||
427
+ line.startsWith("FX_SYSTEM_DATA:") ||
428
+ line.startsWith("OMITTEXTURES:") ||
429
+ line.startsWith("TXDNAME:"));
430
+ };
431
+ FxpParserImpl.prototype._parseInterpolation = function () {
432
+ this._expectLine("FX_INTERP_DATA:");
433
+ var looped = this._readField("LOOPED:") === "1";
434
+ var numKeys = parseInt(this._readField("NUM_KEYS:"), 10);
435
+ var keys = [];
436
+ for (var i = 0; i < numKeys; i++) {
437
+ this._expectLine("FX_KEYFLOAT_DATA:");
438
+ var time = parseFloat(this._readField("TIME:"));
439
+ var value = parseFloat(this._readField("VAL:"));
440
+ keys.push({ time: time, value: value });
441
+ }
442
+ return { looped: looped, keys: keys };
443
+ };
444
+ FxpParserImpl.prototype._parseMatrix = function () {
445
+ this._skipEmpty();
446
+ var line = this._currentLine();
447
+ if (!(line === null || line === void 0 ? void 0 : line.startsWith("MATRIX:"))) {
448
+ return {
449
+ right: { x: 1, y: 0, z: 0 },
450
+ up: { x: 0, y: 1, z: 0 },
451
+ at: { x: 0, y: 0, z: 1 },
452
+ pos: { x: 0, y: 0, z: 0 },
453
+ };
454
+ }
455
+ var parts = line.slice(7).trim().split(/\s+/).map(parseFloat);
456
+ this._pos++;
457
+ return {
458
+ right: { x: parts[0], y: parts[1], z: parts[2] },
459
+ up: { x: parts[3], y: parts[4], z: parts[5] },
460
+ at: { x: parts[6], y: parts[7], z: parts[8] },
461
+ pos: { x: parts[9], y: parts[10], z: parts[11] },
462
+ };
463
+ };
464
+ FxpParserImpl.prototype._skipUnknownInfo = function () {
465
+ while (this._pos < this._lines.length) {
466
+ var line = this._currentLine();
467
+ if (this._isBlockEnd(line)) {
468
+ break;
469
+ }
470
+ this._pos++;
471
+ }
472
+ };
473
+ FxpParserImpl.prototype._readField = function (prefix) {
474
+ this._skipEmpty();
475
+ var line = this._currentLine();
476
+ if (!(line === null || line === void 0 ? void 0 : line.startsWith(prefix))) {
477
+ return "";
478
+ }
479
+ this._pos++;
480
+ return line.slice(prefix.length).trim();
481
+ };
482
+ FxpParserImpl.prototype._readNullableTexture = function (prefix) {
483
+ var val = this._readField(prefix);
484
+ return val === "NULL" || val === "" ? null : val;
485
+ };
486
+ FxpParserImpl.prototype._expectLine = function (expected) {
487
+ this._skipEmpty();
488
+ if (this._currentLine() === expected) {
489
+ this._pos++;
490
+ }
491
+ };
492
+ FxpParserImpl.prototype._skipEmpty = function () {
493
+ while (this._pos < this._lines.length &&
494
+ this._lines[this._pos].trim() === "") {
495
+ this._pos++;
496
+ }
497
+ };
498
+ FxpParserImpl.prototype._currentLine = function () {
499
+ var _a;
500
+ return (_a = this._lines[this._pos]) !== null && _a !== void 0 ? _a : "";
501
+ };
502
+ return FxpParserImpl;
503
+ }());
504
+ function parseFxpContent(content) {
505
+ var parser = new FxpParserImpl();
506
+ return parser.parse(content);
507
+ }
508
+ function parseFxpFile(filePath) {
509
+ var fs = require("fs");
510
+ var content = fs.readFileSync(filePath, "utf-8");
511
+ return parseFxpContent(content);
512
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./FxpData";
2
+ export * from "./FxpParser";
@@ -0,0 +1,18 @@
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("./FxpData"), exports);
18
+ __exportStar(require("./FxpParser"), exports);
@@ -71,6 +71,7 @@ var TxdParser = /** @class */ (function (_super) {
71
71
  var compressed = (compressionFlags & (1 << 3)) !== 0;
72
72
  var paletteType = (rasterFormat >> 13) & 3;
73
73
  var mipWidth = width;
74
+ var pixelFormat = rasterFormat & 0x0F00;
74
75
  var mipHeight = height;
75
76
  var mipmaps = [];
76
77
  var palette = (paletteType !== ImageFormatEnums_1.PaletteType.PALETTE_NONE ? this.readPalette(paletteType, depth) : new Uint8Array(0));
@@ -87,7 +88,7 @@ var TxdParser = /** @class */ (function (_super) {
87
88
  ImageFormatEnums_1.RasterFormat.RASTER_888,
88
89
  ImageFormatEnums_1.RasterFormat.RASTER_555
89
90
  ];
90
- var hasAlpha = ((platformId === ImageFormatEnums_1.PlatformType.D3D9 && alpha) || (platformId == ImageFormatEnums_1.PlatformType.D3D8 && !rasterFormatsWithoutAlpha.includes(rasterFormat)));
91
+ var hasAlpha = ((platformId === ImageFormatEnums_1.PlatformType.D3D9 && alpha) || (platformId == ImageFormatEnums_1.PlatformType.D3D8 && !rasterFormatsWithoutAlpha.includes(pixelFormat)));
91
92
  bitmap = Array.from(this.getBitmapWithPalette(paletteType, depth, hasAlpha, raster, palette, width, height));
92
93
  }
93
94
  else if (platformId === ImageFormatEnums_1.PlatformType.D3D8 && compressionFlags !== 0) {
@@ -97,7 +98,7 @@ var TxdParser = /** @class */ (function (_super) {
97
98
  bitmap = Array.from(this.getBitmapWithDXT(d3dFormat, raster, width, height));
98
99
  }
99
100
  else {
100
- bitmap = Array.from(this.getBitmapWithRasterFormat(rasterFormat, raster, width, height));
101
+ bitmap = Array.from(this.getBitmapWithRasterFormat(pixelFormat, raster, width, height));
101
102
  }
102
103
  mipmaps.push(bitmap);
103
104
  }
@@ -0,0 +1,3 @@
1
+ export declare function decodePaletteBitmap(paletteType: number, depth: number, hasAlpha: boolean, raster: Uint8Array, palette: Uint8Array, width: number, height: number): Uint8Array;
2
+ export declare function decodeDxtBitmap(dxtType: string, raster: Uint8Array, width: number, height: number): Uint8Array;
3
+ export declare function decodeRasterBitmap(rasterFormat: number, raster: Uint8Array, width: number, height: number): Uint8Array;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodePaletteBitmap = decodePaletteBitmap;
4
+ exports.decodeDxtBitmap = decodeDxtBitmap;
5
+ exports.decodeRasterBitmap = decodeRasterBitmap;
6
+ var bitmap_1 = require("../codecs/bitmap");
7
+ var dxt_1 = require("../codecs/dxt");
8
+ var formats_1 = require("../codecs/formats");
9
+ var palette_1 = require("../codecs/palette");
10
+ function decodePaletteBitmap(paletteType, depth, hasAlpha, raster, palette, width, height) {
11
+ if (paletteType !== formats_1.PaletteType.PALETTE_8 && depth === 4) {
12
+ return hasAlpha
13
+ ? (0, palette_1.pal4)(raster, palette, width, height)
14
+ : (0, palette_1.pal4NoAlpha)(raster, palette, width, height);
15
+ }
16
+ return hasAlpha
17
+ ? (0, palette_1.pal8)(raster, palette, width, height)
18
+ : (0, palette_1.pal8NoAlpha)(raster, palette, width, height);
19
+ }
20
+ function decodeDxtBitmap(dxtType, raster, width, height) {
21
+ switch (dxtType) {
22
+ case formats_1.D3DFormat.D3D_DXT1:
23
+ return (0, dxt_1.bc1)(raster, width, height);
24
+ case formats_1.D3DFormat.D3D_DXT2:
25
+ return (0, dxt_1.bc2)(raster, width, height, true);
26
+ case formats_1.D3DFormat.D3D_DXT3:
27
+ return (0, dxt_1.bc2)(raster, width, height, false);
28
+ case formats_1.D3DFormat.D3D_DXT4:
29
+ return (0, dxt_1.bc3)(raster, width, height, true);
30
+ case formats_1.D3DFormat.D3D_DXT5:
31
+ return (0, dxt_1.bc3)(raster, width, height, false);
32
+ case formats_1.D3DFormat.D3DFMT_A8L8:
33
+ return (0, palette_1.lum8a8)(raster, width, height);
34
+ default:
35
+ return new Uint8Array(0);
36
+ }
37
+ }
38
+ function decodeRasterBitmap(rasterFormat, raster, width, height) {
39
+ switch (rasterFormat) {
40
+ case formats_1.RasterFormat.RASTER_1555:
41
+ return (0, bitmap_1.bgra1555)(raster, width, height);
42
+ case formats_1.RasterFormat.RASTER_565:
43
+ return (0, bitmap_1.bgra565)(raster, width, height);
44
+ case formats_1.RasterFormat.RASTER_4444:
45
+ return (0, bitmap_1.bgra4444)(raster, width, height);
46
+ case formats_1.RasterFormat.RASTER_LUM:
47
+ return (0, palette_1.lum8)(raster, width, height);
48
+ case formats_1.RasterFormat.RASTER_8888:
49
+ return (0, bitmap_1.bgra8888)(raster, width, height);
50
+ case formats_1.RasterFormat.RASTER_888:
51
+ return (0, bitmap_1.bgra888)(raster, width, height);
52
+ case formats_1.RasterFormat.RASTER_555:
53
+ return (0, bitmap_1.bgra555)(raster, width, height);
54
+ default:
55
+ return new Uint8Array(0);
56
+ }
57
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./bitmap-decoder";
2
+ export * from "./parser";
3
+ export * from "./types";
@@ -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("./bitmap-decoder"), exports);
18
+ __exportStar(require("./parser"), exports);
19
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,8 @@
1
+ import { RwFile } from "../core/rw-file";
2
+ import type { RwTextureDictionary, RwTextureNative, RwTxd } from "./types";
3
+ export declare class TxdParser extends RwFile {
4
+ parse(): RwTxd;
5
+ readTextureDictionary(): RwTextureDictionary;
6
+ readTextureNative(): RwTextureNative;
7
+ private decodeBitmap;
8
+ }