rw-parser-ng 2.0.0 → 2.0.1
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/package.json +1 -1
- package/lib/index.d.ts +0 -6
- package/lib/index.js +0 -26
- package/lib/renderware/RwFile.d.ts +0 -10
- package/lib/renderware/RwFile.js +0 -33
- package/lib/renderware/RwSections.d.ts +0 -20
- package/lib/renderware/RwSections.js +0 -29
- package/lib/renderware/dff/DffModelType.d.ts +0 -5
- package/lib/renderware/dff/DffModelType.js +0 -9
- package/lib/renderware/dff/DffParser.d.ts +0 -155
- package/lib/renderware/dff/DffParser.js +0 -418
- package/lib/renderware/errors/RwParseError.d.ts +0 -6
- package/lib/renderware/errors/RwParseError.js +0 -34
- package/lib/renderware/txd/TxdParser.d.ts +0 -38
- package/lib/renderware/txd/TxdParser.js +0 -185
- package/lib/renderware/utils/ImageDecoder.d.ts +0 -23
- package/lib/renderware/utils/ImageDecoder.js +0 -512
- package/lib/renderware/utils/ImageFormatEnums.d.ts +0 -25
- package/lib/renderware/utils/ImageFormatEnums.js +0 -32
- package/lib/renderware/utils/RwVersion.d.ts +0 -7
- package/lib/renderware/utils/RwVersion.js +0 -30
- package/lib/utils/ByteStream.d.ts +0 -16
- package/lib/utils/ByteStream.js +0 -60
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export declare class ImageDecoder {
|
|
2
|
-
static readUInt16LE(buf: Uint8Array, offset: number): number;
|
|
3
|
-
static readUInt32LE(buf: Uint8Array, offset: number): number;
|
|
4
|
-
static decode565(bits: number): [number, number, number];
|
|
5
|
-
static decode555(bits: number): [number, number, number];
|
|
6
|
-
static decode1555(bits: number): [number, number, number, number];
|
|
7
|
-
static decode4444(bits: number): [number, number, number, number];
|
|
8
|
-
static bc1(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
9
|
-
static bc2(data: Uint8Array, width: number, height: number, premultiplied: boolean): Uint8Array;
|
|
10
|
-
static bc3(data: Uint8Array, width: number, height: number, premultiplied: boolean): Uint8Array;
|
|
11
|
-
static bgra1555(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
12
|
-
static bgra4444(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
13
|
-
static bgra555(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
14
|
-
static bgra565(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
15
|
-
static bgra888(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
16
|
-
static bgra8888(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
17
|
-
static lum8(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
18
|
-
static lum8a8(data: Uint8Array, width: number, height: number): Uint8Array;
|
|
19
|
-
static pal4(data: Uint8Array, palette: Uint8Array, width: number, height: number): Uint8Array;
|
|
20
|
-
static pal4NoAlpha(data: Uint8Array, palette: Uint8Array, width: number, height: number): Uint8Array;
|
|
21
|
-
static pal8(data: Uint8Array, palette: Uint8Array, width: number, height: number): Uint8Array;
|
|
22
|
-
static pal8NoAlpha(data: Uint8Array, palette: Uint8Array, width: number, height: number): Uint8Array;
|
|
23
|
-
}
|
|
@@ -1,512 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ImageDecoder = void 0;
|
|
4
|
-
// Source: https://github.com/Parik27/DragonFF/blob/master/gtaLib/txd.py
|
|
5
|
-
var ImageDecoder = /** @class */ (function () {
|
|
6
|
-
function ImageDecoder() {
|
|
7
|
-
}
|
|
8
|
-
ImageDecoder.readUInt16LE = function (buf, offset) {
|
|
9
|
-
return buf[offset] | (buf[offset + 1] << 8);
|
|
10
|
-
};
|
|
11
|
-
ImageDecoder.readUInt32LE = function (buf, offset) {
|
|
12
|
-
return (buf[offset] |
|
|
13
|
-
(buf[offset + 1] << 8) |
|
|
14
|
-
(buf[offset + 2] << 16) |
|
|
15
|
-
(buf[offset + 3] << 24));
|
|
16
|
-
};
|
|
17
|
-
ImageDecoder.decode565 = function (bits) {
|
|
18
|
-
var r = (bits >> 11) & 31;
|
|
19
|
-
var g = (bits >> 5) & 63;
|
|
20
|
-
var b = bits & 31;
|
|
21
|
-
return [
|
|
22
|
-
(r << 3) | (r >> 2),
|
|
23
|
-
(g << 2) | (g >> 4),
|
|
24
|
-
(b << 3) | (b >> 2)
|
|
25
|
-
];
|
|
26
|
-
};
|
|
27
|
-
ImageDecoder.decode555 = function (bits) {
|
|
28
|
-
var r = Math.round(((bits >> 10) & 31) * 255 / 31);
|
|
29
|
-
var g = Math.round(((bits >> 5) & 31) * 255 / 31);
|
|
30
|
-
var b = Math.round((bits & 31) * 255 / 31);
|
|
31
|
-
return [r, g, b];
|
|
32
|
-
};
|
|
33
|
-
ImageDecoder.decode1555 = function (bits) {
|
|
34
|
-
var a = Math.round(((bits >> 15) & 1) * 255);
|
|
35
|
-
var r = Math.round(((bits >> 10) & 31) * 255 / 31);
|
|
36
|
-
var g = Math.round(((bits >> 5) & 31) * 255 / 31);
|
|
37
|
-
var b = Math.round((bits & 31) * 255 / 31);
|
|
38
|
-
return [a, r, g, b];
|
|
39
|
-
};
|
|
40
|
-
ImageDecoder.decode4444 = function (bits) {
|
|
41
|
-
var a = Math.round(((bits >> 12) & 15) * 255 / 15);
|
|
42
|
-
var r = Math.round(((bits >> 8) & 15) * 255 / 15);
|
|
43
|
-
var g = Math.round(((bits >> 4) & 15) * 255 / 15);
|
|
44
|
-
var b = Math.round((bits & 15) * 255 / 15);
|
|
45
|
-
return [a, r, g, b];
|
|
46
|
-
};
|
|
47
|
-
/*
|
|
48
|
-
bc1 - block compression format, using for DXT1
|
|
49
|
-
compress 4x4 block of pixels
|
|
50
|
-
format:
|
|
51
|
-
+---------------+
|
|
52
|
-
| color0 | color0 in palette. 16bit (RGB 565 format)
|
|
53
|
-
+---------------+
|
|
54
|
-
| color1 | color1 in palette. 16bit (RGB 565 format)
|
|
55
|
-
+---+---+---+---+
|
|
56
|
-
| a | b | c | d | a-p color palette index 2bit * 16
|
|
57
|
-
+---+---+---+---+
|
|
58
|
-
| e | f | g | h |
|
|
59
|
-
+---+---+---+---+
|
|
60
|
-
| i | j | k | l |
|
|
61
|
-
+---+---+---+---+
|
|
62
|
-
| m | n | o | p | total: 8byte in 4x4 colors
|
|
63
|
-
+---+---+---+---+
|
|
64
|
-
|
|
65
|
-
color2 and color3 in the palette are calculated by interpolating other colors or choosing the average between them.
|
|
66
|
-
color0 > color1 => interpolation, else => average
|
|
67
|
-
*/
|
|
68
|
-
ImageDecoder.bc1 = function (data, width, height) {
|
|
69
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
70
|
-
var colorPalette = new Uint8Array(16);
|
|
71
|
-
var offset = 0;
|
|
72
|
-
for (var y = 0; y < height; y += 4) {
|
|
73
|
-
for (var x = 0; x < width; x += 4) {
|
|
74
|
-
var color0 = ImageDecoder.readUInt16LE(data, offset);
|
|
75
|
-
var color1 = ImageDecoder.readUInt16LE(data, offset + 2);
|
|
76
|
-
var colorBits = ImageDecoder.readUInt32LE(data, offset + 4);
|
|
77
|
-
offset += 8;
|
|
78
|
-
var _a = ImageDecoder.decode565(color0), c0r = _a[0], c0g = _a[1], c0b = _a[2];
|
|
79
|
-
var _b = ImageDecoder.decode565(color1), c1r = _b[0], c1g = _b[1], c1b = _b[2];
|
|
80
|
-
if (color0 > color1) {
|
|
81
|
-
colorPalette[0] = c0r;
|
|
82
|
-
colorPalette[1] = c0g;
|
|
83
|
-
colorPalette[2] = c0b;
|
|
84
|
-
colorPalette[4] = c1r;
|
|
85
|
-
colorPalette[5] = c1g;
|
|
86
|
-
colorPalette[6] = c1b;
|
|
87
|
-
colorPalette[8] = (2 * c0r + c1r) / 3;
|
|
88
|
-
colorPalette[9] = (2 * c0g + c1g) / 3;
|
|
89
|
-
colorPalette[10] = (2 * c0b + c1b) / 3;
|
|
90
|
-
colorPalette[12] = (c0r + 2 * c1r) / 3;
|
|
91
|
-
colorPalette[13] = (c0g + 2 * c1g) / 3;
|
|
92
|
-
colorPalette[14] = (c0b + 2 * c1b) / 3;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
colorPalette[0] = c0r;
|
|
96
|
-
colorPalette[1] = c0g;
|
|
97
|
-
colorPalette[2] = c0b;
|
|
98
|
-
colorPalette[4] = c1r;
|
|
99
|
-
colorPalette[5] = c1g;
|
|
100
|
-
colorPalette[6] = c1b;
|
|
101
|
-
colorPalette[8] = (c0r + c1r) >> 1;
|
|
102
|
-
colorPalette[9] = (c0g + c1g) >> 1;
|
|
103
|
-
colorPalette[10] = (c0b + c1b) >> 1;
|
|
104
|
-
colorPalette[12] = 0;
|
|
105
|
-
colorPalette[13] = 0;
|
|
106
|
-
colorPalette[14] = 0;
|
|
107
|
-
}
|
|
108
|
-
var baseIndex = (y * width + x) * 4;
|
|
109
|
-
for (var k = 0; k < 16; k++) {
|
|
110
|
-
var colorIdx = colorBits & 0x3;
|
|
111
|
-
colorBits >>>= 2;
|
|
112
|
-
var j = k >> 2;
|
|
113
|
-
var i = k & 3;
|
|
114
|
-
var idx = baseIndex + ((j * width + i) << 2);
|
|
115
|
-
rgba[idx + 0] = colorPalette[colorIdx * 4];
|
|
116
|
-
rgba[idx + 1] = colorPalette[colorIdx * 4 + 1];
|
|
117
|
-
rgba[idx + 2] = colorPalette[colorIdx * 4 + 2];
|
|
118
|
-
if (color0 <= color1 && colorIdx === 3) {
|
|
119
|
-
rgba[idx + 3] = 0;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
rgba[idx + 3] = 255;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return rgba;
|
|
128
|
-
};
|
|
129
|
-
/*
|
|
130
|
-
bc2 - block compression format, using for DXT2 and DXT3
|
|
131
|
-
compress 4x4 block of pixels with 4x4 4bit alpha
|
|
132
|
-
format:
|
|
133
|
-
+---+---+---+---+
|
|
134
|
-
| a | b | c | d | a-p pixel alpha. 4bit * 16
|
|
135
|
-
+---+---+---+---+
|
|
136
|
-
| e | f | g | h |
|
|
137
|
-
+---+---+---+---+
|
|
138
|
-
| i | j | k | l |
|
|
139
|
-
+---+---+---+---+
|
|
140
|
-
| m | n | o | p |
|
|
141
|
-
+---+---+---+---+
|
|
142
|
-
| | bc1 color compression. 8byte
|
|
143
|
-
| bc1 block |
|
|
144
|
-
| | total: 16byte in 4x4 colors
|
|
145
|
-
+---------------+
|
|
146
|
-
|
|
147
|
-
in DXT2, the color data is interpreted as being premultiplied by alpha
|
|
148
|
-
*/
|
|
149
|
-
ImageDecoder.bc2 = function (data, width, height, premultiplied) {
|
|
150
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
151
|
-
var colorPalette = new Uint8Array(16);
|
|
152
|
-
var alphaTable = new Uint8Array(16);
|
|
153
|
-
for (var i = 0; i < 16; i++) {
|
|
154
|
-
alphaTable[i] = (i * 255 + 7.5) / 15 | 0;
|
|
155
|
-
}
|
|
156
|
-
var offset = 0;
|
|
157
|
-
for (var y = 0; y < height; y += 4) {
|
|
158
|
-
for (var x = 0; x < width; x += 4) {
|
|
159
|
-
var alpha0 = ImageDecoder.readUInt32LE(data, offset);
|
|
160
|
-
var alpha1 = ImageDecoder.readUInt32LE(data, offset + 4);
|
|
161
|
-
offset += 8;
|
|
162
|
-
var color0 = ImageDecoder.readUInt16LE(data, offset);
|
|
163
|
-
var color1 = ImageDecoder.readUInt16LE(data, offset + 2);
|
|
164
|
-
var colorBits = ImageDecoder.readUInt32LE(data, offset + 4);
|
|
165
|
-
offset += 8;
|
|
166
|
-
var _a = ImageDecoder.decode565(color0), c0r = _a[0], c0g = _a[1], c0b = _a[2];
|
|
167
|
-
var _b = ImageDecoder.decode565(color1), c1r = _b[0], c1g = _b[1], c1b = _b[2];
|
|
168
|
-
if (color0 > color1) {
|
|
169
|
-
colorPalette[0] = c0r;
|
|
170
|
-
colorPalette[1] = c0g;
|
|
171
|
-
colorPalette[2] = c0b;
|
|
172
|
-
colorPalette[4] = c1r;
|
|
173
|
-
colorPalette[5] = c1g;
|
|
174
|
-
colorPalette[6] = c1b;
|
|
175
|
-
colorPalette[8] = (2 * c0r + c1r) / 3;
|
|
176
|
-
colorPalette[9] = (2 * c0g + c1g) / 3;
|
|
177
|
-
colorPalette[10] = (2 * c0b + c1b) / 3;
|
|
178
|
-
colorPalette[12] = (c0r + 2 * c1r) / 3;
|
|
179
|
-
colorPalette[13] = (c0g + 2 * c1g) / 3;
|
|
180
|
-
colorPalette[14] = (c0b + 2 * c1b) / 3;
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
colorPalette[0] = c0r;
|
|
184
|
-
colorPalette[1] = c0g;
|
|
185
|
-
colorPalette[2] = c0b;
|
|
186
|
-
colorPalette[4] = c1r;
|
|
187
|
-
colorPalette[5] = c1g;
|
|
188
|
-
colorPalette[6] = c1b;
|
|
189
|
-
colorPalette[8] = (c0r + c1r) >> 1;
|
|
190
|
-
colorPalette[9] = (c0g + c1g) >> 1;
|
|
191
|
-
colorPalette[10] = (c0b + c1b) >> 1;
|
|
192
|
-
colorPalette[12] = 0;
|
|
193
|
-
colorPalette[13] = 0;
|
|
194
|
-
colorPalette[14] = 0;
|
|
195
|
-
}
|
|
196
|
-
var baseIndex = ((y * width + x) << 2);
|
|
197
|
-
for (var k = 0; k < 16; k++) {
|
|
198
|
-
var j = k >> 2;
|
|
199
|
-
var i = k & 3;
|
|
200
|
-
var idx = baseIndex + ((((j * width + i) << 2)));
|
|
201
|
-
var colorIdx = colorBits & 0x3;
|
|
202
|
-
colorBits >>>= 2;
|
|
203
|
-
var bitPos = (j << 2) + i;
|
|
204
|
-
var byteIndex = bitPos >> 3;
|
|
205
|
-
var shift = (bitPos & 7) << 2;
|
|
206
|
-
var alpha4 = ((byteIndex === 0 ? alpha0 : alpha1) >>> shift) & 0xF;
|
|
207
|
-
var alpha = alphaTable[alpha4];
|
|
208
|
-
rgba[idx + 0] = colorPalette[colorIdx * 4];
|
|
209
|
-
rgba[idx + 1] = colorPalette[colorIdx * 4 + 1];
|
|
210
|
-
rgba[idx + 2] = colorPalette[colorIdx * 4 + 2];
|
|
211
|
-
rgba[idx + 3] = alpha;
|
|
212
|
-
if (premultiplied && alpha > 0 && alpha < 255) {
|
|
213
|
-
var factor = 255 / alpha;
|
|
214
|
-
rgba[idx + 0] = Math.min(255, Math.round(rgba[idx + 0] * factor));
|
|
215
|
-
rgba[idx + 1] = Math.min(255, Math.round(rgba[idx + 1] * factor));
|
|
216
|
-
rgba[idx + 2] = Math.min(255, Math.round(rgba[idx + 2] * factor));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
return rgba;
|
|
222
|
-
};
|
|
223
|
-
/*
|
|
224
|
-
bc3 - block compression format, using for DXT4 and DXT5
|
|
225
|
-
compress 4x4 block of pixels with alpha
|
|
226
|
-
format:
|
|
227
|
-
+---------------+
|
|
228
|
-
| alpha0 | min alpha value. 8bit
|
|
229
|
-
+---------------+
|
|
230
|
-
| alpha1 | max alpha value. 8bit
|
|
231
|
-
+---+---+---+---+
|
|
232
|
-
| a | b | c | d | bc1-like alpha block but 3bit * 16 (index in alpha palette)
|
|
233
|
-
+---+---+---+---+
|
|
234
|
-
| e | f | g | h |
|
|
235
|
-
+---+---+---+---+
|
|
236
|
-
| i | j | k | l |
|
|
237
|
-
+---+---+---+---+
|
|
238
|
-
| m | n | o | p |
|
|
239
|
-
+---+---+---+---+
|
|
240
|
-
| | bc1 color compression. 8byte
|
|
241
|
-
| bc1 block |
|
|
242
|
-
| | total: 16byte in 4x4 colors
|
|
243
|
-
+---------------+
|
|
244
|
-
|
|
245
|
-
in DXT4, the color data is interpreted as being premultiplied by alpha
|
|
246
|
-
*/
|
|
247
|
-
ImageDecoder.bc3 = function (data, width, height, premultiplied) {
|
|
248
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
249
|
-
var alphaPalette = new Uint8Array(8);
|
|
250
|
-
var colorPalette = new Uint8Array(16);
|
|
251
|
-
var alphaIndices = new Uint8Array(16);
|
|
252
|
-
var offset = 0;
|
|
253
|
-
for (var y = 0; y < height; y += 4) {
|
|
254
|
-
for (var x = 0; x < width; x += 4) {
|
|
255
|
-
var alpha0 = data[offset++];
|
|
256
|
-
var alpha1 = data[offset++];
|
|
257
|
-
var alphaBits = data.subarray(offset, offset + 6);
|
|
258
|
-
offset += 6;
|
|
259
|
-
var color0 = ImageDecoder.readUInt16LE(data, offset);
|
|
260
|
-
var color1 = ImageDecoder.readUInt16LE(data, offset + 2);
|
|
261
|
-
var colorBits = ImageDecoder.readUInt32LE(data, offset + 4);
|
|
262
|
-
offset += 8;
|
|
263
|
-
var _a = ImageDecoder.decode565(color0), c0r = _a[0], c0g = _a[1], c0b = _a[2];
|
|
264
|
-
var _b = ImageDecoder.decode565(color1), c1r = _b[0], c1g = _b[1], c1b = _b[2];
|
|
265
|
-
if (color0 > color1) {
|
|
266
|
-
colorPalette[0] = c0r;
|
|
267
|
-
colorPalette[1] = c0g;
|
|
268
|
-
colorPalette[2] = c0b;
|
|
269
|
-
colorPalette[4] = c1r;
|
|
270
|
-
colorPalette[5] = c1g;
|
|
271
|
-
colorPalette[6] = c1b;
|
|
272
|
-
colorPalette[8] = (2 * c0r + c1r) / 3;
|
|
273
|
-
colorPalette[9] = (2 * c0g + c1g) / 3;
|
|
274
|
-
colorPalette[10] = (2 * c0b + c1b) / 3;
|
|
275
|
-
colorPalette[12] = (c0r + 2 * c1r) / 3;
|
|
276
|
-
colorPalette[13] = (c0g + 2 * c1g) / 3;
|
|
277
|
-
colorPalette[14] = (c0b + 2 * c1b) / 3;
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
colorPalette[0] = c0r;
|
|
281
|
-
colorPalette[1] = c0g;
|
|
282
|
-
colorPalette[2] = c0b;
|
|
283
|
-
colorPalette[4] = c1r;
|
|
284
|
-
colorPalette[5] = c1g;
|
|
285
|
-
colorPalette[6] = c1b;
|
|
286
|
-
colorPalette[8] = (c0r + c1r) >> 1;
|
|
287
|
-
colorPalette[9] = (c0g + c1g) >> 1;
|
|
288
|
-
colorPalette[10] = (c0b + c1b) >> 1;
|
|
289
|
-
colorPalette[12] = 0;
|
|
290
|
-
colorPalette[13] = 0;
|
|
291
|
-
colorPalette[14] = 0;
|
|
292
|
-
}
|
|
293
|
-
if (alpha0 > alpha1) {
|
|
294
|
-
alphaPalette[0] = alpha0;
|
|
295
|
-
alphaPalette[1] = alpha1;
|
|
296
|
-
alphaPalette[2] = (alpha0 * 6 + alpha1 * 1 + 3) / 7;
|
|
297
|
-
alphaPalette[3] = (alpha0 * 5 + alpha1 * 2 + 3) / 7;
|
|
298
|
-
alphaPalette[4] = (alpha0 * 4 + alpha1 * 3 + 3) / 7;
|
|
299
|
-
alphaPalette[5] = (alpha0 * 3 + alpha1 * 4 + 3) / 7;
|
|
300
|
-
alphaPalette[6] = (alpha0 * 2 + alpha1 * 5 + 3) / 7;
|
|
301
|
-
alphaPalette[7] = (alpha0 * 1 + alpha1 * 6 + 3) / 7;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
alphaPalette[0] = alpha0;
|
|
305
|
-
alphaPalette[1] = alpha1;
|
|
306
|
-
alphaPalette[2] = (alpha0 * 4 + alpha1 * 1 + 2) / 5;
|
|
307
|
-
alphaPalette[3] = (alpha0 * 3 + alpha1 * 2 + 2) / 5;
|
|
308
|
-
alphaPalette[4] = (alpha0 * 2 + alpha1 * 3 + 2) / 5;
|
|
309
|
-
alphaPalette[5] = (alpha0 * 1 + alpha1 * 4 + 2) / 5;
|
|
310
|
-
alphaPalette[6] = 0;
|
|
311
|
-
alphaPalette[7] = 255;
|
|
312
|
-
}
|
|
313
|
-
for (var k = 0; k < 16; k++) {
|
|
314
|
-
var bitOffset = k * 3;
|
|
315
|
-
var byteOffset = bitOffset >> 3;
|
|
316
|
-
var shift = bitOffset & 7;
|
|
317
|
-
if (shift <= 5) {
|
|
318
|
-
alphaIndices[k] = (alphaBits[byteOffset] >> shift) & 0x7;
|
|
319
|
-
}
|
|
320
|
-
else {
|
|
321
|
-
var part1 = (alphaBits[byteOffset] >> shift) & 0x7;
|
|
322
|
-
var part2 = (alphaBits[byteOffset + 1] << (8 - shift)) & 0x7;
|
|
323
|
-
alphaIndices[k] = part1 | part2;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
var baseIndex = (y * width + x) << 2;
|
|
327
|
-
var bits = colorBits;
|
|
328
|
-
for (var k = 0; k < 16; k++) {
|
|
329
|
-
var j = k >> 2;
|
|
330
|
-
var i = k & 3;
|
|
331
|
-
var idx = baseIndex + ((((j * width + i) << 2)));
|
|
332
|
-
var colorIdx = bits & 0x3;
|
|
333
|
-
bits >>>= 2;
|
|
334
|
-
var alpha = alphaPalette[alphaIndices[k] & 0x7];
|
|
335
|
-
rgba[idx + 0] = colorPalette[colorIdx * 4];
|
|
336
|
-
rgba[idx + 1] = colorPalette[colorIdx * 4 + 1];
|
|
337
|
-
rgba[idx + 2] = colorPalette[colorIdx * 4 + 2];
|
|
338
|
-
rgba[idx + 3] = alpha;
|
|
339
|
-
if (premultiplied && alpha > 0 && alpha < 255) {
|
|
340
|
-
var factor = 255 / alpha;
|
|
341
|
-
rgba[idx] = Math.min(255, Math.round(rgba[idx] * factor));
|
|
342
|
-
rgba[idx + 1] = Math.min(255, Math.round(rgba[idx + 1] * factor));
|
|
343
|
-
rgba[idx + 2] = Math.min(255, Math.round(rgba[idx + 2] * factor));
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
return rgba;
|
|
349
|
-
};
|
|
350
|
-
ImageDecoder.bgra1555 = function (data, width, height) {
|
|
351
|
-
var rbga = new Uint8Array(4 * width * height);
|
|
352
|
-
var offset = 0;
|
|
353
|
-
for (var i = 0; i < data.length; i += 2) {
|
|
354
|
-
var color = ImageDecoder.readUInt16LE(data, i);
|
|
355
|
-
var _a = ImageDecoder.decode1555(color), a = _a[0], r = _a[1], g = _a[2], b = _a[3];
|
|
356
|
-
rbga[offset++] = r;
|
|
357
|
-
rbga[offset++] = g;
|
|
358
|
-
rbga[offset++] = b;
|
|
359
|
-
rbga[offset++] = a;
|
|
360
|
-
}
|
|
361
|
-
return rbga;
|
|
362
|
-
};
|
|
363
|
-
ImageDecoder.bgra4444 = function (data, width, height) {
|
|
364
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
365
|
-
var offset = 0;
|
|
366
|
-
for (var i = 0; i < data.length; i += 2) {
|
|
367
|
-
var color = ImageDecoder.readUInt16LE(data, i);
|
|
368
|
-
var _a = ImageDecoder.decode4444(color), a = _a[0], r = _a[1], g = _a[2], b = _a[3];
|
|
369
|
-
rgba[offset++] = r;
|
|
370
|
-
rgba[offset++] = g;
|
|
371
|
-
rgba[offset++] = b;
|
|
372
|
-
rgba[offset++] = a;
|
|
373
|
-
}
|
|
374
|
-
return rgba;
|
|
375
|
-
};
|
|
376
|
-
ImageDecoder.bgra555 = function (data, width, height) {
|
|
377
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
378
|
-
var offset = 0;
|
|
379
|
-
for (var i = 0; i < data.length; i += 2) {
|
|
380
|
-
var color = ImageDecoder.readUInt16LE(data, i);
|
|
381
|
-
var _a = ImageDecoder.decode555(color), r = _a[0], g = _a[1], b = _a[2];
|
|
382
|
-
rgba[offset++] = r;
|
|
383
|
-
rgba[offset++] = g;
|
|
384
|
-
rgba[offset++] = b;
|
|
385
|
-
rgba[offset++] = 0xff;
|
|
386
|
-
}
|
|
387
|
-
return rgba;
|
|
388
|
-
};
|
|
389
|
-
ImageDecoder.bgra565 = function (data, width, height) {
|
|
390
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
391
|
-
var offset = 0;
|
|
392
|
-
for (var i = 0; i < data.length; i += 2) {
|
|
393
|
-
var color = ImageDecoder.readUInt16LE(data, i);
|
|
394
|
-
var _a = ImageDecoder.decode565(color), r = _a[0], g = _a[1], b = _a[2];
|
|
395
|
-
rgba[offset++] = r;
|
|
396
|
-
rgba[offset++] = g;
|
|
397
|
-
rgba[offset++] = b;
|
|
398
|
-
rgba[offset++] = 0xff;
|
|
399
|
-
}
|
|
400
|
-
return rgba;
|
|
401
|
-
};
|
|
402
|
-
ImageDecoder.bgra888 = function (data, width, height) {
|
|
403
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
404
|
-
for (var i = 0; i < data.length; i += 4) {
|
|
405
|
-
rgba[i + 0] = data[i + 2];
|
|
406
|
-
rgba[i + 1] = data[i + 1];
|
|
407
|
-
rgba[i + 2] = data[i + 0];
|
|
408
|
-
rgba[i + 3] = 0xff;
|
|
409
|
-
}
|
|
410
|
-
return rgba;
|
|
411
|
-
};
|
|
412
|
-
ImageDecoder.bgra8888 = function (data, width, height) {
|
|
413
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
414
|
-
for (var i = 0; i < data.length; i += 4) {
|
|
415
|
-
rgba[i + 0] = data[i + 2];
|
|
416
|
-
rgba[i + 1] = data[i + 1];
|
|
417
|
-
rgba[i + 2] = data[i + 0];
|
|
418
|
-
rgba[i + 3] = data[i + 3];
|
|
419
|
-
}
|
|
420
|
-
return rgba;
|
|
421
|
-
};
|
|
422
|
-
ImageDecoder.lum8 = function (data, width, height) {
|
|
423
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
424
|
-
for (var i = 0; i < data.length; i++) {
|
|
425
|
-
var offset = i * 4;
|
|
426
|
-
var luminance = data[i];
|
|
427
|
-
rgba[offset + 0] = luminance; // R
|
|
428
|
-
rgba[offset + 1] = luminance; // G
|
|
429
|
-
rgba[offset + 2] = luminance; // B
|
|
430
|
-
rgba[offset + 3] = 0xff;
|
|
431
|
-
}
|
|
432
|
-
return rgba;
|
|
433
|
-
};
|
|
434
|
-
ImageDecoder.lum8a8 = function (data, width, height) {
|
|
435
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
436
|
-
var offset = 0;
|
|
437
|
-
for (var i = 0; i < data.length; i += 2) {
|
|
438
|
-
var luminance = data[i];
|
|
439
|
-
var alpha = data[i + 1];
|
|
440
|
-
rgba[offset++] = luminance;
|
|
441
|
-
rgba[offset++] = luminance;
|
|
442
|
-
rgba[offset++] = luminance;
|
|
443
|
-
rgba[offset++] = alpha;
|
|
444
|
-
}
|
|
445
|
-
return rgba;
|
|
446
|
-
};
|
|
447
|
-
ImageDecoder.pal4 = function (data, palette, width, height) {
|
|
448
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
449
|
-
var offset = 0;
|
|
450
|
-
for (var i = 0; i < data.length; i++) {
|
|
451
|
-
var b = data[i];
|
|
452
|
-
var idx1 = (b >> 4) & 0xf;
|
|
453
|
-
var idx2 = b & 0xf;
|
|
454
|
-
// Copying RGBA from the palette for two pixels
|
|
455
|
-
rgba[offset++] = palette[idx1 * 4 + 0]; // R
|
|
456
|
-
rgba[offset++] = palette[idx1 * 4 + 1]; // G
|
|
457
|
-
rgba[offset++] = palette[idx1 * 4 + 2]; // B
|
|
458
|
-
rgba[offset++] = palette[idx1 * 4 + 3]; // A
|
|
459
|
-
rgba[offset++] = palette[idx2 * 4 + 0]; // R
|
|
460
|
-
rgba[offset++] = palette[idx2 * 4 + 1]; // G
|
|
461
|
-
rgba[offset++] = palette[idx2 * 4 + 2]; // B
|
|
462
|
-
rgba[offset++] = palette[idx2 * 4 + 3]; // A
|
|
463
|
-
}
|
|
464
|
-
return rgba;
|
|
465
|
-
};
|
|
466
|
-
ImageDecoder.pal4NoAlpha = function (data, palette, width, height) {
|
|
467
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
468
|
-
var offset = 0;
|
|
469
|
-
for (var i = 0; i < data.length; i++) {
|
|
470
|
-
var b = data[i];
|
|
471
|
-
var colorIndex1 = (b >> 4) & 0xf;
|
|
472
|
-
var colorIndex2 = b & 0xf;
|
|
473
|
-
// First pixel
|
|
474
|
-
rgba[offset++] = palette[colorIndex1 * 4 + 0]; // R
|
|
475
|
-
rgba[offset++] = palette[colorIndex1 * 4 + 1]; // G
|
|
476
|
-
rgba[offset++] = palette[colorIndex1 * 4 + 2]; // B
|
|
477
|
-
rgba[offset++] = 0xff;
|
|
478
|
-
// Second pixel
|
|
479
|
-
rgba[offset++] = palette[colorIndex2 * 4 + 0]; // R
|
|
480
|
-
rgba[offset++] = palette[colorIndex2 * 4 + 1]; // G
|
|
481
|
-
rgba[offset++] = palette[colorIndex2 * 4 + 2]; // B
|
|
482
|
-
rgba[offset++] = 0xff;
|
|
483
|
-
}
|
|
484
|
-
return rgba;
|
|
485
|
-
};
|
|
486
|
-
ImageDecoder.pal8 = function (data, palette, width, height) {
|
|
487
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
488
|
-
for (var i = 0; i < data.length; i++) {
|
|
489
|
-
var colorIndex = data[i];
|
|
490
|
-
// Copy RGBA from palette
|
|
491
|
-
rgba[i * 4 + 0] = palette[colorIndex * 4 + 0]; // R
|
|
492
|
-
rgba[i * 4 + 1] = palette[colorIndex * 4 + 1]; // G
|
|
493
|
-
rgba[i * 4 + 2] = palette[colorIndex * 4 + 2]; // B
|
|
494
|
-
rgba[i * 4 + 3] = palette[colorIndex * 4 + 3]; // A
|
|
495
|
-
}
|
|
496
|
-
return rgba;
|
|
497
|
-
};
|
|
498
|
-
ImageDecoder.pal8NoAlpha = function (data, palette, width, height) {
|
|
499
|
-
var rgba = new Uint8Array(4 * width * height);
|
|
500
|
-
for (var i = 0; i < data.length; i++) {
|
|
501
|
-
var colorIndex = data[i];
|
|
502
|
-
// Copy RGB from palette
|
|
503
|
-
rgba[i * 4 + 0] = palette[colorIndex * 4 + 0]; // R
|
|
504
|
-
rgba[i * 4 + 1] = palette[colorIndex * 4 + 1]; // G
|
|
505
|
-
rgba[i * 4 + 2] = palette[colorIndex * 4 + 2]; // B
|
|
506
|
-
rgba[i * 4 + 3] = 0xff;
|
|
507
|
-
}
|
|
508
|
-
return rgba;
|
|
509
|
-
};
|
|
510
|
-
return ImageDecoder;
|
|
511
|
-
}());
|
|
512
|
-
exports.ImageDecoder = ImageDecoder;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare enum RasterFormat {
|
|
2
|
-
RASTER_1555 = 256,
|
|
3
|
-
RASTER_565 = 512,
|
|
4
|
-
RASTER_4444 = 768,
|
|
5
|
-
RASTER_LUM = 1024,
|
|
6
|
-
RASTER_8888 = 1280,
|
|
7
|
-
RASTER_888 = 1536,
|
|
8
|
-
RASTER_555 = 2560
|
|
9
|
-
}
|
|
10
|
-
export declare enum D3DFormat {
|
|
11
|
-
D3DFMT_A8L8 = "3",
|
|
12
|
-
D3D_DXT1 = "DXT1",
|
|
13
|
-
D3D_DXT2 = "DXT2",
|
|
14
|
-
D3D_DXT3 = "DXT3",
|
|
15
|
-
D3D_DXT4 = "DXT4",
|
|
16
|
-
D3D_DXT5 = "DXT5"
|
|
17
|
-
}
|
|
18
|
-
export declare enum PaletteType {
|
|
19
|
-
PALETTE_NONE = 0,
|
|
20
|
-
PALETTE_8 = 1
|
|
21
|
-
}
|
|
22
|
-
export declare enum PlatformType {
|
|
23
|
-
D3D8 = 8,
|
|
24
|
-
D3D9 = 9
|
|
25
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PlatformType = exports.PaletteType = exports.D3DFormat = exports.RasterFormat = void 0;
|
|
4
|
-
var RasterFormat;
|
|
5
|
-
(function (RasterFormat) {
|
|
6
|
-
RasterFormat[RasterFormat["RASTER_1555"] = 256] = "RASTER_1555";
|
|
7
|
-
RasterFormat[RasterFormat["RASTER_565"] = 512] = "RASTER_565";
|
|
8
|
-
RasterFormat[RasterFormat["RASTER_4444"] = 768] = "RASTER_4444";
|
|
9
|
-
RasterFormat[RasterFormat["RASTER_LUM"] = 1024] = "RASTER_LUM";
|
|
10
|
-
RasterFormat[RasterFormat["RASTER_8888"] = 1280] = "RASTER_8888";
|
|
11
|
-
RasterFormat[RasterFormat["RASTER_888"] = 1536] = "RASTER_888";
|
|
12
|
-
RasterFormat[RasterFormat["RASTER_555"] = 2560] = "RASTER_555";
|
|
13
|
-
})(RasterFormat || (exports.RasterFormat = RasterFormat = {}));
|
|
14
|
-
var D3DFormat;
|
|
15
|
-
(function (D3DFormat) {
|
|
16
|
-
D3DFormat["D3DFMT_A8L8"] = "3";
|
|
17
|
-
D3DFormat["D3D_DXT1"] = "DXT1";
|
|
18
|
-
D3DFormat["D3D_DXT2"] = "DXT2";
|
|
19
|
-
D3DFormat["D3D_DXT3"] = "DXT3";
|
|
20
|
-
D3DFormat["D3D_DXT4"] = "DXT4";
|
|
21
|
-
D3DFormat["D3D_DXT5"] = "DXT5";
|
|
22
|
-
})(D3DFormat || (exports.D3DFormat = D3DFormat = {}));
|
|
23
|
-
var PaletteType;
|
|
24
|
-
(function (PaletteType) {
|
|
25
|
-
PaletteType[PaletteType["PALETTE_NONE"] = 0] = "PALETTE_NONE";
|
|
26
|
-
PaletteType[PaletteType["PALETTE_8"] = 1] = "PALETTE_8";
|
|
27
|
-
})(PaletteType || (exports.PaletteType = PaletteType = {}));
|
|
28
|
-
var PlatformType;
|
|
29
|
-
(function (PlatformType) {
|
|
30
|
-
PlatformType[PlatformType["D3D8"] = 8] = "D3D8";
|
|
31
|
-
PlatformType[PlatformType["D3D9"] = 9] = "D3D9";
|
|
32
|
-
})(PlatformType || (exports.PlatformType = PlatformType = {}));
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Source: https://gtamods.com/wiki/RenderWare
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
var RwVersion = /** @class */ (function () {
|
|
5
|
-
function RwVersion() {
|
|
6
|
-
}
|
|
7
|
-
RwVersion.unpackVersion = function (version) {
|
|
8
|
-
if (version & 0xFFFF0000) {
|
|
9
|
-
return (version >> 14 & 0x3FF00) + 0x30000 | (version >> 16 & 0x3F);
|
|
10
|
-
}
|
|
11
|
-
return version;
|
|
12
|
-
};
|
|
13
|
-
RwVersion.unpackBuild = function (version) {
|
|
14
|
-
if (version & 0xFFFF0000) {
|
|
15
|
-
return version & 0xFFFF;
|
|
16
|
-
}
|
|
17
|
-
return 0;
|
|
18
|
-
};
|
|
19
|
-
RwVersion.versions = {
|
|
20
|
-
0x31000: 'RenderWare 3.1.0.0 (III on PS2)',
|
|
21
|
-
0x32000: 'RenderWare 3.2.0.0 (III on PC)',
|
|
22
|
-
0x33002: 'RenderWare 3.3.0.2 (III on PC, VC on PS2)',
|
|
23
|
-
0x34003: 'RenderWare 3.4.0.3 (VC on PC)',
|
|
24
|
-
0x34005: 'RenderWare 3.4.0.5 (III on PS2, VC on Android/PC)',
|
|
25
|
-
0x35000: 'RenderWare 3.5.0.0 (III/VC on Xbox)',
|
|
26
|
-
0x36003: 'RenderWare 3.6.0.3 (SA)',
|
|
27
|
-
};
|
|
28
|
-
return RwVersion;
|
|
29
|
-
}());
|
|
30
|
-
exports.default = RwVersion;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare class ByteStream {
|
|
2
|
-
private _cursor;
|
|
3
|
-
private _stream;
|
|
4
|
-
constructor(stream: Buffer);
|
|
5
|
-
readUint8(): number;
|
|
6
|
-
readUint16(): number;
|
|
7
|
-
readUint32(): number;
|
|
8
|
-
readInt32(): number;
|
|
9
|
-
readFloat(): number;
|
|
10
|
-
readString(size: number): string;
|
|
11
|
-
read(size: number): Uint8Array<ArrayBuffer>;
|
|
12
|
-
getSize(): number;
|
|
13
|
-
getPosition(): number;
|
|
14
|
-
setPosition(position: number): void;
|
|
15
|
-
skip(size: number): void;
|
|
16
|
-
}
|