wc3maptranslator 4.0.3 → 5.0.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.
- package/README.md +62 -43
- package/dist/src/AngleConverter.d.ts +3 -2
- package/dist/src/AngleConverter.d.ts.map +1 -1
- package/dist/src/AngleConverter.js.map +1 -1
- package/dist/src/CommonInterfaces.d.ts +12 -8
- package/dist/src/CommonInterfaces.d.ts.map +1 -1
- package/dist/src/CommonInterfaces.js +17 -0
- package/dist/src/CommonInterfaces.js.map +1 -1
- package/dist/src/HexBuffer.d.ts +5 -2
- package/dist/src/HexBuffer.d.ts.map +1 -1
- package/dist/src/HexBuffer.js +34 -34
- package/dist/src/HexBuffer.js.map +1 -1
- package/dist/src/PlayerBitfield.d.ts +30 -0
- package/dist/src/PlayerBitfield.d.ts.map +1 -0
- package/dist/src/PlayerBitfield.js +56 -0
- package/dist/src/PlayerBitfield.js.map +1 -0
- package/dist/src/TranslatorMappings.d.ts +12 -0
- package/dist/src/TranslatorMappings.d.ts.map +1 -0
- package/dist/src/TranslatorMappings.js +47 -0
- package/dist/src/TranslatorMappings.js.map +1 -0
- package/dist/src/W3Buffer.d.ts +4 -1
- package/dist/src/W3Buffer.d.ts.map +1 -1
- package/dist/src/W3Buffer.js +13 -9
- package/dist/src/W3Buffer.js.map +1 -1
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +162 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +23 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/translators/CamerasTranslator.d.ts +9 -4
- package/dist/src/translators/CamerasTranslator.d.ts.map +1 -1
- package/dist/src/translators/CamerasTranslator.js +25 -24
- package/dist/src/translators/CamerasTranslator.js.map +1 -1
- package/dist/src/translators/DoodadsTranslator.d.ts +22 -9
- package/dist/src/translators/DoodadsTranslator.d.ts.map +1 -1
- package/dist/src/translators/DoodadsTranslator.js +101 -109
- package/dist/src/translators/DoodadsTranslator.js.map +1 -1
- package/dist/src/translators/ImportsTranslator.d.ts +5 -13
- package/dist/src/translators/ImportsTranslator.d.ts.map +1 -1
- package/dist/src/translators/ImportsTranslator.js +15 -41
- package/dist/src/translators/ImportsTranslator.js.map +1 -1
- package/dist/src/translators/InfoTranslator.d.ts +98 -10
- package/dist/src/translators/InfoTranslator.d.ts.map +1 -1
- package/dist/src/translators/InfoTranslator.js +263 -164
- package/dist/src/translators/InfoTranslator.js.map +1 -1
- package/dist/src/translators/ObjectsTranslator.d.ts +23 -7
- package/dist/src/translators/ObjectsTranslator.d.ts.map +1 -1
- package/dist/src/translators/ObjectsTranslator.js +193 -162
- package/dist/src/translators/ObjectsTranslator.js.map +1 -1
- package/dist/src/translators/RegionsTranslator.d.ts +5 -4
- package/dist/src/translators/RegionsTranslator.d.ts.map +1 -1
- package/dist/src/translators/RegionsTranslator.js +18 -35
- package/dist/src/translators/RegionsTranslator.js.map +1 -1
- package/dist/src/translators/SoundsTranslator.d.ts +46 -6
- package/dist/src/translators/SoundsTranslator.d.ts.map +1 -1
- package/dist/src/translators/SoundsTranslator.js +127 -108
- package/dist/src/translators/SoundsTranslator.js.map +1 -1
- package/dist/src/translators/StringsTranslator.d.ts +10 -4
- package/dist/src/translators/StringsTranslator.d.ts.map +1 -1
- package/dist/src/translators/StringsTranslator.js +19 -20
- package/dist/src/translators/StringsTranslator.js.map +1 -1
- package/dist/src/translators/TerrainTranslator.d.ts +24 -2
- package/dist/src/translators/TerrainTranslator.d.ts.map +1 -1
- package/dist/src/translators/TerrainTranslator.js +74 -99
- package/dist/src/translators/TerrainTranslator.js.map +1 -1
- package/dist/src/translators/UnitsTranslator.d.ts +76 -14
- package/dist/src/translators/UnitsTranslator.d.ts.map +1 -1
- package/dist/src/translators/UnitsTranslator.js +235 -139
- package/dist/src/translators/UnitsTranslator.js.map +1 -1
- package/package.json +28 -25
- package/dist/src/translators/index.d.ts +0 -11
- package/dist/src/translators/index.d.ts.map +0 -1
- package/dist/src/translators/index.js +0 -23
- package/dist/src/translators/index.js.map +0 -1
|
@@ -1,60 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RegionsTranslator = void 0;
|
|
4
3
|
const HexBuffer_1 = require("../HexBuffer");
|
|
5
4
|
const W3Buffer_1 = require("../W3Buffer");
|
|
6
|
-
|
|
5
|
+
const CommonInterfaces_1 = require("../CommonInterfaces");
|
|
6
|
+
class RegionsTranslator extends CommonInterfaces_1.ITranslator {
|
|
7
7
|
static jsonToWar(regionsJson) {
|
|
8
8
|
const outBufferToWar = new HexBuffer_1.HexBuffer();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
outBufferToWar.addInt(5); // file version
|
|
13
|
-
outBufferToWar.addInt(regionsJson.length); // number of regions
|
|
14
|
-
/*
|
|
15
|
-
* Body
|
|
16
|
-
*/
|
|
17
|
-
regionsJson.forEach((region) => {
|
|
18
|
-
// Position
|
|
19
|
-
// Note that the .w3x guide has these coords wrong - the guide swaps bottom and right, but this is incorrect; bottom should be written before right
|
|
9
|
+
outBufferToWar.addInt(5);
|
|
10
|
+
outBufferToWar.addInt(regionsJson.length);
|
|
11
|
+
for (const region of regionsJson) {
|
|
20
12
|
outBufferToWar.addFloat(region.position.left);
|
|
21
13
|
outBufferToWar.addFloat(region.position.bottom);
|
|
22
14
|
outBufferToWar.addFloat(region.position.right);
|
|
23
15
|
outBufferToWar.addFloat(region.position.top);
|
|
24
16
|
outBufferToWar.addString(region.name);
|
|
25
17
|
outBufferToWar.addInt(region.id);
|
|
26
|
-
// Weather effect name - lookup necessary: char[4]
|
|
27
18
|
if (region.weatherEffect) {
|
|
28
|
-
outBufferToWar.addChars(region.weatherEffect);
|
|
19
|
+
outBufferToWar.addChars(region.weatherEffect);
|
|
29
20
|
}
|
|
30
21
|
else {
|
|
31
|
-
// We can't put a string "0000", because ASCII 0's differ from 0x0 bytes
|
|
32
22
|
outBufferToWar.addByte(0);
|
|
33
23
|
outBufferToWar.addByte(0);
|
|
34
24
|
outBufferToWar.addByte(0);
|
|
35
25
|
outBufferToWar.addByte(0);
|
|
36
26
|
}
|
|
37
|
-
|
|
38
|
-
outBufferToWar.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
outBufferToWar.addByte(region.color[2]); // blue
|
|
42
|
-
outBufferToWar.addByte(region.color[1]); // green
|
|
43
|
-
outBufferToWar.addByte(region.color[0]); // red
|
|
44
|
-
// End of structure - for some reason the .w3r needs this here;
|
|
45
|
-
// Value is set to 0xff based on observing the .w3r file, but not sure if it could be something else
|
|
27
|
+
outBufferToWar.addString(region.ambientSound || '');
|
|
28
|
+
outBufferToWar.addByte(region.color[2]);
|
|
29
|
+
outBufferToWar.addByte(region.color[1]);
|
|
30
|
+
outBufferToWar.addByte(region.color[0]);
|
|
46
31
|
outBufferToWar.addByte(0xff);
|
|
47
|
-
}
|
|
32
|
+
}
|
|
48
33
|
return {
|
|
49
|
-
errors: [],
|
|
50
34
|
buffer: outBufferToWar.getBuffer()
|
|
51
35
|
};
|
|
52
36
|
}
|
|
53
37
|
static warToJson(buffer) {
|
|
54
38
|
const result = [];
|
|
55
39
|
const outBufferToJSON = new W3Buffer_1.W3Buffer(buffer);
|
|
56
|
-
|
|
57
|
-
numRegions = outBufferToJSON.readInt();
|
|
40
|
+
(0, CommonInterfaces_1.expectVersion)(5, outBufferToJSON.readInt());
|
|
41
|
+
const numRegions = outBufferToJSON.readInt();
|
|
58
42
|
for (let i = 0; i < numRegions; i++) {
|
|
59
43
|
const region = {
|
|
60
44
|
name: '',
|
|
@@ -75,22 +59,21 @@ class RegionsTranslator {
|
|
|
75
59
|
region.position.top = outBufferToJSON.readFloat();
|
|
76
60
|
region.name = outBufferToJSON.readString();
|
|
77
61
|
region.id = outBufferToJSON.readInt();
|
|
78
|
-
region.weatherEffect = outBufferToJSON.readChars(4);
|
|
62
|
+
region.weatherEffect = outBufferToJSON.readChars(4, true);
|
|
79
63
|
region.ambientSound = outBufferToJSON.readString();
|
|
80
64
|
region.color = [
|
|
81
65
|
outBufferToJSON.readByte(),
|
|
82
66
|
outBufferToJSON.readByte(),
|
|
83
|
-
outBufferToJSON.readByte()
|
|
67
|
+
outBufferToJSON.readByte()
|
|
84
68
|
];
|
|
85
|
-
region.color.reverse();
|
|
86
|
-
outBufferToJSON.readByte();
|
|
69
|
+
region.color.reverse();
|
|
70
|
+
outBufferToJSON.readByte();
|
|
87
71
|
result.push(region);
|
|
88
72
|
}
|
|
89
73
|
return {
|
|
90
|
-
errors: [],
|
|
91
74
|
json: result
|
|
92
75
|
};
|
|
93
76
|
}
|
|
94
77
|
}
|
|
95
|
-
exports.
|
|
78
|
+
exports.default = RegionsTranslator;
|
|
96
79
|
//# sourceMappingURL=RegionsTranslator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegionsTranslator.js","sourceRoot":"","sources":["../../../src/translators/RegionsTranslator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RegionsTranslator.js","sourceRoot":"","sources":["../../../src/translators/RegionsTranslator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { WarResult, JsonResult, ITranslator } from '../CommonInterfaces';
|
|
4
|
+
declare enum EffectType {
|
|
5
|
+
Default = "DefaultEAXON",
|
|
6
|
+
Combat = "CombatSoundsEAX",
|
|
7
|
+
Drums = "KotoDrumsEAX",
|
|
8
|
+
Spells = "SpellsEAX",
|
|
9
|
+
Missiles = "MissilesEAX",
|
|
10
|
+
HeroSpeech = "HeroAcksEAX",
|
|
11
|
+
Doodads = "DoodadsEAX"
|
|
12
|
+
}
|
|
13
|
+
declare enum Channel {
|
|
14
|
+
General = 0,
|
|
15
|
+
UnitSelection = 1,
|
|
16
|
+
UnitAcknowledgement = 2,
|
|
17
|
+
UnitMovement = 3,
|
|
18
|
+
UnitReady = 4,
|
|
19
|
+
Combat = 5,
|
|
20
|
+
Error = 6,
|
|
21
|
+
Music = 7,
|
|
22
|
+
UserInterface = 8,
|
|
23
|
+
LoopingMovement = 9,
|
|
24
|
+
LoopingAmbient = 10,
|
|
25
|
+
Animations = 11,
|
|
26
|
+
Constructions = 12,
|
|
27
|
+
Birth = 13,
|
|
28
|
+
Fire = 14,
|
|
29
|
+
LegacyMidi = 15,
|
|
30
|
+
CinematicGeneral = 16,
|
|
31
|
+
CinematicAmbient = 17,
|
|
32
|
+
CinematicMusic = 18,
|
|
33
|
+
CinematicDialog = 19,
|
|
34
|
+
CinematicSFX1 = 20,
|
|
35
|
+
CinematicSFX2 = 21,
|
|
36
|
+
CinematicSFX3 = 22
|
|
37
|
+
}
|
|
3
38
|
interface Sound {
|
|
4
|
-
name: string;
|
|
5
39
|
variableName: string;
|
|
40
|
+
internalName: string;
|
|
6
41
|
path: string;
|
|
7
|
-
|
|
42
|
+
effect?: EffectType;
|
|
8
43
|
flags: SoundFlags;
|
|
9
44
|
fadeRate: FadeRate;
|
|
10
|
-
volume
|
|
45
|
+
volume?: number;
|
|
11
46
|
pitch: number;
|
|
12
|
-
channel
|
|
47
|
+
channel?: number;
|
|
13
48
|
distance: Distance;
|
|
49
|
+
pitchVariance?: number;
|
|
50
|
+
priority?: number;
|
|
14
51
|
}
|
|
15
52
|
interface FadeRate {
|
|
16
53
|
in: number;
|
|
@@ -21,13 +58,16 @@ interface SoundFlags {
|
|
|
21
58
|
'3dSound': boolean;
|
|
22
59
|
stopOutOfRange: boolean;
|
|
23
60
|
music: boolean;
|
|
61
|
+
imported: boolean;
|
|
24
62
|
}
|
|
25
63
|
interface Distance {
|
|
26
64
|
min: number;
|
|
27
65
|
max: number;
|
|
28
66
|
cutoff: number;
|
|
29
67
|
}
|
|
30
|
-
export
|
|
68
|
+
export default abstract class SoundsTranslator extends ITranslator {
|
|
69
|
+
static readonly EffectType: typeof EffectType;
|
|
70
|
+
static readonly Channel: typeof Channel;
|
|
31
71
|
static jsonToWar(soundsJson: Sound[]): WarResult;
|
|
32
72
|
static warToJson(buffer: Buffer): JsonResult<Sound[]>;
|
|
33
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoundsTranslator.d.ts","sourceRoot":"","sources":["../../../src/translators/SoundsTranslator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SoundsTranslator.d.ts","sourceRoot":"","sources":["../../../src/translators/SoundsTranslator.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAExF,aAAK,UAAU;IACX,OAAO,iBAAiB;IACxB,MAAM,oBAAoB;IAC1B,KAAK,iBAAiB;IACtB,MAAM,cAAc;IACpB,QAAQ,gBAAgB;IACxB,UAAU,gBAAgB;IAC1B,OAAO,eAAe;CACzB;AAED,aAAK,OAAO;IACR,OAAO,IAAI;IACX,aAAa,IAAA;IACb,mBAAmB,IAAA;IACnB,YAAY,IAAA;IACZ,SAAS,IAAA;IACT,MAAM,IAAA;IACN,KAAK,IAAA;IACL,KAAK,IAAA;IACL,aAAa,IAAA;IACb,eAAe,IAAA;IACf,cAAc,KAAA;IACd,UAAU,KAAA;IACV,aAAa,KAAA;IACb,KAAK,KAAA;IACL,IAAI,KAAA;IACJ,UAAU,KAAA;IACV,gBAAgB,KAAA;IAChB,gBAAgB,KAAA;IAChB,cAAc,KAAA;IACd,eAAe,KAAA;IACf,aAAa,KAAA;IACb,aAAa,KAAA;IACb,aAAa,KAAA;CAChB;AAED,UAAU,KAAK;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,QAAQ;IACd,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,QAAQ;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAkBD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,gBAAiB,SAAQ,WAAW;IAC9D,gBAAuB,UAAU,oBAAc;IAC/C,gBAAuB,OAAO,iBAAW;WAE3B,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,SAAS;WAwFzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;CAmG/D"}
|
|
@@ -1,34 +1,66 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SoundsTranslator = void 0;
|
|
4
3
|
const HexBuffer_1 = require("../HexBuffer");
|
|
5
4
|
const W3Buffer_1 = require("../W3Buffer");
|
|
6
|
-
|
|
5
|
+
const CommonInterfaces_1 = require("../CommonInterfaces");
|
|
6
|
+
var EffectType;
|
|
7
|
+
(function (EffectType) {
|
|
8
|
+
EffectType["Default"] = "DefaultEAXON";
|
|
9
|
+
EffectType["Combat"] = "CombatSoundsEAX";
|
|
10
|
+
EffectType["Drums"] = "KotoDrumsEAX";
|
|
11
|
+
EffectType["Spells"] = "SpellsEAX";
|
|
12
|
+
EffectType["Missiles"] = "MissilesEAX";
|
|
13
|
+
EffectType["HeroSpeech"] = "HeroAcksEAX";
|
|
14
|
+
EffectType["Doodads"] = "DoodadsEAX";
|
|
15
|
+
})(EffectType || (EffectType = {}));
|
|
16
|
+
var Channel;
|
|
17
|
+
(function (Channel) {
|
|
18
|
+
Channel[Channel["General"] = 0] = "General";
|
|
19
|
+
Channel[Channel["UnitSelection"] = 1] = "UnitSelection";
|
|
20
|
+
Channel[Channel["UnitAcknowledgement"] = 2] = "UnitAcknowledgement";
|
|
21
|
+
Channel[Channel["UnitMovement"] = 3] = "UnitMovement";
|
|
22
|
+
Channel[Channel["UnitReady"] = 4] = "UnitReady";
|
|
23
|
+
Channel[Channel["Combat"] = 5] = "Combat";
|
|
24
|
+
Channel[Channel["Error"] = 6] = "Error";
|
|
25
|
+
Channel[Channel["Music"] = 7] = "Music";
|
|
26
|
+
Channel[Channel["UserInterface"] = 8] = "UserInterface";
|
|
27
|
+
Channel[Channel["LoopingMovement"] = 9] = "LoopingMovement";
|
|
28
|
+
Channel[Channel["LoopingAmbient"] = 10] = "LoopingAmbient";
|
|
29
|
+
Channel[Channel["Animations"] = 11] = "Animations";
|
|
30
|
+
Channel[Channel["Constructions"] = 12] = "Constructions";
|
|
31
|
+
Channel[Channel["Birth"] = 13] = "Birth";
|
|
32
|
+
Channel[Channel["Fire"] = 14] = "Fire";
|
|
33
|
+
Channel[Channel["LegacyMidi"] = 15] = "LegacyMidi";
|
|
34
|
+
Channel[Channel["CinematicGeneral"] = 16] = "CinematicGeneral";
|
|
35
|
+
Channel[Channel["CinematicAmbient"] = 17] = "CinematicAmbient";
|
|
36
|
+
Channel[Channel["CinematicMusic"] = 18] = "CinematicMusic";
|
|
37
|
+
Channel[Channel["CinematicDialog"] = 19] = "CinematicDialog";
|
|
38
|
+
Channel[Channel["CinematicSFX1"] = 20] = "CinematicSFX1";
|
|
39
|
+
Channel[Channel["CinematicSFX2"] = 21] = "CinematicSFX2";
|
|
40
|
+
Channel[Channel["CinematicSFX3"] = 22] = "CinematicSFX3";
|
|
41
|
+
})(Channel || (Channel = {}));
|
|
42
|
+
const effectTypeLookup = {
|
|
43
|
+
[EffectType.Combat]: EffectType.Combat,
|
|
44
|
+
[EffectType.Default]: EffectType.Default,
|
|
45
|
+
[EffectType.Doodads]: EffectType.Doodads,
|
|
46
|
+
[EffectType.Drums]: EffectType.Drums,
|
|
47
|
+
[EffectType.HeroSpeech]: EffectType.HeroSpeech,
|
|
48
|
+
[EffectType.Missiles]: EffectType.Missiles,
|
|
49
|
+
[EffectType.Spells]: EffectType.Spells
|
|
50
|
+
};
|
|
51
|
+
const MYSTERY_NUM_1 = 1333788672;
|
|
52
|
+
const MYSTERY_NUM_2 = -1;
|
|
53
|
+
class SoundsTranslator extends CommonInterfaces_1.ITranslator {
|
|
7
54
|
static jsonToWar(soundsJson) {
|
|
55
|
+
var _a, _b;
|
|
8
56
|
const outBufferToWar = new HexBuffer_1.HexBuffer();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*/
|
|
17
|
-
soundsJson.forEach((sound) => {
|
|
18
|
-
outBufferToWar.addString(sound.name); // e.g. gg_snd_HumanGlueScreenLoop1
|
|
19
|
-
outBufferToWar.addString(sound.path); // e.g. Sound\Ambient\HumanGlueScreenLoop1.wav
|
|
20
|
-
// EAX effects enum (e.g. missiles, speech, etc)
|
|
21
|
-
/*
|
|
22
|
-
default = DefaultEAXON
|
|
23
|
-
combat = CombatSoundsEAX
|
|
24
|
-
drums = KotoDrumsEAX
|
|
25
|
-
spells = SpellsEAX
|
|
26
|
-
missiles = MissilesEAX
|
|
27
|
-
hero speech = HeroAcksEAX
|
|
28
|
-
doodads = DoodadsEAX
|
|
29
|
-
*/
|
|
30
|
-
outBufferToWar.addString(sound.eax || 'DefaultEAXON'); // defaults to "DefaultEAXON"
|
|
31
|
-
// Flags, if present (optional)
|
|
57
|
+
outBufferToWar.addInt(3);
|
|
58
|
+
outBufferToWar.addInt(soundsJson.length);
|
|
59
|
+
for (const sound of soundsJson) {
|
|
60
|
+
const isImportedSound = sound.path.startsWith('war3mapImported/');
|
|
61
|
+
outBufferToWar.addString('gg_snd_' + sound.variableName);
|
|
62
|
+
outBufferToWar.addString(sound.path);
|
|
63
|
+
outBufferToWar.addString(sound.effect || EffectType.Default);
|
|
32
64
|
let flags = 0;
|
|
33
65
|
if (sound.flags) {
|
|
34
66
|
if (sound.flags.looping)
|
|
@@ -39,84 +71,71 @@ class SoundsTranslator {
|
|
|
39
71
|
flags |= 0x4;
|
|
40
72
|
if (sound.flags.music)
|
|
41
73
|
flags |= 0x8;
|
|
74
|
+
if (sound.flags.imported)
|
|
75
|
+
flags |= 0x10;
|
|
42
76
|
}
|
|
43
77
|
outBufferToWar.addInt(flags);
|
|
44
|
-
|
|
45
|
-
outBufferToWar.addInt(
|
|
46
|
-
outBufferToWar.addInt(sound.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
outBufferToWar.addInt(sound.channel || 0); // default to 0
|
|
73
|
-
// Distance fields
|
|
74
|
-
outBufferToWar.addFloat(sound.distance.min);
|
|
75
|
-
outBufferToWar.addFloat(sound.distance.max);
|
|
76
|
-
outBufferToWar.addFloat(sound.distance.cutoff);
|
|
77
|
-
// More mystery numbers...
|
|
78
|
-
outBufferToWar.addFloat(0);
|
|
79
|
-
outBufferToWar.addFloat(0);
|
|
80
|
-
outBufferToWar.addFloat(127); // or -1?
|
|
81
|
-
outBufferToWar.addFloat(0);
|
|
82
|
-
outBufferToWar.addFloat(0);
|
|
83
|
-
outBufferToWar.addFloat(0);
|
|
84
|
-
outBufferToWar.addString(sound.variableName);
|
|
85
|
-
outBufferToWar.addString('');
|
|
78
|
+
outBufferToWar.addInt(((_a = sound.fadeRate) === null || _a === void 0 ? void 0 : _a.in) || 0);
|
|
79
|
+
outBufferToWar.addInt(((_b = sound.fadeRate) === null || _b === void 0 ? void 0 : _b.out) || 0);
|
|
80
|
+
outBufferToWar.addInt(sound.volume || 127);
|
|
81
|
+
if (isImportedSound || sound.pitch !== 1.0) {
|
|
82
|
+
outBufferToWar.addFloat(sound.pitch);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
outBufferToWar.addInt(MYSTERY_NUM_1);
|
|
86
|
+
}
|
|
87
|
+
if (sound.pitchVariance && sound.pitchVariance === 4294967296) {
|
|
88
|
+
outBufferToWar.addInt(MYSTERY_NUM_1);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
outBufferToWar.addFloat(sound.pitchVariance || 0);
|
|
92
|
+
}
|
|
93
|
+
outBufferToWar.addInt(sound.priority || 100);
|
|
94
|
+
outBufferToWar.addInt(sound.channel || Channel.General);
|
|
95
|
+
outBufferToWar.addInt(sound.distance.min);
|
|
96
|
+
outBufferToWar.addInt(sound.distance.max);
|
|
97
|
+
outBufferToWar.addInt(sound.distance.cutoff);
|
|
98
|
+
outBufferToWar.addInt(isImportedSound ? 0 : MYSTERY_NUM_1);
|
|
99
|
+
outBufferToWar.addInt(isImportedSound ? 0 : MYSTERY_NUM_1);
|
|
100
|
+
outBufferToWar.addInt(isImportedSound ? 127 : MYSTERY_NUM_2);
|
|
101
|
+
outBufferToWar.addInt(isImportedSound ? 0 : MYSTERY_NUM_1);
|
|
102
|
+
outBufferToWar.addInt(isImportedSound ? 0 : MYSTERY_NUM_1);
|
|
103
|
+
outBufferToWar.addInt(isImportedSound ? 0 : MYSTERY_NUM_1);
|
|
104
|
+
outBufferToWar.addString('gg_snd_' + sound.variableName);
|
|
105
|
+
outBufferToWar.addString(sound.internalName);
|
|
86
106
|
outBufferToWar.addString(sound.path);
|
|
87
|
-
|
|
88
|
-
outBufferToWar.addFloat(0);
|
|
107
|
+
outBufferToWar.addInt(MYSTERY_NUM_2);
|
|
89
108
|
outBufferToWar.addByte(0);
|
|
90
|
-
outBufferToWar.
|
|
91
|
-
outBufferToWar.
|
|
92
|
-
outBufferToWar.
|
|
109
|
+
outBufferToWar.addInt(MYSTERY_NUM_2);
|
|
110
|
+
outBufferToWar.addInt(0);
|
|
111
|
+
outBufferToWar.addInt(0);
|
|
93
112
|
outBufferToWar.addByte(0);
|
|
94
|
-
outBufferToWar.
|
|
95
|
-
}
|
|
113
|
+
outBufferToWar.addInt(1);
|
|
114
|
+
}
|
|
96
115
|
return {
|
|
97
|
-
errors: [],
|
|
98
116
|
buffer: outBufferToWar.getBuffer()
|
|
99
117
|
};
|
|
100
118
|
}
|
|
101
119
|
static warToJson(buffer) {
|
|
102
120
|
const result = [];
|
|
103
121
|
const outBufferToJSON = new W3Buffer_1.W3Buffer(buffer);
|
|
104
|
-
|
|
105
|
-
numSounds = outBufferToJSON.readInt();
|
|
122
|
+
(0, CommonInterfaces_1.expectVersion)(3, outBufferToJSON.readInt());
|
|
123
|
+
const numSounds = outBufferToJSON.readInt();
|
|
106
124
|
for (let i = 0; i < numSounds; i++) {
|
|
107
125
|
const sound = {
|
|
108
|
-
name: '',
|
|
109
126
|
variableName: '',
|
|
127
|
+
internalName: '',
|
|
110
128
|
path: '',
|
|
111
|
-
eax: '',
|
|
112
129
|
volume: 0,
|
|
113
130
|
pitch: 0,
|
|
114
|
-
|
|
131
|
+
pitchVariance: 0,
|
|
132
|
+
priority: 100,
|
|
115
133
|
flags: {
|
|
116
|
-
|
|
134
|
+
looping: true,
|
|
117
135
|
'3dSound': true,
|
|
118
|
-
|
|
119
|
-
|
|
136
|
+
stopOutOfRange: true,
|
|
137
|
+
music: true,
|
|
138
|
+
imported: false
|
|
120
139
|
},
|
|
121
140
|
fadeRate: {
|
|
122
141
|
in: 0,
|
|
@@ -128,41 +147,40 @@ class SoundsTranslator {
|
|
|
128
147
|
cutoff: 0
|
|
129
148
|
}
|
|
130
149
|
};
|
|
131
|
-
sound.
|
|
150
|
+
sound.variableName = outBufferToJSON.readString().replace('gg_snd_', '');
|
|
132
151
|
sound.path = outBufferToJSON.readString();
|
|
133
|
-
sound.
|
|
152
|
+
sound.effect = effectTypeLookup[outBufferToJSON.readString()];
|
|
134
153
|
const flags = outBufferToJSON.readInt();
|
|
135
154
|
sound.flags = {
|
|
136
|
-
|
|
137
|
-
'3dSound': !!(flags &
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
looping: !!(flags & 0x1),
|
|
156
|
+
'3dSound': !!(flags & 0x2),
|
|
157
|
+
stopOutOfRange: !!(flags & 0x4),
|
|
158
|
+
music: !!(flags & 0x8),
|
|
159
|
+
imported: !!(flags & 0x10)
|
|
140
160
|
};
|
|
141
161
|
sound.fadeRate = {
|
|
142
162
|
in: outBufferToJSON.readInt(),
|
|
143
163
|
out: outBufferToJSON.readInt()
|
|
144
164
|
};
|
|
145
165
|
sound.volume = outBufferToJSON.readInt();
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
outBufferToJSON.readFloat();
|
|
149
|
-
outBufferToJSON.readInt();
|
|
166
|
+
const pitch = outBufferToJSON.readFloat();
|
|
167
|
+
sound.pitch = pitch === 4294967296 ? 1.0 : pitch;
|
|
168
|
+
sound.pitchVariance = outBufferToJSON.readFloat();
|
|
169
|
+
sound.priority = outBufferToJSON.readInt();
|
|
150
170
|
sound.channel = outBufferToJSON.readInt();
|
|
151
171
|
sound.distance = {
|
|
152
|
-
min: outBufferToJSON.
|
|
153
|
-
max: outBufferToJSON.
|
|
154
|
-
cutoff: outBufferToJSON.
|
|
172
|
+
min: outBufferToJSON.readInt(),
|
|
173
|
+
max: outBufferToJSON.readInt(),
|
|
174
|
+
cutoff: outBufferToJSON.readInt()
|
|
155
175
|
};
|
|
156
|
-
|
|
157
|
-
outBufferToJSON.
|
|
158
|
-
outBufferToJSON.
|
|
159
|
-
outBufferToJSON.
|
|
160
|
-
outBufferToJSON.
|
|
161
|
-
outBufferToJSON.
|
|
162
|
-
outBufferToJSON.readFloat();
|
|
163
|
-
sound.variableName = outBufferToJSON.readString();
|
|
164
|
-
// Unknown values
|
|
176
|
+
outBufferToJSON.readInt();
|
|
177
|
+
outBufferToJSON.readInt();
|
|
178
|
+
outBufferToJSON.readInt();
|
|
179
|
+
outBufferToJSON.readInt();
|
|
180
|
+
outBufferToJSON.readInt();
|
|
181
|
+
outBufferToJSON.readInt();
|
|
165
182
|
outBufferToJSON.readString();
|
|
183
|
+
sound.internalName = outBufferToJSON.readString();
|
|
166
184
|
outBufferToJSON.readString();
|
|
167
185
|
outBufferToJSON.readChars(4);
|
|
168
186
|
outBufferToJSON.readChars(1);
|
|
@@ -170,14 +188,15 @@ class SoundsTranslator {
|
|
|
170
188
|
outBufferToJSON.readChars(4);
|
|
171
189
|
outBufferToJSON.readChars(4);
|
|
172
190
|
outBufferToJSON.readChars(1);
|
|
173
|
-
outBufferToJSON.
|
|
191
|
+
outBufferToJSON.readInt();
|
|
174
192
|
result.push(sound);
|
|
175
193
|
}
|
|
176
194
|
return {
|
|
177
|
-
errors: [],
|
|
178
195
|
json: result
|
|
179
196
|
};
|
|
180
197
|
}
|
|
181
198
|
}
|
|
182
|
-
exports.
|
|
199
|
+
exports.default = SoundsTranslator;
|
|
200
|
+
SoundsTranslator.EffectType = EffectType;
|
|
201
|
+
SoundsTranslator.Channel = Channel;
|
|
183
202
|
//# sourceMappingURL=SoundsTranslator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoundsTranslator.js","sourceRoot":"","sources":["../../../src/translators/SoundsTranslator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SoundsTranslator.js","sourceRoot":"","sources":["../../../src/translators/SoundsTranslator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { WarResult, JsonResult, ITranslator } from '../CommonInterfaces';
|
|
4
|
+
interface StringRecord {
|
|
5
|
+
comment?: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
export default abstract class StringsTranslator extends ITranslator {
|
|
9
|
+
static jsonToWar(stringsJson: Record<string, StringRecord>): WarResult;
|
|
10
|
+
static warToJson(buffer: Buffer): JsonResult<Record<string, StringRecord>>;
|
|
6
11
|
}
|
|
12
|
+
export {};
|
|
7
13
|
//# sourceMappingURL=StringsTranslator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StringsTranslator.d.ts","sourceRoot":"","sources":["../../../src/translators/StringsTranslator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StringsTranslator.d.ts","sourceRoot":"","sources":["../../../src/translators/StringsTranslator.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEzE,UAAU,YAAY;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,iBAAkB,SAAQ,WAAW;WACjD,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,SAAS;WA4B/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAcpF"}
|
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StringsTranslator = void 0;
|
|
4
3
|
const HexBuffer_1 = require("../HexBuffer");
|
|
5
|
-
|
|
4
|
+
const CommonInterfaces_1 = require("../CommonInterfaces");
|
|
5
|
+
const matchStringDefinitionBlock = /STRING ([0-9]+)\r?\n?(\/\/.*\r?\n?)?{\r?\n((?:.|\r?\n)*?)\r?\n}/g;
|
|
6
|
+
class StringsTranslator extends CommonInterfaces_1.ITranslator {
|
|
6
7
|
static jsonToWar(stringsJson) {
|
|
7
8
|
const outBufferToWar = new HexBuffer_1.HexBuffer();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Object.keys(stringsJson).forEach((key) => {
|
|
12
|
-
outBufferToWar.addChars('STRING ' + key);
|
|
9
|
+
for (const stringId of Object.keys(stringsJson)) {
|
|
10
|
+
const w3String = stringsJson[stringId];
|
|
11
|
+
outBufferToWar.addChars('STRING ' + stringId);
|
|
13
12
|
outBufferToWar.addNewLine();
|
|
13
|
+
if (w3String.comment) {
|
|
14
|
+
outBufferToWar.addChars(w3String.comment);
|
|
15
|
+
}
|
|
14
16
|
outBufferToWar.addChars('{');
|
|
15
17
|
outBufferToWar.addNewLine();
|
|
16
|
-
outBufferToWar.addChars(
|
|
18
|
+
outBufferToWar.addChars(w3String.value);
|
|
17
19
|
outBufferToWar.addNewLine();
|
|
18
20
|
outBufferToWar.addChars('}');
|
|
19
21
|
outBufferToWar.addNewLine();
|
|
20
22
|
outBufferToWar.addNewLine();
|
|
21
|
-
}
|
|
23
|
+
}
|
|
22
24
|
return {
|
|
23
|
-
errors: [],
|
|
24
25
|
buffer: outBufferToWar.getBuffer()
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
static warToJson(buffer) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
result[num] = body;
|
|
29
|
+
const result = {};
|
|
30
|
+
let match;
|
|
31
|
+
while ((match = matchStringDefinitionBlock.exec(buffer.toString('utf8'))) !== null) {
|
|
32
|
+
const [, num, comment, value] = match;
|
|
33
|
+
result[num] = { value };
|
|
34
|
+
if (comment)
|
|
35
|
+
result[num].comment = comment;
|
|
36
36
|
}
|
|
37
37
|
return {
|
|
38
|
-
errors: [],
|
|
39
38
|
json: result
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
|
-
exports.
|
|
42
|
+
exports.default = StringsTranslator;
|
|
44
43
|
//# sourceMappingURL=StringsTranslator.js.map
|