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,24 @@
1
+ export declare enum RwSections {
2
+ RwStruct = 1,
3
+ RwString = 2,
4
+ RwExtension = 3,
5
+ RwTexture = 6,
6
+ RwMaterial = 7,
7
+ RwMaterialList = 8,
8
+ RwFrameList = 14,
9
+ RwGeometry = 15,
10
+ RwClump = 16,
11
+ RwAtomic = 20,
12
+ RwTextureNative = 21,
13
+ RwTextureDictionary = 22,
14
+ RwGeometryList = 26,
15
+ RwBinMesh = 1294,
16
+ RwSkin = 278,
17
+ RwAnim = 286,
18
+ RwMaterialEffectsPLG = 288,
19
+ RwExtraVertColour = 39056121,
20
+ RwBreakable = 39056125,
21
+ RwReflectionMaterial = 39056124,
22
+ Rw2dEffect = 39056120,
23
+ RwNodeName = 39056126
24
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RwSections = void 0;
4
+ var RwSections;
5
+ (function (RwSections) {
6
+ RwSections[RwSections["RwStruct"] = 1] = "RwStruct";
7
+ RwSections[RwSections["RwString"] = 2] = "RwString";
8
+ RwSections[RwSections["RwExtension"] = 3] = "RwExtension";
9
+ RwSections[RwSections["RwTexture"] = 6] = "RwTexture";
10
+ RwSections[RwSections["RwMaterial"] = 7] = "RwMaterial";
11
+ RwSections[RwSections["RwMaterialList"] = 8] = "RwMaterialList";
12
+ RwSections[RwSections["RwFrameList"] = 14] = "RwFrameList";
13
+ RwSections[RwSections["RwGeometry"] = 15] = "RwGeometry";
14
+ RwSections[RwSections["RwClump"] = 16] = "RwClump";
15
+ RwSections[RwSections["RwAtomic"] = 20] = "RwAtomic";
16
+ RwSections[RwSections["RwTextureNative"] = 21] = "RwTextureNative";
17
+ RwSections[RwSections["RwTextureDictionary"] = 22] = "RwTextureDictionary";
18
+ RwSections[RwSections["RwGeometryList"] = 26] = "RwGeometryList";
19
+ RwSections[RwSections["RwBinMesh"] = 1294] = "RwBinMesh";
20
+ RwSections[RwSections["RwSkin"] = 278] = "RwSkin";
21
+ RwSections[RwSections["RwAnim"] = 286] = "RwAnim";
22
+ RwSections[RwSections["RwMaterialEffectsPLG"] = 288] = "RwMaterialEffectsPLG";
23
+ RwSections[RwSections["RwExtraVertColour"] = 39056121] = "RwExtraVertColour";
24
+ RwSections[RwSections["RwBreakable"] = 39056125] = "RwBreakable";
25
+ RwSections[RwSections["RwReflectionMaterial"] = 39056124] = "RwReflectionMaterial";
26
+ RwSections[RwSections["Rw2dEffect"] = 39056120] = "Rw2dEffect";
27
+ RwSections[RwSections["RwNodeName"] = 39056126] = "RwNodeName";
28
+ })(RwSections || (exports.RwSections = RwSections = {}));
@@ -0,0 +1,3 @@
1
+ export declare function getVersionString(version: number): string;
2
+ export declare function unpackVersion(version: number): number;
3
+ export declare function unpackBuild(version: number): number;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVersionString = getVersionString;
4
+ exports.unpackVersion = unpackVersion;
5
+ exports.unpackBuild = unpackBuild;
6
+ var VERSIONS = {
7
+ 200704: "RenderWare 3.1.0.0 (III on PS2)",
8
+ 204800: "RenderWare 3.2.0.0 (III on PC)",
9
+ 208898: "RenderWare 3.3.0.2 (III on PC, VC on PS2)",
10
+ 212995: "RenderWare 3.4.0.3 (VC on PC)",
11
+ 212997: "RenderWare 3.4.0.5 (III on PS2, VC on Android/PC)",
12
+ 217088: "RenderWare 3.5.0.0 (III/VC on Xbox)",
13
+ 221187: "RenderWare 3.6.0.3 (SA)",
14
+ };
15
+ function getVersionString(version) {
16
+ var _a;
17
+ return (_a = VERSIONS[version]) !== null && _a !== void 0 ? _a : "";
18
+ }
19
+ function unpackVersion(version) {
20
+ if (version & 0xffff0000) {
21
+ return (((version >> 14) & 0x3ff00) + 0x30000) | ((version >> 16) & 0x3f);
22
+ }
23
+ return version;
24
+ }
25
+ function unpackBuild(version) {
26
+ return version & 0xffff0000 ? version & 0xffff : 0;
27
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum DffModelType {
2
+ GENERIC = 0,
3
+ SKIN = 1,
4
+ VEHICLE = 2
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DffModelType = void 0;
4
+ var DffModelType;
5
+ (function (DffModelType) {
6
+ DffModelType[DffModelType["GENERIC"] = 0] = "GENERIC";
7
+ DffModelType[DffModelType["SKIN"] = 1] = "SKIN";
8
+ DffModelType[DffModelType["VEHICLE"] = 2] = "VEHICLE";
9
+ })(DffModelType || (exports.DffModelType = DffModelType = {}));
@@ -0,0 +1,4 @@
1
+ export * from "./dff-model-type";
2
+ export * from "./parser";
3
+ export * from "./readers";
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("./dff-model-type"), exports);
18
+ __exportStar(require("./parser"), exports);
19
+ __exportStar(require("./readers"), exports);
20
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,5 @@
1
+ import { RwFile } from "../core/rw-file";
2
+ import type { RwDff } from "./types";
3
+ export declare class DffParser extends RwFile {
4
+ parse(): RwDff;
5
+ }
@@ -0,0 +1,154 @@
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.DffParser = void 0;
19
+ var errors_1 = require("../core/errors");
20
+ var rw_file_1 = require("../core/rw-file");
21
+ var rw_sections_1 = require("../core/rw-sections");
22
+ var rw_version_1 = require("../core/rw-version");
23
+ var dff_model_type_1 = require("./dff-model-type");
24
+ var readers_1 = require("./readers");
25
+ var DffParser = /** @class */ (function (_super) {
26
+ __extends(DffParser, _super);
27
+ function DffParser() {
28
+ return _super !== null && _super.apply(this, arguments) || this;
29
+ }
30
+ DffParser.prototype.parse = function () {
31
+ var _a;
32
+ var version;
33
+ var versionNumber;
34
+ var atomics = [];
35
+ var dummies = [];
36
+ var animNodes = [];
37
+ var geometryList = null;
38
+ var frameList = null;
39
+ while (this.getPosition() < this.getSize()) {
40
+ var header = void 0;
41
+ try {
42
+ header = this.readSectionHeader();
43
+ }
44
+ catch (error) {
45
+ console.warn("Failed to read section header at offset ".concat(this.getPosition().toString(16), ": ").concat(error instanceof Error ? error.message : error, ". Truncating file."));
46
+ break;
47
+ }
48
+ if (header.sectionType === 0)
49
+ break;
50
+ if (header.sectionSize === 0)
51
+ continue;
52
+ if (this.getPosition() + header.sectionSize > this.getSize()) {
53
+ console.warn("Section at offset ".concat(this.getPosition().toString(16), " claims size ").concat(header.sectionSize, " but only ").concat(this.getSize() - this.getPosition(), " bytes remaining. Truncating file."));
54
+ break;
55
+ }
56
+ switch (header.sectionType) {
57
+ case rw_sections_1.RwSections.RwClump:
58
+ versionNumber = (0, rw_version_1.unpackVersion)(header.versionNumber);
59
+ version = (0, rw_version_1.getVersionString)(versionNumber);
60
+ break;
61
+ case rw_sections_1.RwSections.RwFrameList:
62
+ frameList = (0, readers_1.readFrameList)(this);
63
+ break;
64
+ case rw_sections_1.RwSections.RwExtension: {
65
+ var extHeader = this.readSectionHeader();
66
+ switch (extHeader.sectionType) {
67
+ case rw_sections_1.RwSections.RwNodeName:
68
+ dummies.push(this.readString(extHeader.sectionSize));
69
+ break;
70
+ case rw_sections_1.RwSections.RwAnim:
71
+ animNodes.push((0, readers_1.readAnimNode)(this));
72
+ break;
73
+ default:
74
+ this.skip(extHeader.sectionSize);
75
+ break;
76
+ }
77
+ break;
78
+ }
79
+ case rw_sections_1.RwSections.RwGeometryList:
80
+ geometryList = (0, readers_1.readGeometryList)(this, header);
81
+ break;
82
+ case rw_sections_1.RwSections.RwAtomic: {
83
+ var atomic = (0, readers_1.readAtomic)(this);
84
+ atomics[atomic.geometryIndex] = atomic.frameIndex;
85
+ break;
86
+ }
87
+ case rw_sections_1.RwSections.RwNodeName:
88
+ dummies.push(this.readString(header.sectionSize));
89
+ break;
90
+ case rw_sections_1.RwSections.RwAnim:
91
+ animNodes.push((0, readers_1.readAnimNode)(this));
92
+ break;
93
+ default:
94
+ this.skip(header.sectionSize);
95
+ break;
96
+ }
97
+ }
98
+ if (!version || !versionNumber) {
99
+ throw new errors_1.RwParseStructureNotFoundError("version");
100
+ }
101
+ if (!((_a = geometryList === null || geometryList === void 0 ? void 0 : geometryList.geometries) === null || _a === void 0 ? void 0 : _a.length)) {
102
+ throw new errors_1.RwParseStructureNotFoundError("geometry list");
103
+ }
104
+ // Heuristic model type detection (not authoritative - GTA uses IDE/DAT files)
105
+ // Based on gta-reversed: eCarNodes.h, AtomicModelInfo.cpp, VehicleModelInfo.cpp
106
+ var vehiclePrefixes = [
107
+ "chassis",
108
+ "wheel_rf",
109
+ "wheel_lf",
110
+ "wheel_rb",
111
+ "wheel_lb",
112
+ "wheel_rm",
113
+ "wheel_lm",
114
+ "door_lf",
115
+ "door_rf",
116
+ "door_lr",
117
+ "door_rr",
118
+ "bonnet",
119
+ "boot",
120
+ "bump_front",
121
+ "bump_rear",
122
+ "wing_lf",
123
+ "wing_rf",
124
+ "windscreen",
125
+ "exhaust",
126
+ "boat_hi",
127
+ "toprotor",
128
+ "rearrotor",
129
+ "moving_rotor",
130
+ ];
131
+ var modelType = dff_model_type_1.DffModelType.GENERIC;
132
+ if (geometryList.geometries.some(function (g) { return g.skin; })) {
133
+ modelType = dff_model_type_1.DffModelType.SKIN;
134
+ }
135
+ else if (dummies.some(function (d) {
136
+ var lower = d.toLowerCase();
137
+ return vehiclePrefixes.some(function (p) { return lower.startsWith(p) || lower.includes("_".concat(p)); });
138
+ })) {
139
+ modelType = dff_model_type_1.DffModelType.VEHICLE;
140
+ }
141
+ return {
142
+ modelType: modelType,
143
+ version: version,
144
+ versionNumber: versionNumber,
145
+ geometryList: geometryList,
146
+ frameList: frameList,
147
+ atomics: atomics,
148
+ dummies: dummies,
149
+ animNodes: animNodes,
150
+ };
151
+ };
152
+ return DffParser;
153
+ }(rw_file_1.RwFile));
154
+ exports.DffParser = DffParser;
@@ -0,0 +1,3 @@
1
+ import type { RwFile } from "../../core/rw-file";
2
+ import { type Rw2dEffect } from "../types";
3
+ export declare function read2dEffects(file: RwFile, sectionSize: number): Rw2dEffect[];
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.read2dEffects = read2dEffects;
4
+ var types_1 = require("../types");
5
+ function read2dEffects(file, sectionSize) {
6
+ var effects = [];
7
+ var endPosition = file.getPosition() + sectionSize;
8
+ var effectCount = file.readUint32();
9
+ for (var i = 0; i < effectCount && file.getPosition() < endPosition; i++) {
10
+ var effect = read2dEffect(file);
11
+ if (effect)
12
+ effects.push(effect);
13
+ }
14
+ file.setPosition(endPosition);
15
+ return effects;
16
+ }
17
+ function read2dEffect(file) {
18
+ var position = {
19
+ x: file.readFloat(),
20
+ y: file.readFloat(),
21
+ z: file.readFloat(),
22
+ };
23
+ var type = file.readUint32();
24
+ var dataSize = file.readUint32();
25
+ var dataStart = file.getPosition();
26
+ var effect = null;
27
+ switch (type) {
28
+ case types_1.Rw2dEffectType.LIGHT:
29
+ effect = readLight(file, position);
30
+ break;
31
+ case types_1.Rw2dEffectType.PARTICLE:
32
+ effect = readParticle(file, position);
33
+ break;
34
+ case types_1.Rw2dEffectType.ATTRACTOR:
35
+ effect = readAttractor(file, position);
36
+ break;
37
+ case types_1.Rw2dEffectType.ENEX:
38
+ effect = readEnEx(file, position);
39
+ break;
40
+ case types_1.Rw2dEffectType.ROADSIGN:
41
+ effect = readRoadsign(file, position);
42
+ break;
43
+ case types_1.Rw2dEffectType.COVER_POINT:
44
+ effect = readCoverPoint(file, position);
45
+ break;
46
+ case types_1.Rw2dEffectType.ESCALATOR:
47
+ effect = readEscalator(file, position);
48
+ break;
49
+ default:
50
+ effect = readGeneric(file, position, type, dataSize);
51
+ break;
52
+ }
53
+ file.setPosition(dataStart + dataSize);
54
+ return effect;
55
+ }
56
+ function readLight(file, position) {
57
+ var color = {
58
+ r: file.readUint8(),
59
+ g: file.readUint8(),
60
+ b: file.readUint8(),
61
+ a: file.readUint8(),
62
+ };
63
+ var coronaFarClip = file.readFloat();
64
+ var pointlightRange = file.readFloat();
65
+ var coronaSize = file.readFloat();
66
+ var shadowSize = file.readFloat();
67
+ var coronaShowMode = file.readUint8();
68
+ var coronaEnableReflection = file.readUint8() !== 0;
69
+ var coronaFlareType = file.readUint8();
70
+ var shadowColorMultiplier = file.readUint8();
71
+ var flags1 = file.readUint8();
72
+ var coronaTexName = file.readString(24);
73
+ var shadowTexName = file.readString(24);
74
+ var shadowZDistance = file.readUint8();
75
+ var flags2 = file.readUint8();
76
+ return {
77
+ type: types_1.Rw2dEffectType.LIGHT,
78
+ position: position,
79
+ color: color,
80
+ coronaFarClip: coronaFarClip,
81
+ pointlightRange: pointlightRange,
82
+ coronaSize: coronaSize,
83
+ shadowSize: shadowSize,
84
+ coronaShowMode: coronaShowMode,
85
+ coronaEnableReflection: coronaEnableReflection,
86
+ coronaFlareType: coronaFlareType,
87
+ shadowColorMultiplier: shadowColorMultiplier,
88
+ flags1: flags1,
89
+ coronaTexName: coronaTexName,
90
+ shadowTexName: shadowTexName,
91
+ shadowZDistance: shadowZDistance,
92
+ flags2: flags2,
93
+ };
94
+ }
95
+ function readParticle(file, position) {
96
+ var effectName = file.readString(24).replace(/\0+$/, "");
97
+ return { type: types_1.Rw2dEffectType.PARTICLE, position: position, effectName: effectName };
98
+ }
99
+ function readAttractor(file, position) {
100
+ var queueDir = {
101
+ x: file.readFloat(),
102
+ y: file.readFloat(),
103
+ z: file.readFloat(),
104
+ };
105
+ var useDir = {
106
+ x: file.readFloat(),
107
+ y: file.readFloat(),
108
+ z: file.readFloat(),
109
+ };
110
+ var forwardDir = {
111
+ x: file.readFloat(),
112
+ y: file.readFloat(),
113
+ z: file.readFloat(),
114
+ };
115
+ var attractorType = file.readInt8();
116
+ var pedExistingProbability = file.readUint8();
117
+ file.skip(1);
118
+ var flags = file.readUint8();
119
+ var scriptName = file.readString(8).replace(/\0+$/, "");
120
+ return {
121
+ type: types_1.Rw2dEffectType.ATTRACTOR,
122
+ position: position,
123
+ queueDir: queueDir,
124
+ useDir: useDir,
125
+ forwardDir: forwardDir,
126
+ attractorType: attractorType,
127
+ pedExistingProbability: pedExistingProbability,
128
+ flags: flags,
129
+ scriptName: scriptName,
130
+ };
131
+ }
132
+ function readEnEx(file, position) {
133
+ var enterAngle = file.readFloat();
134
+ var radiusX = file.readFloat();
135
+ var radiusY = file.readFloat();
136
+ var exitPos = {
137
+ x: file.readFloat(),
138
+ y: file.readFloat(),
139
+ z: file.readFloat(),
140
+ };
141
+ var exitAngle = file.readFloat();
142
+ var interiorId = file.readInt16();
143
+ var flags1 = file.readUint8();
144
+ var skyColor = file.readUint8();
145
+ var interiorName = file.readString(8).replace(/\0+$/, "");
146
+ var timeOn = file.readUint8();
147
+ var timeOff = file.readUint8();
148
+ var flags2 = file.readUint8();
149
+ return {
150
+ type: types_1.Rw2dEffectType.ENEX,
151
+ position: position,
152
+ enterAngle: enterAngle,
153
+ radiusX: radiusX,
154
+ radiusY: radiusY,
155
+ exitPos: exitPos,
156
+ exitAngle: exitAngle,
157
+ interiorId: interiorId,
158
+ flags1: flags1,
159
+ skyColor: skyColor,
160
+ interiorName: interiorName,
161
+ timeOn: timeOn,
162
+ timeOff: timeOff,
163
+ flags2: flags2,
164
+ };
165
+ }
166
+ function readRoadsign(file, position) {
167
+ var size = { x: file.readFloat(), y: file.readFloat() };
168
+ var rotation = {
169
+ x: file.readFloat(),
170
+ y: file.readFloat(),
171
+ z: file.readFloat(),
172
+ };
173
+ var flags = file.readUint16();
174
+ file.skip(2);
175
+ file.skip(8);
176
+ return {
177
+ type: types_1.Rw2dEffectType.ROADSIGN,
178
+ position: position,
179
+ size: size,
180
+ rotation: rotation,
181
+ flags: flags,
182
+ text: "",
183
+ };
184
+ }
185
+ function readCoverPoint(file, position) {
186
+ var coverDir = { x: file.readFloat(), y: file.readFloat() };
187
+ var usage = file.readUint32();
188
+ return { type: types_1.Rw2dEffectType.COVER_POINT, position: position, coverDir: coverDir, usage: usage };
189
+ }
190
+ function readEscalator(file, position) {
191
+ var bottom = {
192
+ x: file.readFloat(),
193
+ y: file.readFloat(),
194
+ z: file.readFloat(),
195
+ };
196
+ var top = { x: file.readFloat(), y: file.readFloat(), z: file.readFloat() };
197
+ var end = { x: file.readFloat(), y: file.readFloat(), z: file.readFloat() };
198
+ var direction = file.readUint8();
199
+ return {
200
+ type: types_1.Rw2dEffectType.ESCALATOR,
201
+ position: position,
202
+ bottom: bottom,
203
+ top: top,
204
+ end: end,
205
+ direction: direction,
206
+ };
207
+ }
208
+ function readGeneric(file, position, type, dataSize) {
209
+ var data = file.readBytes(dataSize);
210
+ return { type: type, position: position, data: data };
211
+ }
@@ -0,0 +1,4 @@
1
+ import type { RwFile, RwSectionHeader } from "../../core/rw-file";
2
+ import type { RwGeometry, RwGeometryList } from "../types";
3
+ export declare function readGeometryList(file: RwFile, header: RwSectionHeader): RwGeometryList;
4
+ export declare function readGeometry(file: RwFile, versionNumber: number): RwGeometry;