Skip to content

TypeScript-based mdl/mdx (Warcraft 3 model formats) converter/renderer

License

Notifications You must be signed in to change notification settings

4eb0da/war3-model

Repository files navigation

war3-model

TypeScript-based mdl/mdx (Warcraft 3 model formats) converter/renderer

Demo

Usage

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));

Is it good enough?

100% of old classic Warcraft 3 models can be parsed.

After conversion mdx binary file -> in-memory structure -> mdx binary file all of them would be byte-to-byte identical.

~98.4% of models (3276/3329) would be identical after mdx -> structure -> mdl -> structure -> mdx (because warcraft contains extraneous data in models and because of unsupported multiple texture chunks in mdl).

What about Reforged?

Nope. Currently not supported, sorry

MDL/MDX support

  • 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

Renderer support

  • 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(?))
  • No light support (normals, light, Unshaded, etc)
  • No render priority support (PriorityPlane and others)

BLP support

  • 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

Thanks

  • Magos (MDX specification, War3 Model Editor app/source)
  • GhostWolf (aka flowtsohg) (MDX specification, BLP decoder code)
  • Алексей (MdlVis app/source)
  • Dr Super Good (BLP specification)

Licence

MIT Licence

About

TypeScript-based mdl/mdx (Warcraft 3 model formats) converter/renderer

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages