wc3maptranslator 4.0.1 → 4.0.3

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 (117) hide show
  1. package/dist/src/AngleConverter.d.ts +3 -0
  2. package/dist/src/AngleConverter.d.ts.map +1 -0
  3. package/dist/src/AngleConverter.js +12 -0
  4. package/dist/src/AngleConverter.js.map +1 -0
  5. package/dist/src/CommonInterfaces.d.ts +17 -0
  6. package/dist/src/CommonInterfaces.d.ts.map +1 -0
  7. package/dist/src/CommonInterfaces.js +3 -0
  8. package/dist/src/CommonInterfaces.js.map +1 -0
  9. package/dist/src/HexBuffer.d.ts +15 -0
  10. package/dist/src/HexBuffer.d.ts.map +1 -0
  11. package/{lib/HexBuffer.ts → dist/src/HexBuffer.js} +32 -42
  12. package/dist/src/HexBuffer.js.map +1 -0
  13. package/dist/src/W3Buffer.d.ts +14 -0
  14. package/dist/src/W3Buffer.d.ts.map +1 -0
  15. package/{lib/W3Buffer.ts → dist/src/W3Buffer.js} +25 -31
  16. package/dist/src/W3Buffer.js.map +1 -0
  17. package/dist/src/index.d.ts +3 -0
  18. package/dist/src/index.d.ts.map +1 -0
  19. package/{index.js → dist/src/index.js} +1 -1
  20. package/dist/src/index.js.map +1 -0
  21. package/dist/src/translators/CamerasTranslator.d.ts +23 -0
  22. package/dist/src/translators/CamerasTranslator.d.ts.map +1 -0
  23. package/{lib/translators/CamerasTranslator.ts → dist/src/translators/CamerasTranslator.js} +14 -39
  24. package/dist/src/translators/CamerasTranslator.js.map +1 -0
  25. package/dist/src/translators/DoodadsTranslator.d.ts +23 -0
  26. package/dist/src/translators/DoodadsTranslator.d.ts.map +1 -0
  27. package/{lib/translators/DoodadsTranslator.ts → dist/src/translators/DoodadsTranslator.js} +33 -65
  28. package/dist/src/translators/DoodadsTranslator.js.map +1 -0
  29. package/dist/src/translators/ImportsTranslator.d.ts +16 -0
  30. package/dist/src/translators/ImportsTranslator.d.ts.map +1 -0
  31. package/{lib/translators/ImportsTranslator.ts → dist/src/translators/ImportsTranslator.js} +21 -37
  32. package/dist/src/translators/ImportsTranslator.js.map +1 -0
  33. package/dist/src/translators/InfoTranslator.d.ts +124 -0
  34. package/dist/src/translators/InfoTranslator.d.ts.map +1 -0
  35. package/{lib/translators/InfoTranslator.ts → dist/src/translators/InfoTranslator.js} +108 -270
  36. package/dist/src/translators/InfoTranslator.js.map +1 -0
  37. package/dist/src/translators/ObjectsTranslator.d.ts +23 -0
  38. package/dist/src/translators/ObjectsTranslator.d.ts.map +1 -0
  39. package/{lib/translators/ObjectsTranslator.ts → dist/src/translators/ObjectsTranslator.js} +91 -125
  40. package/dist/src/translators/ObjectsTranslator.js.map +1 -0
  41. package/dist/src/translators/RegionsTranslator.d.ts +22 -0
  42. package/dist/src/translators/RegionsTranslator.d.ts.map +1 -0
  43. package/{lib/translators/RegionsTranslator.ts → dist/src/translators/RegionsTranslator.js} +18 -45
  44. package/dist/src/translators/RegionsTranslator.js.map +1 -0
  45. package/dist/src/translators/SoundsTranslator.d.ts +35 -0
  46. package/dist/src/translators/SoundsTranslator.d.ts.map +1 -0
  47. package/{lib/translators/SoundsTranslator.ts → dist/src/translators/SoundsTranslator.js} +30 -84
  48. package/dist/src/translators/SoundsTranslator.js.map +1 -0
  49. package/dist/src/translators/StringsTranslator.d.ts +7 -0
  50. package/dist/src/translators/StringsTranslator.d.ts.map +1 -0
  51. package/{lib/translators/StringsTranslator.ts → dist/src/translators/StringsTranslator.js} +12 -17
  52. package/dist/src/translators/StringsTranslator.js.map +1 -0
  53. package/dist/src/translators/TerrainTranslator.d.ts +33 -0
  54. package/dist/src/translators/TerrainTranslator.d.ts.map +1 -0
  55. package/{lib/translators/TerrainTranslator.ts → dist/src/translators/TerrainTranslator.js} +29 -84
  56. package/dist/src/translators/TerrainTranslator.js.map +1 -0
  57. package/dist/src/translators/UnitsTranslator.d.ts +40 -0
  58. package/dist/src/translators/UnitsTranslator.d.ts.map +1 -0
  59. package/{lib/translators/UnitsTranslator.ts → dist/src/translators/UnitsTranslator.js} +33 -95
  60. package/dist/src/translators/UnitsTranslator.js.map +1 -0
  61. package/{lib/translators/index.ts → dist/src/translators/index.d.ts} +1 -0
  62. package/dist/src/translators/index.d.ts.map +1 -0
  63. package/dist/src/translators/index.js +23 -0
  64. package/dist/src/translators/index.js.map +1 -0
  65. package/package.json +5 -4
  66. package/.codeclimate.yml +0 -12
  67. package/.editorconfig +0 -8
  68. package/.eslintignore +0 -5
  69. package/.eslintrc +0 -55
  70. package/.github/workflows/codeql-analysis.yml +0 -54
  71. package/.nycrc +0 -18
  72. package/.travis.yml +0 -23
  73. package/CHANGELOG.md +0 -78
  74. package/index.ts +0 -14
  75. package/lib/AngleConverter.ts +0 -7
  76. package/lib/CommonInterfaces.ts +0 -22
  77. package/test/.mocharc.json +0 -4
  78. package/test/AngleConverterTest.ts +0 -18
  79. package/test/HexBufferTest.ts +0 -170
  80. package/test/TranslatorReversion.ts +0 -218
  81. package/test/W3BufferTest.ts +0 -50
  82. package/test/data/cameras.json +0 -16
  83. package/test/data/doodads.json +0 -2730
  84. package/test/data/imports.json +0 -386
  85. package/test/data/info.json +0 -250
  86. package/test/data/obj-abilities.json +0 -4892
  87. package/test/data/obj-buffs.json +0 -38
  88. package/test/data/obj-destructables.json +0 -31
  89. package/test/data/obj-doodads.json +0 -38
  90. package/test/data/obj-items.json +0 -31
  91. package/test/data/obj-units.json +0 -40
  92. package/test/data/obj-upgrades.json +0 -38
  93. package/test/data/regions.json +0 -206
  94. package/test/data/sounds.json +0 -50
  95. package/test/data/strings.json +0 -115
  96. package/test/data/terrain.json +0 -1
  97. package/test/data/units.json +0 -452
  98. package/test/data/war3map.doo +0 -0
  99. package/test/data/war3map.imp +0 -0
  100. package/test/data/war3map.j +0 -3442
  101. package/test/data/war3map.shd +0 -0
  102. package/test/data/war3map.w3a +0 -0
  103. package/test/data/war3map.w3b +0 -0
  104. package/test/data/war3map.w3c +0 -0
  105. package/test/data/war3map.w3d +0 -0
  106. package/test/data/war3map.w3e +0 -0
  107. package/test/data/war3map.w3h +0 -0
  108. package/test/data/war3map.w3i +0 -0
  109. package/test/data/war3map.w3q +0 -0
  110. package/test/data/war3map.w3r +0 -0
  111. package/test/data/war3map.w3s +0 -0
  112. package/test/data/war3map.w3t +0 -0
  113. package/test/data/war3map.w3u +0 -0
  114. package/test/data/war3map.wts +0 -631
  115. package/test/data/war3mapUnits.doo +0 -0
  116. package/tsconfig.json +0 -25
  117. package/tslint.json +0 -47
package/CHANGELOG.md DELETED
@@ -1,78 +0,0 @@
1
- # 4.0.1 (2023-08-06)
2
- ## SUMMARY
3
- ## FIXES
4
- * Project properly builds all TS files upon installation, resolving out-of-the-box errors
5
-
6
- # 4.0.0 (2021-02-28)
7
- ## SUMMARY
8
- **🔥 Breaking changes**
9
-
10
- This major release significantly overhauls WC3MapTranslator since the release of WarCraft III: Reforged. There are a few breaking changes in this release.
11
-
12
- The two largest changes include a new usage contract and changes to the terrain `.json` format, both of which are detailed below. This release also integrates the latest file formats, after a few changes to the war3map formats to support Reforged.
13
-
14
- The old usage contract meant that developers had to instantiate translators, which didn't make much sense. Now translators are static classes that can be used directly after importing.
15
-
16
- The `.json` format for terrain gets rid of the bulky `tile` objects and returns to a one-dimensional mask array for things like ground height, boundary flags, etc. In an older version of WC3MapTranslator, terrain used to be a multi-dimensional array of rows, followed by the `tile` object format. The problems with the `tile` object format were two-fold: (1) file size would blow up (e.g. a 29kB `.w3e` file would become a 1199kB `.json` terrain file); and (2) the bulky `tile` objects did not lend themselves to the spirit of having a diff-able JSON file. We believe that a single-dimensional array will allow developers to more easily see differences between JSONs.
17
-
18
- Another exciting change is a new [WC3MapSpecification](https://github.com/ChiefOfGxBxL/WC3MapSpecification) repository for documenting the war3map specifications. This is a living document, meaning it may be updated in-place as our understanding of the file formats improves!
19
-
20
- ## FEATURES
21
- * 🔥 Improve usage contract:
22
- * Translators are now exported by this library (e.g. `import { ObjectTranslator } from 'wc3maptranslator'`)
23
- * Translators no longer need to be instantiated to be used
24
- * 🔥 Change terrain format:
25
- * Tiles are now defined via "masks", for ground height, texture, variation, etc.
26
- * Before: `tiles` is an array of objects... `{ groundHeight, waterHeight, boundaryFlag, flags, groundTexture, groundVariation, cliffVariation, cliffTexture, layerHeight }`
27
- * After: a one-dimensional array for each of the above fields... e.g. for a 64x64 map, `groundHeight` is an array of 65*65=4225 tile points
28
- * Some fields have been renamed into camelCase for consistency:
29
- * `customtileset` -> `customTileset`
30
- * `tilepalette` -> `tilePalette`
31
- * `clifftilepalette` -> `cliffTilePalette`
32
- * Upgrade to latest file formats
33
- * Sounds version upgraded from `1` -> `3`
34
- * Info version upgraded from `25` -> `31`
35
- * Add more type safety:
36
- * Translator results from `jsonToWar()` and `warToJson()` are now typed by `WarResult` and `JsonResult`, respectively
37
- * `JsonResult` is generically typed to describe what it contains (e.g. `Sound[]`)
38
- * Introduced new `angle` type, which is an alias for `number`; `angle`'s should always be specified in degrees, not radians
39
- ## FIXES
40
- * Resolve `[DEP0005] DeprecationWarning: Buffer()` warning in `HexBuffer.ts`
41
- * Fix scoping issues on `*Translator.ts`, `HexBuffer.ts` and `W3Buffer.ts` where certain fields that should be `private` were marked as `public`
42
- * Fix InfoTranslator reading random item table ID length as 1 instead of 4
43
- * Fix potential null-terminator errors related to string or character-array fields
44
- ## MAINTENANCE
45
- * Upgrade to Node 14.x LTS
46
- * Upgrade to npm 7.x
47
- * Upgrade `round-to` 4.1.0 -> 5.0.0
48
- * Upgrade `@types/fs-extra` 8.1.0 -> 9.0.7
49
- * Upgrade `@types/mocha` 7.0.1 -> 8.2.1
50
- * Upgrade `@types/node` 12.12.28 -> 14.14.31
51
- * Upgrade `fs-extra` 8.1.0 -> 9.1.0
52
- * Upgrade `mocha` 7.0.1 -> 8.3.0
53
- * Upgrade `nyc` 15.0.0 -> 15.1.0
54
- * Upgrade `ts-node` 8.6.2 -> 9.1.1
55
- * Upgrade `tslint` 6.0.0 -> 6.1.3
56
- * Upgrade `typescript` 3.8.2 -> 4.2.2
57
- * The project structure has changed:
58
- * `examples` sub-project directory is removed
59
- * Refer to `USAGE.md` for how to use the code
60
- * Add all contributors to `package.json`
61
- * Resolve all security issues via `npm audit fix` (5 low, 1 high, 1 critical)
62
- ## TESTING
63
- * Travis CI will now use Node 14 LTS to build the project
64
- * `test` directory now contains the WC3 and JSON data files the tests require
65
- * Implement the StringsTranslator test
66
- * Resolve all broken unit tests, most of them being reversion tests
67
- <!--
68
- # x.y.z (YYYY-MM-DD)
69
- ## SUMMARY
70
- **🔥 Breaking changes**
71
- ## FEATURES
72
- ## FIXES
73
- ## MAINTENANCE
74
- ## TESTING
75
- -->
76
-
77
- # Previous versions
78
- The `CHANGELOG.md` file was introduced with the 4.x release. For details on previous changes, please refer to https://github.com/ChiefOfGxBxL/WC3MapTranslator/releases.
package/index.ts DELETED
@@ -1,14 +0,0 @@
1
- import { CamerasTranslator, DoodadsTranslator, ImportsTranslator, InfoTranslator, ObjectsTranslator, RegionsTranslator, SoundsTranslator, StringsTranslator, TerrainTranslator, UnitsTranslator } from './lib/translators';
2
-
3
- export {
4
- CamerasTranslator,
5
- DoodadsTranslator,
6
- ImportsTranslator,
7
- InfoTranslator,
8
- ObjectsTranslator,
9
- RegionsTranslator,
10
- SoundsTranslator,
11
- StringsTranslator,
12
- TerrainTranslator,
13
- UnitsTranslator
14
- };
@@ -1,7 +0,0 @@
1
- export function deg2Rad(angleInDegrees: number): number {
2
- return angleInDegrees * Math.PI / 180;
3
- }
4
-
5
- export function rad2Deg(angleInRadians: number): number {
6
- return angleInRadians * 180 / Math.PI;
7
- }
@@ -1,22 +0,0 @@
1
- /**
2
- * @type angle - An angle is measured in degrees, 0 <= angle < 360
3
- */
4
- export type angle = number;
5
-
6
- // TranslationError is reserved for future use in case
7
- // additional constraints are added to translated output,
8
- // like if WC3 has maximum string lengths, or if certain
9
- // values must be in a specific range
10
- export interface TranslationError {
11
- message: string
12
- }
13
-
14
- export interface WarResult {
15
- buffer: Buffer,
16
- errors?: TranslationError[]
17
- }
18
-
19
- export interface JsonResult<T = object> {
20
- json: T,
21
- errors?: TranslationError[]
22
- }
@@ -1,4 +0,0 @@
1
- {
2
- "recursive": true,
3
- "require": ["ts-node/register", "source-map-support/register"]
4
- }
@@ -1,18 +0,0 @@
1
- import assert from 'assert';
2
- import { deg2Rad, rad2Deg } from '../lib/AngleConverter';
3
-
4
- describe('AngleConverter', () => {
5
-
6
- it('should convert degrees to radians', () => {
7
- const angleInDegrees = 90;
8
- const convertedToRadians = deg2Rad(angleInDegrees);
9
- assert.equal(convertedToRadians, Math.PI / 2);
10
- });
11
-
12
- it('should convert radians to degrees', () => {
13
- const angleInRadians = Math.PI;
14
- const convertedToDegrees = rad2Deg(angleInRadians);
15
- assert.equal(convertedToDegrees, 180);
16
- });
17
-
18
- });
@@ -1,170 +0,0 @@
1
- import assert from 'assert';
2
- import { HexBuffer } from '../lib/HexBuffer';
3
-
4
- let hexBuffer: HexBuffer;
5
-
6
- describe('HexBuffer', () => {
7
-
8
- beforeEach(() => {
9
- // clear the buffer before each test in this block so we
10
- // don't have to care about what we added in prior tests
11
- hexBuffer = new HexBuffer();
12
- });
13
-
14
- it('should addString', () => {
15
- const testWords = [
16
- 'Hallo, wêreld!', // Afrikaans
17
- 'Pershëndetje Botë', // Albanian
18
- 'أهلاً بالعالم', // Arabic
19
- 'Բարե՛ւ, աշխարհ։', // Armenian
20
- 'Salam Dünya', // Azeri
21
- 'Ahoj Světe!', // Czech
22
- 'Kaixo mundua!', // Basque/Euskara
23
- 'Прывітанне свет', // Belarusian
24
- 'Shani Mwechalo!', // Bemba
25
- 'Shagatam Prithivi!', // Bengali
26
- 'Zdravo Svijete!', // Bosnian
27
- 'Здравей, свят!', // Bulgarian
28
- 'ជំរាបសួរ ពិភពលោក', // Cambodian
29
- 'Hola món!', // Catalan
30
- '你好世界', // Chinese
31
- 'ᎣᏏᏲ ᎡᎶᎯ', // Cherokee
32
- 'Klahowya Hayas Klaska', // Chinook Wawa
33
- 'Bok Svijete!', // Croatian
34
- 'Hej, Verden!', // Danish
35
- 'Hallo, wereld!', // Dutch
36
- 'Hello World!', // English
37
- 'Saluton mondo!', // Esperanto
38
- 'Tere maailm!', // Estonian
39
- 'Hei maailma!', // Finnish
40
- 'Salut le Monde!', // French
41
- 'Hallo, wrâld!', // Frisian
42
- 'Ola mundo!', // Galician
43
- 'Hallo Welt!', // German
44
- 'Γεια σου κόσμε!', // Greek
45
- 'Aloha Honua', // Hawaiian
46
- 'שלום עולם', // Hebrew
47
- 'नमस्ते दुनिया', // Hindi
48
- 'Nyob zoo ntiaj teb.', // Hmong
49
- 'Helló világ!', // Hungarian
50
- 'Halló heimur!', // Icelandic
51
- 'Ndewo Ụwa', // Igbo
52
- 'Halo Dunia!', // Indonesian
53
- 'Dia dhaoibh, a dhomhain!', // Irish
54
- 'Ciao Mondo!', // Italian
55
- 'こんにちは、 世界!', // Japanese
56
- 'ಹಲೋ ವರ್ಲ್ಡ್', // Kannada
57
- 'Habari dunia!', // Kiswahili
58
- 'Niatia thi!', // Kikuyu
59
- 'nuqneH', // Klingon
60
- '반갑다 세상아', // Korean
61
- 'ສະບາຍດີ,ໂລກ', // Lao
62
- 'AVE MVNDE', // Latin
63
- 'Sveika, Pasaule!', // Latvian
64
- 'Sveikas, Pasauli', // Lithuanian
65
- 'coi li terdi', // Lojban
66
- 'Moien Welt!', // Luxembourgish
67
- 'Manao ahoana ry tany!', // Malagasy
68
- 'Namaskaram, lokame', // Malayalam
69
- 'Merhba lid-dinja', // Maltese
70
- 'Hallo verden!', // Norwegian
71
- '!سلام دنیا', // Persian
72
- 'Witaj świecie!', // Polish
73
- 'Olá, mundo!', // Portuguese
74
- 'ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ', // Punjabi
75
- 'Salut lume!', // Romanian
76
- 'Здравствуй, мир!', // Russian
77
- 'Halò, a Shaoghail!', // Scots Gaelic
78
- 'Zdravo Svete!', // Serbian
79
- 'Ahoj, svet!', // Slovak
80
- 'Pozdravljen svet!', // Slovenian
81
- '¡Hola mundo!', // Spanish
82
- 'Hallå världen!', // Swedish
83
- 'Kamusta mundo!', // Tagalog
84
- 'ஹலோ உலகம்', // Tamil
85
- 'హలో వరల్డ్', // Telugu
86
- 'สวัสดีโลก!', // Thai
87
- 'Merhaba Dünya!', // Turkish
88
- 'Привiт, свiте!', // Ukrainian
89
- 'ہیلو دنیا والو', // Urdu
90
- 'Xin chào thế giới', // Vietnamese
91
- 'S\'mae byd!', // Welsh
92
- 'העלא וועלט', // Yiddish
93
- 'Sawubona Mhlaba' // Zulu
94
- ];
95
-
96
- let totalLength = 0;
97
- // tslint:disable-next-line: forin
98
- for (const word of testWords) {
99
- const bufLength = Buffer.from(word).length;
100
- hexBuffer.addString(word);
101
- totalLength += bufLength + 1; // adding one accounts for the null terminator at the end of the string
102
- const bufferLength = hexBuffer.getBuffer().length;
103
- assert.equal(bufferLength, totalLength);
104
- }
105
- });
106
-
107
- it('should addNewLine', () => {
108
- hexBuffer.addNewLine();
109
- assert.equal(hexBuffer.getBuffer().length, 2);
110
- assert.equal(hexBuffer.getBuffer()[0], 0x0d);
111
- assert.equal(hexBuffer.getBuffer()[1], 0x0a);
112
- });
113
-
114
- it('should addChar', () => {
115
- hexBuffer.addChar('A');
116
- assert.equal(hexBuffer.getBuffer().length, 1);
117
- assert.equal(hexBuffer.getBuffer()[0], 65); // charcode for the ASCII letter "A"
118
- });
119
-
120
- it('should addChars', () => {
121
- hexBuffer.addChars('ABCD');
122
- assert.equal(hexBuffer.getBuffer().length, 4);
123
- assert.equal(hexBuffer.getBuffer()[0], 65); // charcode for the ASCII letter "A"
124
- assert.equal(hexBuffer.getBuffer()[1], 66); // charcode for the ASCII letter "B"
125
- assert.equal(hexBuffer.getBuffer()[2], 67); // charcode for the ASCII letter "C"
126
- assert.equal(hexBuffer.getBuffer()[3], 68); // charcode for the ASCII letter "D"
127
- });
128
-
129
- it('should addInt', () => {
130
- hexBuffer.addInt(0);
131
- assert.equal(hexBuffer.getBuffer().length, 4); // integer is 4 bytes in length
132
- assert.equal(hexBuffer.getBuffer()[0], 0x00);
133
- assert.equal(hexBuffer.getBuffer()[1], 0x00);
134
- assert.equal(hexBuffer.getBuffer()[2], 0x00);
135
- assert.equal(hexBuffer.getBuffer()[3], 0x00);
136
- });
137
-
138
- it('should addShort', () => {
139
- hexBuffer.addShort(14);
140
- assert.equal(hexBuffer.getBuffer().length, 2); // 2 bytes in length
141
- assert.equal(hexBuffer.getBuffer()[0], 0x0e);
142
- assert.equal(hexBuffer.getBuffer()[1], 0x00);
143
- });
144
-
145
- it('should addFloat', () => {
146
- hexBuffer.addFloat(1.234);
147
- assert.equal(hexBuffer.getBuffer().length, 4); // 4 bytes in length
148
- assert.equal(hexBuffer.getBuffer()[0], 0xb6);
149
- assert.equal(hexBuffer.getBuffer()[1], 0xf3);
150
- assert.equal(hexBuffer.getBuffer()[2], 0x9d);
151
- assert.equal(hexBuffer.getBuffer()[3], 0x3f);
152
- });
153
-
154
- it('should addByte', () => {
155
- hexBuffer.addByte(15);
156
- assert.equal(hexBuffer.getBuffer()[0], 15);
157
- });
158
-
159
- it('should addNullTerminator', () => {
160
- hexBuffer.addNullTerminator();
161
- assert.equal(hexBuffer.getBuffer().length, 1);
162
- assert.equal(hexBuffer.getBuffer()[0], 0);
163
- });
164
-
165
- it('should getBuffer', () => {
166
- hexBuffer.addString('');
167
- assert(hexBuffer.getBuffer()); // test if this function works
168
- });
169
-
170
- });
@@ -1,218 +0,0 @@
1
- import assert from 'assert';
2
- import * as diff from 'diff-buf';
3
- import * as fs from 'fs-extra';
4
- import * as Path from 'path';
5
-
6
- import * as Translator from '../index';
7
-
8
- const ObjectType = Translator.ObjectsTranslator.ObjectType;
9
- const war3mapDir = Path.resolve('test/data');
10
- const outputDir = Path.resolve('test/.output');
11
-
12
- function readWar3MapBuffer(filename: string) {
13
- return fs.readFileSync(Path.join(war3mapDir, filename));
14
- }
15
-
16
- function readJsonTestFile(filename: string) {
17
- return fs.readJsonSync(Path.join(war3mapDir, filename));
18
- }
19
-
20
- function writeJsonTestFile(filename: string, json: object) {
21
- return fs.writeJsonSync(Path.join(outputDir, filename), json);
22
- }
23
-
24
- function buffersAreEqual(b1: Buffer, b2: Buffer) {
25
- const comparison = diff.default(b1, b2, { string: false });
26
-
27
- // Library `diff` returns an array of objects documenting comparison
28
- // e.g. { added: undefined, removed: undefined, value: 10 }
29
- // We want all `added` and `removed` fields to be "undefined" for
30
- // the buffers to be considered equal
31
- let buffersEqual = true;
32
- comparison.forEach((compare) => {
33
- if (compare.added || compare.removed) {
34
- buffersEqual = false;
35
- }
36
- });
37
-
38
- return buffersEqual;
39
- }
40
-
41
- // Ensures that when a JSON file is converted to war3map and back again,
42
- // the two JSON files are the same; converting between the two data formats
43
- // must yield the original results back (except for some differences in rounding)
44
- describe('Reversion: json -> war -> json', () => {
45
-
46
- before(() => {
47
- fs.emptyDirSync(outputDir);
48
- fs.ensureDirSync(outputDir);
49
- });
50
-
51
- it('Doodads reversion', () => {
52
- const originalJson = readJsonTestFile('doodads.json');
53
- const translatedBuffer = Translator.DoodadsTranslator.jsonToWar(originalJson).buffer;
54
- const translatedJson = Translator.DoodadsTranslator.warToJson(translatedBuffer).json;
55
-
56
- writeJsonTestFile('doodads.json', translatedJson);
57
-
58
- assert.deepStrictEqual(originalJson, translatedJson);
59
- });
60
-
61
- it('Strings reversion', () => {
62
- const originalJson = readJsonTestFile('strings.json');
63
- const translatedBuffer = Translator.StringsTranslator.jsonToWar(originalJson).buffer;
64
- const translatedJson = Translator.StringsTranslator.warToJson(translatedBuffer).json;
65
-
66
- writeJsonTestFile('strings.json', translatedJson);
67
-
68
- assert.deepStrictEqual(originalJson, translatedJson);
69
- });
70
-
71
- it('Terrain reversion', () => {
72
- const originalJson = readJsonTestFile('terrain.json');
73
- const translatedBuffer = Translator.TerrainTranslator.jsonToWar(originalJson).buffer;
74
- const translatedJson = Translator.TerrainTranslator.warToJson(translatedBuffer).json;
75
-
76
- writeJsonTestFile('terrain.json', translatedJson);
77
-
78
- assert.deepStrictEqual(originalJson, translatedJson);
79
- });
80
-
81
- it('Units reversion', () => {
82
- const originalJson = readJsonTestFile('units.json');
83
- const translatedBuffer = Translator.UnitsTranslator.jsonToWar(originalJson).buffer;
84
- const translatedJson = Translator.UnitsTranslator.warToJson(translatedBuffer).json;
85
-
86
- writeJsonTestFile('units.json', translatedJson);
87
-
88
- assert.deepStrictEqual(originalJson, translatedJson);
89
- });
90
-
91
- it('Regions reversion', () => {
92
- const originalJson = readJsonTestFile('regions.json');
93
- const translatedBuffer = Translator.RegionsTranslator.jsonToWar(originalJson).buffer;
94
- const translatedJson = Translator.RegionsTranslator.warToJson(translatedBuffer).json;
95
-
96
- writeJsonTestFile('regions.json', translatedJson);
97
-
98
- assert.deepStrictEqual(originalJson, translatedJson);
99
- });
100
-
101
- it('Cameras reversion', () => {
102
- const originalJson = readJsonTestFile('cameras.json');
103
- const translatedBuffer = Translator.CamerasTranslator.jsonToWar(originalJson).buffer;
104
- const translatedJson = Translator.CamerasTranslator.warToJson(translatedBuffer).json;
105
-
106
- writeJsonTestFile('cameras.json', translatedJson);
107
-
108
- assert.deepStrictEqual(originalJson, translatedJson);
109
- });
110
-
111
- it('Sounds reversion', () => {
112
- const originalJson = readJsonTestFile('sounds.json');
113
- const translatedBuffer = Translator.SoundsTranslator.jsonToWar(originalJson).buffer;
114
- const translatedJson = Translator.SoundsTranslator.warToJson(translatedBuffer).json;
115
-
116
- writeJsonTestFile('sounds.json', translatedJson);
117
-
118
- assert.deepStrictEqual(originalJson, translatedJson);
119
- });
120
-
121
- it('Units (Object) reversion', () => {
122
- const originalJson = readJsonTestFile('obj-units.json');
123
- const objectType = Translator.ObjectsTranslator.ObjectType.Units;
124
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
125
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
126
-
127
- writeJsonTestFile('obj-units.json', translatedJson);
128
-
129
- assert.deepStrictEqual(originalJson, translatedJson);
130
- });
131
-
132
- it('Items (Object) reversion', () => {
133
- const originalJson = readJsonTestFile('obj-items.json');
134
- const objectType = Translator.ObjectsTranslator.ObjectType.Items;
135
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
136
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
137
-
138
- writeJsonTestFile('obj-items.json', translatedJson);
139
-
140
- assert.deepStrictEqual(originalJson, translatedJson);
141
- });
142
-
143
- it('Destructables (Object) reversion', () => {
144
- const originalJson = readJsonTestFile('obj-destructables.json');
145
- const objectType = Translator.ObjectsTranslator.ObjectType.Destructables;
146
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
147
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
148
-
149
- writeJsonTestFile('obj-destructables.json', translatedJson);
150
-
151
- assert.deepStrictEqual(originalJson, translatedJson);
152
- });
153
-
154
- it('Doodads (Object) reversion', () => {
155
- const originalJson = readJsonTestFile('obj-doodads.json');
156
- const objectType = Translator.ObjectsTranslator.ObjectType.Doodads;
157
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
158
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
159
-
160
- writeJsonTestFile('obj-doodads.json', translatedJson);
161
-
162
- assert.deepStrictEqual(originalJson, translatedJson);
163
- });
164
-
165
- it('Abilities (Object) reversion', () => {
166
- const originalJson = readJsonTestFile('obj-abilities.json');
167
- const objectType = Translator.ObjectsTranslator.ObjectType.Abilities;
168
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
169
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
170
-
171
- writeJsonTestFile('obj-abilities.json', translatedJson);
172
-
173
- assert.deepStrictEqual(originalJson, translatedJson);
174
- });
175
-
176
- it('Buffs (Object) reversion', () => {
177
- const originalJson = readJsonTestFile('obj-buffs.json');
178
- const objectType = Translator.ObjectsTranslator.ObjectType.Buffs;
179
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
180
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
181
-
182
- writeJsonTestFile('obj-buffs.json', translatedJson);
183
-
184
- assert.deepStrictEqual(originalJson, translatedJson);
185
- });
186
-
187
- it('Upgrades (Object) reversion', () => {
188
- const originalJson = readJsonTestFile('obj-upgrades.json');
189
- const objectType = Translator.ObjectsTranslator.ObjectType.Upgrades;
190
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
191
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
192
-
193
- writeJsonTestFile('obj-upgrades.json', translatedJson);
194
-
195
- assert.deepStrictEqual(originalJson, translatedJson);
196
- });
197
-
198
- it('Info reversion', () => {
199
- const originalJson = readJsonTestFile('info.json');
200
- const translatedBuffer = Translator.InfoTranslator.jsonToWar(originalJson).buffer;
201
- const translatedJson = Translator.InfoTranslator.warToJson(translatedBuffer).json;
202
-
203
- writeJsonTestFile('info.json', translatedJson);
204
-
205
- assert.deepStrictEqual(originalJson, translatedJson);
206
- });
207
-
208
- it('Imports reversion', () => {
209
- const originalJson = readJsonTestFile('imports.json');
210
- const translatedBuffer = Translator.ImportsTranslator.jsonToWar(originalJson).buffer;
211
- const translatedJson = Translator.ImportsTranslator.warToJson(translatedBuffer).json;
212
-
213
- writeJsonTestFile('imports.json', translatedJson);
214
-
215
- assert.deepStrictEqual(originalJson, translatedJson);
216
- });
217
-
218
- });
@@ -1,50 +0,0 @@
1
- import assert from 'assert';
2
- import { W3Buffer } from '../lib/W3Buffer';
3
-
4
- // This is a hard-coded buffer to test all the reading methods
5
- // on W3Buffer. It consists of, in this order:
6
- // char(4), int, float, string(7 Ws), byte
7
- const buffData = Buffer.from([
8
- 0x01, 0x00, 0x00, 0x00, // int: 1
9
- 0x81, 0x70, // short: 28801
10
- 0x00, 0x00, 0x9b, 0xc5, // float: -4960
11
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x00, // string: "WWWWWWW"
12
- 0x57, 0x33, 0x64, 0x6f, // char(4): "W3do"
13
- 0x57, // char(1): "W"
14
- 0x02 // byte: 2
15
- ]);
16
-
17
- const w3buffer = new W3Buffer(buffData);
18
-
19
- describe('W3Buffer', () => {
20
-
21
- it('should readInt', () => {
22
- assert.equal(w3buffer.readInt(), 1);
23
- });
24
-
25
- it('should readShort', () => {
26
- assert.equal(w3buffer.readShort(), 28801);
27
- });
28
-
29
- it('should readFloat', () => {
30
- assert.equal(w3buffer.readFloat(), -4960);
31
- });
32
-
33
- it('should readString', () => {
34
- assert.equal(w3buffer.readString(), 'WWWWWWW');
35
- });
36
-
37
- it('should readChars', () => {
38
- assert.equal(w3buffer.readChars(4), 'W3do');
39
- assert.equal(w3buffer.readChars(), 'W')
40
- });
41
-
42
- it('should readByte', () => {
43
- assert.equal(w3buffer.readByte(), 2);
44
- });
45
-
46
- it('should be exhausted', () => {
47
- assert.ok(w3buffer.isExhausted());
48
- });
49
-
50
- });
@@ -1,16 +0,0 @@
1
- [
2
- {
3
- "target": {
4
- "x": -319.01,
5
- "y": -90.18
6
- },
7
- "offsetZ": 0,
8
- "rotation": 90,
9
- "aoa": 304,
10
- "distance": 2657.34,
11
- "roll": 5,
12
- "fov": 70,
13
- "farClipping": 5000,
14
- "name": ""
15
- }
16
- ]