Coder Social home page Coder Social logo

war3-model's Introduction

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

Reforged format is supported

New versions 900 and 1000 are supported in parsers, generators and viewer.

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
  • Reforged data

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(?))
  • 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

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

DDS support

  • dxt1, dxt3, dxt5, ati2 (also known as bc5)

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

war3-model's People

Contributors

4eb0da avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

war3-model's Issues

Use war3-model in Ice Sickle project?

Hello 4eb0da,

(Sorry for the issue... this is the only way I know of to contact you 😃)

I've been looking at this repo for several weeks now and am impressed with the work that you've done. I'd like to ask if you would like to work with me on using this library to draw a WC3 world as you see in World Editor.

I work on a project called Ice Sickle, which is a re-write of World Editor in Node.js, built on Electron. I've already finished some work on the object editor and other windows in the app. The data is all stored in an object, and I've also written the WC3MapTranslator to convert JSON to the various war3map files to be inserted into a .w3x MPQ.

So if you'd like, we can discuss further. I really need someone else developing the WebGL components to create the actual world view so users may see placed objects, modify terrain, and add new entities to the world.

Feel free to email me at [email protected], and maybe we can set up a time to discuss more details!

Best,
ChiefOfGxBxL

about CollisionShape parse

parse and generate CollisionShapes

public enum Type {
    BOX,
    PLANE,
    SPHERE,
    CYLINDER;
}

if (type != Type.SPHERE) {
    reader.readFloat32Array(vertices[1]);
}

if ((type == Type.SPHERE) || (type == Type.CYLINDER)) {
    boundsRadius = reader.readFloat32();
}

When I read the source code of ReterasModelStudio I found a different parsing method
For the time being, I don't know which one is effective

Add ModelRenderer.destroy()

Don't know if v2.0.0 has this implemented, since the npm for it does not load the /renderer folder.
But for 1.2.0 which i was forced to use, the ModelRenderer class is missing a destroy method which is useful for SinglePageApplications that can't rely on "page-reload/redirect" to clear the WEBGL context.

Basically just add this:

    ModelRenderer.prototype.destroy = function(){
        shaderProgram = false;
    };

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.