Git Product home page Git Product logo

libcmo21's Introduction

libcmo21

The Library for CMO (also accept NMO, VMO and NMS) File Read/Write. Also the Minimalist Virtools Environment.
Write with one Library and Load Virtools File Everywhere.

Status

This is a long time project.
This project welcome everyone's contribution, except the employee of Dassault, which created Virtools.

Introduction

The aim of this project is creating a universal library which can read / write CMO files or any other Virtools files without any Virtools dependencies.
This project will not link any original Virtools dynamic library. So this project can be ported to any platform if the compiler supports.
This project only involving specific Virtools version, 2.1. Other Virtools versions are not considered by this project.
This project is based on reverse work of CK2.dll, VxMath.dll and CK2_3D.dll. The program unvirt created by Luigi Auriemma, which is licensed by GPL-v2, also help my work.

The difference between this project and other Virtools libraries (e.g. doyaGu/CK2), is that we are not focusing on re-creating the whole Virtools engine. We only focus on the Virtools files RW, and we only just implement a minimalist Virtools environment for achieving this.

Goals

The ultimate goals of this project are:

  • Create a library which can read Virtools file and do not limited on x86 platform by original Virtools implement.
  • Create a universal dynamic library for Ballance Map file loading.
    • Create a Python binding for the loader. And allow user can export Ballance Map from Blender on Linux platform natively.
    • Create a C# binding for the loader to enable that I can load Ballance Map in Godot on Linux / Android platform natively.

There is still a long way to go. But I will try my best.

Project Layout

  • LibCmo: Core library. It is a static library. Link to your program freely because I don't want to process export table things.
  • IronPad: A tiny Crashpad like static library. Used by Unvirt and BMap. Report crash log and coredump only on Windows (Because I assume all Linux users have capacity to enable coredump and deliver it to developer.).
  • Unvirt: Interactive Virtools file viewer. Can provide more detail than Luigi Auriemma's unvirt but only can accept version limited Virtools file (< 4.0 I guess).
  • BMap: A dynamic library which is specific for Ballance Map loading by using LibCmo.

Contributions

However, not all contribution will be accepted. Just like I said, we create Minimalist Virtools Environment. The basic RW functions is enough. We do not accept complex function implementations.
There are 3 lists which indicate our accept guideline.

Wanted Features

These features will be accepted as soon as possible.

  • The bug fix of any existing code.

Not Urgent Features

These features are in plan, but not urge to merge.

  • The CK_ID remap system of Reader.
  • CK3dEntity hierarchy system.
  • Other CK classes implementations.
  • Non-Virtools 2.1 implementations.

Don't Care Features

These features explicitly will not be merged.

  • Run Virtools file.
  • Plugin system.

Compile

This project require:

  • The compiler supporting C++ 20
  • Littile-endian architecture system.
  • zlib
  • stb (For image read / write)
  • iconv (non-Windows system required)

It can be compiled on Windows via sln file. You should set up LibRef.props when using sln file to build this project on Windows.
You also can use CMake file to compile this project on Linux or anything else platform. However CMake may not be updated in time because I develop this project on Windows frequently.
You may need use this command to configure CMake: cmake .. -DSTB_IMAGE_PATH="/path/to/stb-image" -DCMAKE_BUILD_TYPE=Release

libcmo21's People

Contributors

yyc12345 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

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.