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,237 @@
1
+ import type { RwColor, RwMatrix3, RwMatrix4, RwSphere, RwTextureCoordinate, RwTriangle, RwVector2, RwVector3 } from "../common/types";
2
+ import type { DffModelType } from "./dff-model-type";
3
+ export interface RwDff {
4
+ modelType: DffModelType;
5
+ version: string;
6
+ versionNumber: number;
7
+ geometryList: RwGeometryList | null;
8
+ frameList: RwFrameList | null;
9
+ atomics: number[];
10
+ dummies: string[];
11
+ animNodes: RwAnimNode[];
12
+ }
13
+ export interface RwClump {
14
+ atomicCount: number;
15
+ lightCount?: number;
16
+ cameraCount?: number;
17
+ }
18
+ export interface RwAnimNode {
19
+ boneId: number;
20
+ bonesCount: number;
21
+ bones: RwBone[];
22
+ }
23
+ export interface RwBone {
24
+ boneId: number;
25
+ boneIndex: number;
26
+ flags: number;
27
+ }
28
+ export interface RwFrame {
29
+ rotationMatrix: RwMatrix3;
30
+ coordinatesOffset: RwVector3;
31
+ parentFrame: number;
32
+ }
33
+ export interface RwFrameList {
34
+ frameCount: number;
35
+ frames: RwFrame[];
36
+ }
37
+ export interface RwTexture {
38
+ textureFiltering: number;
39
+ uAddressing: number;
40
+ vAddressing: number;
41
+ usesMipLevels: boolean;
42
+ textureName: string;
43
+ }
44
+ export interface RwMaterial {
45
+ color: RwColor;
46
+ isTextured: boolean;
47
+ ambient?: number;
48
+ specular?: number;
49
+ diffuse?: number;
50
+ texture?: RwTexture;
51
+ }
52
+ export interface RwMaterialList {
53
+ materialInstanceCount: number;
54
+ materialData: RwMaterial[];
55
+ }
56
+ export interface RwGeometry {
57
+ vertexColorInformation: RwColor[];
58
+ textureCoordinatesCount: number;
59
+ textureMappingInformation: RwTextureCoordinate[][];
60
+ hasVertices: boolean;
61
+ hasNormals: boolean;
62
+ isTriangleStrip: boolean;
63
+ triangleInformation: RwTriangle[];
64
+ vertexInformation: RwVector3[];
65
+ normalInformation: RwVector3[];
66
+ boundingSphere?: RwSphere;
67
+ materialList: RwMaterialList;
68
+ binMesh?: RwBinMesh;
69
+ skin?: RwSkin;
70
+ effects2d?: Rw2dEffect[];
71
+ extraVertColour?: RwColor[];
72
+ breakable?: RwBreakable;
73
+ }
74
+ export interface RwBreakable {
75
+ positionRule: number;
76
+ vertices: RwVector3[];
77
+ texCoords: RwTextureCoordinate[];
78
+ colors: RwColor[];
79
+ triangles: {
80
+ a: number;
81
+ b: number;
82
+ c: number;
83
+ }[];
84
+ triangleMaterialIndices: number[];
85
+ materials: RwBreakableMaterial[];
86
+ }
87
+ export interface RwBreakableMaterial {
88
+ textureName: string;
89
+ maskName: string;
90
+ color: {
91
+ r: number;
92
+ g: number;
93
+ b: number;
94
+ };
95
+ }
96
+ export interface RwGeometryList {
97
+ geometricObjectCount: number;
98
+ geometries: RwGeometry[];
99
+ }
100
+ export interface RwAtomic {
101
+ frameIndex: number;
102
+ geometryIndex: number;
103
+ flags: number;
104
+ }
105
+ export interface RwBinMesh {
106
+ meshCount: number;
107
+ meshes: RwMesh[];
108
+ }
109
+ export interface RwSkin {
110
+ boneCount: number;
111
+ usedBoneCount: number;
112
+ maxWeightsPerVertex: number;
113
+ boneVertexIndices: number[][];
114
+ vertexWeights: number[][];
115
+ inverseBoneMatrices: RwMatrix4[];
116
+ }
117
+ export interface RwMesh {
118
+ materialIndex: number;
119
+ indexCount: number;
120
+ indices: number[];
121
+ }
122
+ export declare enum Rw2dEffectType {
123
+ LIGHT = 0,
124
+ PARTICLE = 1,
125
+ ATTRACTOR = 3,
126
+ SUN_GLARE = 4,
127
+ INTERIOR = 5,
128
+ ENEX = 6,
129
+ ROADSIGN = 7,
130
+ TRIGGER_POINT = 8,
131
+ COVER_POINT = 9,
132
+ ESCALATOR = 10
133
+ }
134
+ export declare enum Rw2dCoronaFlashType {
135
+ DEFAULT = 0,
136
+ RANDOM = 1,
137
+ RANDOM_WHEN_WET = 2,
138
+ ANIM_SPEED_4X = 3,
139
+ ANIM_SPEED_2X = 4,
140
+ ANIM_SPEED_1X = 5,
141
+ TRAFFICLIGHT = 7,
142
+ TRAINCROSSING = 8,
143
+ ONLY_RAIN = 10,
144
+ FIVE_ON_FIVE_OFF = 11,
145
+ SIX_ON_FOUR_OFF = 12,
146
+ FOUR_ON_SIX_OFF = 13
147
+ }
148
+ export declare enum RwPedAttractorType {
149
+ ATM = 0,
150
+ SEAT = 1,
151
+ STOP = 2,
152
+ PIZZA = 3,
153
+ SHELTER = 4,
154
+ TRIGGER_SCRIPT = 5,
155
+ LOOK_AT = 6,
156
+ SCRIPTED = 7,
157
+ PARK = 8,
158
+ STEP = 9
159
+ }
160
+ export interface Rw2dEffectLight {
161
+ type: Rw2dEffectType.LIGHT;
162
+ position: RwVector3;
163
+ color: RwColor;
164
+ coronaFarClip: number;
165
+ pointlightRange: number;
166
+ coronaSize: number;
167
+ shadowSize: number;
168
+ coronaShowMode: number;
169
+ coronaEnableReflection: boolean;
170
+ coronaFlareType: number;
171
+ shadowColorMultiplier: number;
172
+ flags1: number;
173
+ coronaTexName: string;
174
+ shadowTexName: string;
175
+ shadowZDistance: number;
176
+ flags2: number;
177
+ }
178
+ export interface Rw2dEffectParticle {
179
+ type: Rw2dEffectType.PARTICLE;
180
+ position: RwVector3;
181
+ effectName: string;
182
+ }
183
+ export interface Rw2dEffectAttractor {
184
+ type: Rw2dEffectType.ATTRACTOR;
185
+ position: RwVector3;
186
+ queueDir: RwVector3;
187
+ useDir: RwVector3;
188
+ forwardDir: RwVector3;
189
+ attractorType: RwPedAttractorType;
190
+ pedExistingProbability: number;
191
+ flags: number;
192
+ scriptName: string;
193
+ }
194
+ export interface Rw2dEffectEnEx {
195
+ type: Rw2dEffectType.ENEX;
196
+ position: RwVector3;
197
+ enterAngle: number;
198
+ radiusX: number;
199
+ radiusY: number;
200
+ exitPos: RwVector3;
201
+ exitAngle: number;
202
+ interiorId: number;
203
+ flags1: number;
204
+ skyColor: number;
205
+ interiorName: string;
206
+ timeOn: number;
207
+ timeOff: number;
208
+ flags2: number;
209
+ }
210
+ export interface Rw2dEffectRoadsign {
211
+ type: Rw2dEffectType.ROADSIGN;
212
+ position: RwVector3;
213
+ size: RwVector2;
214
+ rotation: RwVector3;
215
+ flags: number;
216
+ text: string;
217
+ }
218
+ export interface Rw2dEffectCoverPoint {
219
+ type: Rw2dEffectType.COVER_POINT;
220
+ position: RwVector3;
221
+ coverDir: RwVector2;
222
+ usage: number;
223
+ }
224
+ export interface Rw2dEffectEscalator {
225
+ type: Rw2dEffectType.ESCALATOR;
226
+ position: RwVector3;
227
+ bottom: RwVector3;
228
+ top: RwVector3;
229
+ end: RwVector3;
230
+ direction: number;
231
+ }
232
+ export interface Rw2dEffectGeneric {
233
+ type: Rw2dEffectType.SUN_GLARE | Rw2dEffectType.INTERIOR | Rw2dEffectType.TRIGGER_POINT;
234
+ position: RwVector3;
235
+ data: Uint8Array;
236
+ }
237
+ export type Rw2dEffect = Rw2dEffectLight | Rw2dEffectParticle | Rw2dEffectAttractor | Rw2dEffectEnEx | Rw2dEffectRoadsign | Rw2dEffectCoverPoint | Rw2dEffectEscalator | Rw2dEffectGeneric;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RwPedAttractorType = exports.Rw2dCoronaFlashType = exports.Rw2dEffectType = void 0;
4
+ var Rw2dEffectType;
5
+ (function (Rw2dEffectType) {
6
+ Rw2dEffectType[Rw2dEffectType["LIGHT"] = 0] = "LIGHT";
7
+ Rw2dEffectType[Rw2dEffectType["PARTICLE"] = 1] = "PARTICLE";
8
+ Rw2dEffectType[Rw2dEffectType["ATTRACTOR"] = 3] = "ATTRACTOR";
9
+ Rw2dEffectType[Rw2dEffectType["SUN_GLARE"] = 4] = "SUN_GLARE";
10
+ Rw2dEffectType[Rw2dEffectType["INTERIOR"] = 5] = "INTERIOR";
11
+ Rw2dEffectType[Rw2dEffectType["ENEX"] = 6] = "ENEX";
12
+ Rw2dEffectType[Rw2dEffectType["ROADSIGN"] = 7] = "ROADSIGN";
13
+ Rw2dEffectType[Rw2dEffectType["TRIGGER_POINT"] = 8] = "TRIGGER_POINT";
14
+ Rw2dEffectType[Rw2dEffectType["COVER_POINT"] = 9] = "COVER_POINT";
15
+ Rw2dEffectType[Rw2dEffectType["ESCALATOR"] = 10] = "ESCALATOR";
16
+ })(Rw2dEffectType || (exports.Rw2dEffectType = Rw2dEffectType = {}));
17
+ var Rw2dCoronaFlashType;
18
+ (function (Rw2dCoronaFlashType) {
19
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["DEFAULT"] = 0] = "DEFAULT";
20
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["RANDOM"] = 1] = "RANDOM";
21
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["RANDOM_WHEN_WET"] = 2] = "RANDOM_WHEN_WET";
22
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["ANIM_SPEED_4X"] = 3] = "ANIM_SPEED_4X";
23
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["ANIM_SPEED_2X"] = 4] = "ANIM_SPEED_2X";
24
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["ANIM_SPEED_1X"] = 5] = "ANIM_SPEED_1X";
25
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["TRAFFICLIGHT"] = 7] = "TRAFFICLIGHT";
26
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["TRAINCROSSING"] = 8] = "TRAINCROSSING";
27
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["ONLY_RAIN"] = 10] = "ONLY_RAIN";
28
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["FIVE_ON_FIVE_OFF"] = 11] = "FIVE_ON_FIVE_OFF";
29
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["SIX_ON_FOUR_OFF"] = 12] = "SIX_ON_FOUR_OFF";
30
+ Rw2dCoronaFlashType[Rw2dCoronaFlashType["FOUR_ON_SIX_OFF"] = 13] = "FOUR_ON_SIX_OFF";
31
+ })(Rw2dCoronaFlashType || (exports.Rw2dCoronaFlashType = Rw2dCoronaFlashType = {}));
32
+ var RwPedAttractorType;
33
+ (function (RwPedAttractorType) {
34
+ RwPedAttractorType[RwPedAttractorType["ATM"] = 0] = "ATM";
35
+ RwPedAttractorType[RwPedAttractorType["SEAT"] = 1] = "SEAT";
36
+ RwPedAttractorType[RwPedAttractorType["STOP"] = 2] = "STOP";
37
+ RwPedAttractorType[RwPedAttractorType["PIZZA"] = 3] = "PIZZA";
38
+ RwPedAttractorType[RwPedAttractorType["SHELTER"] = 4] = "SHELTER";
39
+ RwPedAttractorType[RwPedAttractorType["TRIGGER_SCRIPT"] = 5] = "TRIGGER_SCRIPT";
40
+ RwPedAttractorType[RwPedAttractorType["LOOK_AT"] = 6] = "LOOK_AT";
41
+ RwPedAttractorType[RwPedAttractorType["SCRIPTED"] = 7] = "SCRIPTED";
42
+ RwPedAttractorType[RwPedAttractorType["PARK"] = 8] = "PARK";
43
+ RwPedAttractorType[RwPedAttractorType["STEP"] = 9] = "STEP";
44
+ })(RwPedAttractorType || (exports.RwPedAttractorType = RwPedAttractorType = {}));
@@ -0,0 +1,2 @@
1
+ export * from "./parser";
2
+ export * from "./types";
@@ -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("./parser"), exports);
18
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,2 @@
1
+ import type { FxInfo, FxInterpData } from "./types";
2
+ export declare function parseInfo(typeKey: string, interps: Record<string, FxInterpData>): FxInfo | null;
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseInfo = parseInfo;
4
+ var DEFAULT_INTERP = { looped: false, keys: [] };
5
+ function parseInfo(typeKey, interps) {
6
+ var get = function (key) {
7
+ var _a, _b;
8
+ var alt = [];
9
+ for (var _i = 1; _i < arguments.length; _i++) {
10
+ alt[_i - 1] = arguments[_i];
11
+ }
12
+ return (_b = (_a = interps[key]) !== null && _a !== void 0 ? _a : alt.reduce(function (r, k) { return r !== null && r !== void 0 ? r : interps[k]; }, undefined)) !== null && _b !== void 0 ? _b : DEFAULT_INTERP;
13
+ };
14
+ switch (typeKey) {
15
+ case "underwater":
16
+ case "selflit":
17
+ return { type: typeKey };
18
+ case "emrate":
19
+ return { type: "emrate", rate: get("RATE") };
20
+ case "emsize":
21
+ return {
22
+ type: "emsize",
23
+ radius: get("RADIUS"),
24
+ sizeMinX: get("SIZEMINX"),
25
+ sizeMaxX: get("SIZEMAXX"),
26
+ sizeMinY: get("SIZEMINY"),
27
+ sizeMaxY: get("SIZEMAXY"),
28
+ sizeMinZ: get("SIZEMINZ"),
29
+ sizeMaxZ: get("SIZEMAXZ"),
30
+ };
31
+ case "emspeed":
32
+ return { type: "emspeed", speed: get("SPEED"), bias: get("BIAS") };
33
+ case "emdir":
34
+ return {
35
+ type: "emdir",
36
+ dirX: get("DIRX"),
37
+ dirY: get("DIRY"),
38
+ dirZ: get("DIRZ"),
39
+ };
40
+ case "emangle":
41
+ return {
42
+ type: "emangle",
43
+ min: get("MIN", "ANGLEMIN"),
44
+ max: get("MAX", "ANGLEMAX"),
45
+ };
46
+ case "emlife":
47
+ return { type: "emlife", life: get("LIFE"), bias: get("BIAS") };
48
+ case "empos":
49
+ return { type: "empos", x: get("X"), y: get("Y"), z: get("Z") };
50
+ case "emweather":
51
+ return { type: "emweather", interp: get("WEATHER") };
52
+ case "emrotation":
53
+ return { type: "emrotation", min: get("ANGLEMIN"), max: get("ANGLEMAX") };
54
+ case "noise":
55
+ return { type: "noise", x: get("NOISE", "X"), y: get("Y"), z: get("Z") };
56
+ case "force":
57
+ return {
58
+ type: "force",
59
+ forceX: get("FORCEX"),
60
+ forceY: get("FORCEY"),
61
+ forceZ: get("FORCEZ"),
62
+ };
63
+ case "friction":
64
+ return { type: "friction", friction: get("FRICTION") };
65
+ case "attractpt":
66
+ return {
67
+ type: "attractpt",
68
+ x: get("X"),
69
+ y: get("Y"),
70
+ z: get("Z"),
71
+ power: get("POWER"),
72
+ };
73
+ case "attractline":
74
+ return {
75
+ type: "attractline",
76
+ x1: get("X1"),
77
+ y1: get("Y1"),
78
+ z1: get("Z1"),
79
+ x2: get("X2"),
80
+ y2: get("Y2"),
81
+ z2: get("Z2"),
82
+ power: get("POWER"),
83
+ };
84
+ case "groundcollide":
85
+ return {
86
+ type: "groundcollide",
87
+ damping: get("DAMPING"),
88
+ bounce: get("BOUNCE"),
89
+ };
90
+ case "wind":
91
+ return { type: "wind", interp: get("WINDFACTOR") };
92
+ case "jitter":
93
+ return { type: "jitter", x: get("X"), y: get("Y"), z: get("Z") };
94
+ case "rotspeed":
95
+ return {
96
+ type: "rotspeed",
97
+ speed: get("SPEED"),
98
+ speedBias: get("SPEEDBIAS"),
99
+ accel: get("ACCEL"),
100
+ accelBias: get("ACCELBIAS"),
101
+ };
102
+ case "float":
103
+ return { type: "float", interp: get("FLOAT") };
104
+ case "colour":
105
+ return {
106
+ type: "colour",
107
+ red: get("RED"),
108
+ green: get("GREEN"),
109
+ blue: get("BLUE"),
110
+ alpha: get("ALPHA"),
111
+ };
112
+ case "size":
113
+ return {
114
+ type: "size",
115
+ sizeX: get("SIZEX"),
116
+ sizeY: get("SIZEY"),
117
+ sizeXBias: get("SIZEXBIAS"),
118
+ sizeYBias: get("SIZEYBIAS"),
119
+ };
120
+ case "spriterect":
121
+ return { type: "spriterect", interps: Object.values(interps) };
122
+ case "heathaze":
123
+ return { type: "heathaze", interps: Object.values(interps) };
124
+ case "trail":
125
+ return { type: "trail", interps: Object.values(interps) };
126
+ case "flat":
127
+ return {
128
+ type: "flat",
129
+ rightX: get("RIGHTX"),
130
+ rightY: get("RIGHTY"),
131
+ rightZ: get("RIGHTZ"),
132
+ upX: get("UPX"),
133
+ upY: get("UPY"),
134
+ upZ: get("UPZ"),
135
+ atX: get("ATX"),
136
+ atY: get("ATY"),
137
+ atZ: get("ATZ"),
138
+ };
139
+ case "dir":
140
+ return { type: "dir", interps: Object.values(interps) };
141
+ case "animtex":
142
+ return { type: "animtex", interps: Object.values(interps) };
143
+ case "colourrange":
144
+ return {
145
+ type: "colourrange",
146
+ redMin: get("REDMIN"),
147
+ redMax: get("REDMAX"),
148
+ greenMin: get("GREENMIN"),
149
+ greenMax: get("GREENMAX"),
150
+ blueMin: get("BLUEMIN"),
151
+ blueMax: get("BLUEMAX"),
152
+ alphaMin: get("ALPHAMIN"),
153
+ alphaMax: get("ALPHAMAX"),
154
+ };
155
+ case "colourbright":
156
+ return {
157
+ type: "colourbright",
158
+ red: get("RED"),
159
+ green: get("GREEN"),
160
+ blue: get("BLUE"),
161
+ alpha: get("ALPHA"),
162
+ brightness: get("BRIGHTNESS", "BIAS"),
163
+ };
164
+ case "smoke":
165
+ return { type: "smoke", interps: Object.values(interps) };
166
+ default:
167
+ return null;
168
+ }
169
+ }
@@ -0,0 +1,3 @@
1
+ import type { FxProject } from "./types";
2
+ export declare function parseFxpContent(content: string): FxProject;
3
+ export declare function parseFxpFile(filePath: string): FxProject;