rw-parser-ng 2.0.0 → 2.0.2
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.
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/renderware/dff/DffParser.d.ts +1 -44
- package/lib/utils/ByteStream.d.ts +1 -0
- package/lib/utils/ByteStream.js +5 -0
- package/package.json +2 -3
- package/tsconfig.json +3 -4
- package/lib/scripts/sort_models.d.ts +0 -1
- package/lib/scripts/sort_models.js +0 -185
- package/lib/scripts/sort_worker.d.ts +0 -1
- package/lib/scripts/sort_worker.js +0 -140
- package/lib/src/index.d.ts +0 -8
- package/lib/src/index.js +0 -28
- package/lib/src/renderware/RwFile.d.ts +0 -10
- package/lib/src/renderware/RwFile.js +0 -33
- package/lib/src/renderware/RwSections.d.ts +0 -20
- package/lib/src/renderware/RwSections.js +0 -29
- package/lib/src/renderware/dff/DffModelType.d.ts +0 -5
- package/lib/src/renderware/dff/DffModelType.js +0 -9
- package/lib/src/renderware/dff/DffParser.d.ts +0 -112
- package/lib/src/renderware/dff/DffParser.js +0 -418
- package/lib/src/renderware/errors/RwParseError.d.ts +0 -6
- package/lib/src/renderware/errors/RwParseError.js +0 -34
- package/lib/src/renderware/txd/TxdParser.d.ts +0 -38
- package/lib/src/renderware/txd/TxdParser.js +0 -185
- package/lib/src/renderware/utils/ImageDecoder.d.ts +0 -23
- package/lib/src/renderware/utils/ImageDecoder.js +0 -512
- package/lib/src/renderware/utils/ImageFormatEnums.d.ts +0 -25
- package/lib/src/renderware/utils/ImageFormatEnums.js +0 -32
- package/lib/src/renderware/utils/RwVersion.d.ts +0 -7
- package/lib/src/renderware/utils/RwVersion.js +0 -30
- package/lib/src/utils/ByteStream.d.ts +0 -17
- package/lib/src/utils/ByteStream.js +0 -65
- /package/lib/{src/renderware → renderware}/common/types.d.ts +0 -0
- /package/lib/{src/renderware → renderware}/common/types.js +0 -0
- /package/lib/{src/renderware → renderware}/ifp/IfpData.d.ts +0 -0
- /package/lib/{src/renderware → renderware}/ifp/IfpData.js +0 -0
- /package/lib/{src/renderware → renderware}/ifp/IfpParser.d.ts +0 -0
- /package/lib/{src/renderware → renderware}/ifp/IfpParser.js +0 -0
package/lib/index.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ export { RwFile } from './renderware/RwFile';
|
|
|
3
3
|
export { RwSections } from './renderware/RwSections';
|
|
4
4
|
export * from './renderware/dff/DffParser';
|
|
5
5
|
export * from './renderware/txd/TxdParser';
|
|
6
|
+
export * from './renderware/ifp/IfpParser';
|
|
6
7
|
export * from './renderware/dff/DffModelType';
|
|
8
|
+
export * from './renderware/ifp/IfpData';
|
package/lib/index.js
CHANGED
|
@@ -23,4 +23,6 @@ var RwSections_1 = require("./renderware/RwSections");
|
|
|
23
23
|
Object.defineProperty(exports, "RwSections", { enumerable: true, get: function () { return RwSections_1.RwSections; } });
|
|
24
24
|
__exportStar(require("./renderware/dff/DffParser"), exports);
|
|
25
25
|
__exportStar(require("./renderware/txd/TxdParser"), exports);
|
|
26
|
+
__exportStar(require("./renderware/ifp/IfpParser"), exports);
|
|
26
27
|
__exportStar(require("./renderware/dff/DffModelType"), exports);
|
|
28
|
+
__exportStar(require("./renderware/ifp/IfpData"), exports);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RwFile } from '../RwFile';
|
|
2
2
|
import { DffModelType } from './DffModelType';
|
|
3
|
+
import { RwColor, RwMatrix3, RwMatrix4, RwSphere, RwTextureCoordinate, RwTriangle, RwVector3 } from '../common/types';
|
|
3
4
|
export interface RwDff {
|
|
4
5
|
modelType: DffModelType;
|
|
5
6
|
version: string;
|
|
@@ -93,50 +94,6 @@ export interface RwMesh {
|
|
|
93
94
|
indexCount: number;
|
|
94
95
|
indices: number[];
|
|
95
96
|
}
|
|
96
|
-
export interface RwMatrix3 {
|
|
97
|
-
right: RwVector3;
|
|
98
|
-
up: RwVector3;
|
|
99
|
-
at: RwVector3;
|
|
100
|
-
}
|
|
101
|
-
export interface RwMatrix4 {
|
|
102
|
-
right: RwVector4;
|
|
103
|
-
up: RwVector4;
|
|
104
|
-
at: RwVector4;
|
|
105
|
-
transform: RwVector4;
|
|
106
|
-
}
|
|
107
|
-
export interface RwColor {
|
|
108
|
-
r: number;
|
|
109
|
-
g: number;
|
|
110
|
-
b: number;
|
|
111
|
-
a: number;
|
|
112
|
-
}
|
|
113
|
-
export interface RwVector2 {
|
|
114
|
-
x: number;
|
|
115
|
-
y: number;
|
|
116
|
-
}
|
|
117
|
-
export interface RwVector3 {
|
|
118
|
-
x: number;
|
|
119
|
-
y: number;
|
|
120
|
-
z: number;
|
|
121
|
-
}
|
|
122
|
-
export interface RwVector4 {
|
|
123
|
-
x: number;
|
|
124
|
-
y: number;
|
|
125
|
-
z: number;
|
|
126
|
-
t: number;
|
|
127
|
-
}
|
|
128
|
-
export interface RwTextureCoordinate {
|
|
129
|
-
u: number;
|
|
130
|
-
v: number;
|
|
131
|
-
}
|
|
132
|
-
export interface RwTriangle {
|
|
133
|
-
vector: RwVector3;
|
|
134
|
-
materialId: number;
|
|
135
|
-
}
|
|
136
|
-
export interface RwSphere {
|
|
137
|
-
vector: RwVector3;
|
|
138
|
-
radius: number;
|
|
139
|
-
}
|
|
140
97
|
export declare class DffParser extends RwFile {
|
|
141
98
|
constructor(buffer: Buffer);
|
|
142
99
|
parse(): RwDff;
|
package/lib/utils/ByteStream.js
CHANGED
|
@@ -21,6 +21,11 @@ var ByteStream = /** @class */ (function () {
|
|
|
21
21
|
this._cursor += 4;
|
|
22
22
|
return uint32;
|
|
23
23
|
};
|
|
24
|
+
ByteStream.prototype.readInt16 = function () {
|
|
25
|
+
var int16 = this._stream.readInt16LE(this._cursor);
|
|
26
|
+
this._cursor += 2;
|
|
27
|
+
return int16;
|
|
28
|
+
};
|
|
24
29
|
ByteStream.prototype.readInt32 = function () {
|
|
25
30
|
var int32 = this._stream.readInt32LE(this._cursor);
|
|
26
31
|
this._cursor += 4;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rw-parser-ng",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Parses RenderWare DFF, TXD and IFP files into usable format!",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "DepsCian",
|
|
@@ -50,8 +50,7 @@
|
|
|
50
50
|
"build": "tsc -p tsconfig.json",
|
|
51
51
|
"dev": "tsc -p tsconfig.json --watch",
|
|
52
52
|
"prepare": "npm run build",
|
|
53
|
-
"test": "jest"
|
|
54
|
-
"sort:models": "tsc && node lib/scripts/sort_models.js"
|
|
53
|
+
"test": "jest"
|
|
55
54
|
},
|
|
56
55
|
"files": [
|
|
57
56
|
"lib",
|
package/tsconfig.json
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
|
12
12
|
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
|
13
13
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
|
14
|
-
"outDir": "./lib
|
|
15
|
-
|
|
14
|
+
"outDir": "./lib", /* Redirect output structure to the directory. */
|
|
15
|
+
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
|
16
16
|
// "composite": true, /* Enable project compilation */
|
|
17
17
|
// "removeComments": true, /* Do not emit comments to output. */
|
|
18
18
|
// "noEmit": true, /* Do not emit outputs. */
|
|
@@ -58,8 +58,7 @@
|
|
|
58
58
|
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
|
59
59
|
},
|
|
60
60
|
"include": [
|
|
61
|
-
"src/**/*"
|
|
62
|
-
"scripts/**/*"
|
|
61
|
+
"src/**/*"
|
|
63
62
|
],
|
|
64
63
|
"exclude": [
|
|
65
64
|
"node_modules",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,185 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
-
function step(op) {
|
|
49
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
-
switch (op[0]) {
|
|
54
|
-
case 0: case 1: t = op; break;
|
|
55
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
-
default:
|
|
59
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
-
if (t[2]) _.ops.pop();
|
|
64
|
-
_.trys.pop(); continue;
|
|
65
|
-
}
|
|
66
|
-
op = body.call(thisArg, _);
|
|
67
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
72
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
73
|
-
if (ar || !(i in from)) {
|
|
74
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
75
|
-
ar[i] = from[i];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
79
|
-
};
|
|
80
|
-
var _a;
|
|
81
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
82
|
-
var worker_threads_1 = require("worker_threads");
|
|
83
|
-
var index_1 = require("../src/index");
|
|
84
|
-
var fs_1 = require("fs");
|
|
85
|
-
var path = __importStar(require("path"));
|
|
86
|
-
var os = __importStar(require("os"));
|
|
87
|
-
var sourceDir = 'C:\\Users\\Administrator\\Documents\\Code\\playground-render\\assets\\source_skins';
|
|
88
|
-
var outputDir = 'C:\\Users\\Administrator\\Documents\\Code\\playground-render\\assets\\sorted_skins';
|
|
89
|
-
var modelTypeToDir = (_a = {},
|
|
90
|
-
_a[index_1.DffModelType.GENERIC] = 'objects',
|
|
91
|
-
_a[index_1.DffModelType.SKIN] = 'skins',
|
|
92
|
-
_a[index_1.DffModelType.VEHICLE] = 'vehicles',
|
|
93
|
-
_a);
|
|
94
|
-
function createDirectory(dir) {
|
|
95
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
96
|
-
return __generator(this, function (_a) {
|
|
97
|
-
switch (_a.label) {
|
|
98
|
-
case 0: return [4 /*yield*/, fs_1.promises.mkdir(dir, { recursive: true })];
|
|
99
|
-
case 1:
|
|
100
|
-
_a.sent();
|
|
101
|
-
return [2 /*return*/];
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
function sortAndIndexAssets() {
|
|
107
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
108
|
-
var texturesDir, modelDirs, allFiles, filesQueue, numWorkers, modelIndex, textureIndex, processedFiles, runWorker, workerPromises, i;
|
|
109
|
-
return __generator(this, function (_a) {
|
|
110
|
-
switch (_a.label) {
|
|
111
|
-
case 0:
|
|
112
|
-
console.time('Total execution time');
|
|
113
|
-
texturesDir = path.join(outputDir, 'textures');
|
|
114
|
-
modelDirs = Object.values(modelTypeToDir).map(function (dir) { return path.join(outputDir, dir); });
|
|
115
|
-
return [4 /*yield*/, Promise.all(__spreadArray([createDirectory(texturesDir)], modelDirs.map(createDirectory), true))];
|
|
116
|
-
case 1:
|
|
117
|
-
_a.sent();
|
|
118
|
-
return [4 /*yield*/, fs_1.promises.readdir(sourceDir)];
|
|
119
|
-
case 2:
|
|
120
|
-
allFiles = (_a.sent()).filter(function (f) { return ['.dff', '.txd'].includes(path.extname(f).toLowerCase()); });
|
|
121
|
-
filesQueue = __spreadArray([], allFiles, true);
|
|
122
|
-
numWorkers = os.cpus().length;
|
|
123
|
-
console.log("Starting processing with ".concat(numWorkers, " workers for ").concat(allFiles.length, " files."));
|
|
124
|
-
modelIndex = { skins: [], objects: [], vehicles: [] };
|
|
125
|
-
textureIndex = {};
|
|
126
|
-
processedFiles = 0;
|
|
127
|
-
runWorker = function (workerId) { return new Promise(function (resolve, reject) {
|
|
128
|
-
var worker = new worker_threads_1.Worker(path.join(__dirname, 'sort_worker.js'));
|
|
129
|
-
worker.on('message', function (result) {
|
|
130
|
-
processedFiles++;
|
|
131
|
-
process.stdout.write("\rProcessing: ".concat(processedFiles, "/").concat(allFiles.length));
|
|
132
|
-
if (result.type === 'dff') {
|
|
133
|
-
modelIndex[result.category].push(result.file);
|
|
134
|
-
}
|
|
135
|
-
else if (result.type === 'txd') {
|
|
136
|
-
textureIndex[result.file] = result.textures;
|
|
137
|
-
}
|
|
138
|
-
else if (result.type === 'error') {
|
|
139
|
-
console.error("\n[Worker ".concat(workerId, "] Error processing ").concat(result.file, ": ").concat(result.message));
|
|
140
|
-
}
|
|
141
|
-
if (filesQueue.length > 0) {
|
|
142
|
-
worker.postMessage({ file: filesQueue.pop(), sourceDir: sourceDir, outputDir: outputDir, texturesDir: texturesDir, modelTypeToDir: modelTypeToDir });
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
worker.postMessage(null);
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
worker.on('error', reject);
|
|
149
|
-
worker.on('exit', function (code) {
|
|
150
|
-
if (code === 0) {
|
|
151
|
-
resolve();
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
reject(new Error("Worker ".concat(workerId, " stopped with exit code ").concat(code)));
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
if (filesQueue.length > 0) {
|
|
158
|
-
worker.postMessage({ file: filesQueue.pop(), sourceDir: sourceDir, outputDir: outputDir, texturesDir: texturesDir, modelTypeToDir: modelTypeToDir });
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
worker.postMessage(null);
|
|
162
|
-
}
|
|
163
|
-
}); };
|
|
164
|
-
workerPromises = [];
|
|
165
|
-
for (i = 0; i < numWorkers; i++) {
|
|
166
|
-
workerPromises.push(runWorker(i + 1));
|
|
167
|
-
}
|
|
168
|
-
return [4 /*yield*/, Promise.all(workerPromises)];
|
|
169
|
-
case 3:
|
|
170
|
-
_a.sent();
|
|
171
|
-
console.log('\nWriting index files...');
|
|
172
|
-
return [4 /*yield*/, Promise.all([
|
|
173
|
-
fs_1.promises.writeFile(path.join(outputDir, 'index.json'), JSON.stringify(modelIndex, null, 2)),
|
|
174
|
-
fs_1.promises.writeFile(path.join(texturesDir, 'index.json'), JSON.stringify(textureIndex, null, 2))
|
|
175
|
-
])];
|
|
176
|
-
case 4:
|
|
177
|
-
_a.sent();
|
|
178
|
-
console.log('Sorting and indexing complete!');
|
|
179
|
-
console.timeEnd('Total execution time');
|
|
180
|
-
return [2 /*return*/];
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
sortAndIndexAssets().catch(console.error);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,140 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
-
function step(op) {
|
|
49
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
-
switch (op[0]) {
|
|
54
|
-
case 0: case 1: t = op; break;
|
|
55
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
-
default:
|
|
59
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
-
if (t[2]) _.ops.pop();
|
|
64
|
-
_.trys.pop(); continue;
|
|
65
|
-
}
|
|
66
|
-
op = body.call(thisArg, _);
|
|
67
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
-
var worker_threads_1 = require("worker_threads");
|
|
73
|
-
var index_1 = require("../src/index");
|
|
74
|
-
var fs_1 = require("fs");
|
|
75
|
-
var path = __importStar(require("path"));
|
|
76
|
-
if (!worker_threads_1.parentPort) {
|
|
77
|
-
throw new Error('This script must be run as a worker thread.');
|
|
78
|
-
}
|
|
79
|
-
function processFile(task) {
|
|
80
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
81
|
-
var file, sourceDir, outputDir, texturesDir, modelTypeToDir, sourcePath, ext, dffBuffer, modelType, targetDirName, destPath, destPath, txdBuffer, textureDictionary, textureNames, error_1;
|
|
82
|
-
return __generator(this, function (_a) {
|
|
83
|
-
switch (_a.label) {
|
|
84
|
-
case 0:
|
|
85
|
-
file = task.file, sourceDir = task.sourceDir, outputDir = task.outputDir, texturesDir = task.texturesDir, modelTypeToDir = task.modelTypeToDir;
|
|
86
|
-
sourcePath = path.join(sourceDir, file);
|
|
87
|
-
ext = path.extname(file).toLowerCase();
|
|
88
|
-
_a.label = 1;
|
|
89
|
-
case 1:
|
|
90
|
-
_a.trys.push([1, 8, , 9]);
|
|
91
|
-
if (!(ext === '.dff')) return [3 /*break*/, 4];
|
|
92
|
-
return [4 /*yield*/, fs_1.promises.readFile(sourcePath)];
|
|
93
|
-
case 2:
|
|
94
|
-
dffBuffer = _a.sent();
|
|
95
|
-
modelType = new index_1.DffParser(dffBuffer).parse().modelType;
|
|
96
|
-
targetDirName = modelTypeToDir[modelType];
|
|
97
|
-
destPath = path.join(outputDir, targetDirName, file);
|
|
98
|
-
return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destPath)];
|
|
99
|
-
case 3:
|
|
100
|
-
_a.sent();
|
|
101
|
-
return [2 /*return*/, { type: 'dff', file: file, category: targetDirName }];
|
|
102
|
-
case 4:
|
|
103
|
-
if (!(ext === '.txd')) return [3 /*break*/, 7];
|
|
104
|
-
destPath = path.join(texturesDir, file);
|
|
105
|
-
return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destPath)];
|
|
106
|
-
case 5:
|
|
107
|
-
_a.sent();
|
|
108
|
-
return [4 /*yield*/, fs_1.promises.readFile(sourcePath)];
|
|
109
|
-
case 6:
|
|
110
|
-
txdBuffer = _a.sent();
|
|
111
|
-
textureDictionary = new index_1.TxdParser(txdBuffer).parse().textureDictionary;
|
|
112
|
-
textureNames = textureDictionary.textureNatives.map(function (t) { return t.textureName; });
|
|
113
|
-
return [2 /*return*/, { type: 'txd', file: file, textures: textureNames }];
|
|
114
|
-
case 7: return [3 /*break*/, 9];
|
|
115
|
-
case 8:
|
|
116
|
-
error_1 = _a.sent();
|
|
117
|
-
return [2 /*return*/, { type: 'error', file: file, message: error_1.message }];
|
|
118
|
-
case 9: return [2 /*return*/];
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
worker_threads_1.parentPort.on('message', function (task) { return __awaiter(void 0, void 0, void 0, function () {
|
|
124
|
-
var result;
|
|
125
|
-
return __generator(this, function (_a) {
|
|
126
|
-
switch (_a.label) {
|
|
127
|
-
case 0:
|
|
128
|
-
if (task === null) {
|
|
129
|
-
process.exit(0);
|
|
130
|
-
}
|
|
131
|
-
return [4 /*yield*/, processFile(task)];
|
|
132
|
-
case 1:
|
|
133
|
-
result = _a.sent();
|
|
134
|
-
if (result) {
|
|
135
|
-
worker_threads_1.parentPort === null || worker_threads_1.parentPort === void 0 ? void 0 : worker_threads_1.parentPort.postMessage(result);
|
|
136
|
-
}
|
|
137
|
-
return [2 /*return*/];
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}); });
|
package/lib/src/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { ByteStream } from './utils/ByteStream';
|
|
2
|
-
export { RwFile } from './renderware/RwFile';
|
|
3
|
-
export { RwSections } from './renderware/RwSections';
|
|
4
|
-
export * from './renderware/dff/DffParser';
|
|
5
|
-
export * from './renderware/txd/TxdParser';
|
|
6
|
-
export * from './renderware/ifp/IfpParser';
|
|
7
|
-
export * from './renderware/dff/DffModelType';
|
|
8
|
-
export * from './renderware/ifp/IfpData';
|
package/lib/src/index.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
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
|
-
exports.RwSections = exports.RwFile = exports.ByteStream = void 0;
|
|
18
|
-
var ByteStream_1 = require("./utils/ByteStream");
|
|
19
|
-
Object.defineProperty(exports, "ByteStream", { enumerable: true, get: function () { return ByteStream_1.ByteStream; } });
|
|
20
|
-
var RwFile_1 = require("./renderware/RwFile");
|
|
21
|
-
Object.defineProperty(exports, "RwFile", { enumerable: true, get: function () { return RwFile_1.RwFile; } });
|
|
22
|
-
var RwSections_1 = require("./renderware/RwSections");
|
|
23
|
-
Object.defineProperty(exports, "RwSections", { enumerable: true, get: function () { return RwSections_1.RwSections; } });
|
|
24
|
-
__exportStar(require("./renderware/dff/DffParser"), exports);
|
|
25
|
-
__exportStar(require("./renderware/txd/TxdParser"), exports);
|
|
26
|
-
__exportStar(require("./renderware/ifp/IfpParser"), exports);
|
|
27
|
-
__exportStar(require("./renderware/dff/DffModelType"), exports);
|
|
28
|
-
__exportStar(require("./renderware/ifp/IfpData"), exports);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ByteStream } from "../utils/ByteStream";
|
|
2
|
-
export interface RwSectionHeader {
|
|
3
|
-
sectionType: number;
|
|
4
|
-
sectionSize: number;
|
|
5
|
-
versionNumber: number;
|
|
6
|
-
}
|
|
7
|
-
export declare class RwFile extends ByteStream {
|
|
8
|
-
constructor(stream: Buffer);
|
|
9
|
-
readSectionHeader(): RwSectionHeader;
|
|
10
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
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.RwFile = void 0;
|
|
19
|
-
var ByteStream_1 = require("../utils/ByteStream");
|
|
20
|
-
var RwFile = /** @class */ (function (_super) {
|
|
21
|
-
__extends(RwFile, _super);
|
|
22
|
-
function RwFile(stream) {
|
|
23
|
-
return _super.call(this, stream) || this;
|
|
24
|
-
}
|
|
25
|
-
RwFile.prototype.readSectionHeader = function () {
|
|
26
|
-
var sectionType = this.readUint32();
|
|
27
|
-
var sectionSize = this.readUint32();
|
|
28
|
-
var versionNumber = this.readUint32();
|
|
29
|
-
return { sectionType: sectionType, sectionSize: sectionSize, versionNumber: versionNumber };
|
|
30
|
-
};
|
|
31
|
-
return RwFile;
|
|
32
|
-
}(ByteStream_1.ByteStream));
|
|
33
|
-
exports.RwFile = RwFile;
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
-
RwSkin = 278,
|
|
16
|
-
RwAnim = 286,
|
|
17
|
-
RwMaterialEffectsPLG = 288,
|
|
18
|
-
RwReflectionMaterial = 39056124,
|
|
19
|
-
RwNodeName = 39056126
|
|
20
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RwSections = void 0;
|
|
4
|
-
var RwSections;
|
|
5
|
-
(function (RwSections) {
|
|
6
|
-
// Core
|
|
7
|
-
RwSections[RwSections["RwStruct"] = 1] = "RwStruct";
|
|
8
|
-
RwSections[RwSections["RwString"] = 2] = "RwString";
|
|
9
|
-
RwSections[RwSections["RwExtension"] = 3] = "RwExtension";
|
|
10
|
-
RwSections[RwSections["RwTexture"] = 6] = "RwTexture";
|
|
11
|
-
RwSections[RwSections["RwMaterial"] = 7] = "RwMaterial";
|
|
12
|
-
RwSections[RwSections["RwMaterialList"] = 8] = "RwMaterialList";
|
|
13
|
-
RwSections[RwSections["RwFrameList"] = 14] = "RwFrameList";
|
|
14
|
-
RwSections[RwSections["RwGeometry"] = 15] = "RwGeometry";
|
|
15
|
-
RwSections[RwSections["RwClump"] = 16] = "RwClump";
|
|
16
|
-
RwSections[RwSections["RwAtomic"] = 20] = "RwAtomic";
|
|
17
|
-
RwSections[RwSections["RwTextureNative"] = 21] = "RwTextureNative";
|
|
18
|
-
RwSections[RwSections["RwTextureDictionary"] = 22] = "RwTextureDictionary";
|
|
19
|
-
RwSections[RwSections["RwGeometryList"] = 26] = "RwGeometryList";
|
|
20
|
-
RwSections[RwSections["RwSkin"] = 278] = "RwSkin";
|
|
21
|
-
RwSections[RwSections["RwAnim"] = 286] = "RwAnim";
|
|
22
|
-
// Toolkit
|
|
23
|
-
RwSections[RwSections["RwMaterialEffectsPLG"] = 288] = "RwMaterialEffectsPLG";
|
|
24
|
-
// R* specific RW plugins
|
|
25
|
-
RwSections[RwSections["RwReflectionMaterial"] = 39056124] = "RwReflectionMaterial";
|
|
26
|
-
// This was renamed to RwNodeName from RwFrame to prevent confusion.
|
|
27
|
-
// https://gtamods.com/wiki/Node_Name_(RW_Section)
|
|
28
|
-
RwSections[RwSections["RwNodeName"] = 39056126] = "RwNodeName";
|
|
29
|
-
})(RwSections || (exports.RwSections = RwSections = {}));
|
|
@@ -1,9 +0,0 @@
|
|
|
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 = {}));
|