TypeScript-based mdl/mdx (Warcraft 3 model formats) converter/renderer
- MDL/MDX converter (also json-like structure-previewer)
- WebGL model previewer
- BLP previewer (BLP1 decoder only)
- Simple model optimizer
- Usage in Node.js or with bundler (e.g. webpack)
- Usage in browser as external script
- Usage in browser as ES Module directly
- Exported APIs
- How to render model in browser
npm i war3-model --save
MDL parsing/generation
import { parseMDL, generateMDL } from 'war3-model';
let model = parseMDL('...');
let mdl = generateMDL(model);
console.log(mdl);
BLP => PNG node.js cli converter
import * as fs from 'fs';
import { PNG } from 'pngjs';
import { decodeBLP, getBLPImageData } from 'war3-model';
let blp = decode(new Uint8Array(fs.readFileSync(process.argv[2])).buffer);
let imageData = getImageData(blp, 0);
let png = new PNG({width: blp.width, height: blp.height, inputHasAlpha: true});
png.data = Buffer.from(imageData.data.buffer);
fs.writeFileSync('out.png', PNG.sync.write(png));
100% of both old classic Warcraft 3 and Reforged models can be parsed.
After conversion mdx binary file
-> in-memory structure
-> mdx binary file
~99.7% (7908/7927) of them would be byte-to-byte identical (19 of them contains unused data).
New versions 900 and 1000 are supported in parsers, generators and viewer.
- All standart features like Sequences, Bones, Cameras, etc
- Multiple texture chunks (mdx only)
- Multiple sequences/nodes with the same name (not quite sure is it feature or not, but War3 actually contains such models)
- SoundTrack not supported
- Reforged data
- Standart geometry/animation
- Custom team color setting
- ReplaceableId 1/2
- Global sequences
- Alpha blending and multiple layers
- TextureAnimation
- Billboarded/BillboardedLockXYZ, w/o DontInherit/CameraAnchored
- RibbonEmitter (w/o Gravity and TextureSlot/Color animation)
- ParticleEmitter2 (with Tail/Head/Both/Squirt(?))
- Reforged PBR lightning (orm textures, specular, normal mapping, etc)
- No Light nodes support (Light, Unshaded, etc)
- No render priority support (PriorityPlane and others)
- BLP / DDS are supported
- BLP1 only (not BLP0 and BLP2 support)
- Decoder only, no encoder
- Direct & jpeg data
- Variable alpha (8/4/1/0 bit, but tested only 8/0)
- API for getting all mipmap level's data
- dxt1, dxt3, dxt5, ati2 (also known as bc5)
- Magos (MDX specification, War3 Model Editor app/source)
- GhostWolf (aka flowtsohg) (MDX specification, BLP decoder code)
- Алексей (MdlVis app/source)
- Dr Super Good (BLP specification)
MIT Licence