Add .BIN format
This commit is contained in:
parent
9a1cd9b755
commit
3ccd37ea11
Binary file not shown.
|
@ -5,6 +5,11 @@ struct Table<T> {
|
||||||
T data;
|
T data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Vec2<T> {
|
||||||
|
T x;
|
||||||
|
T y;
|
||||||
|
};
|
||||||
|
|
||||||
struct Vec3<T> {
|
struct Vec3<T> {
|
||||||
T x;
|
T x;
|
||||||
T y;
|
T y;
|
||||||
|
@ -18,6 +23,20 @@ struct Vec4<T> {
|
||||||
T w;
|
T w;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Mat3<T> {
|
||||||
|
Vec3<T> v[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Transform {
|
||||||
|
Mat3<float> mat;
|
||||||
|
Vec3<float> vec;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Sphere {
|
||||||
|
Vec3<float> center;
|
||||||
|
float radius;
|
||||||
|
};
|
||||||
|
|
||||||
struct Plane {
|
struct Plane {
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Common.hexpat"
|
||||||
|
|
||||||
|
// TODO: All these types should be enums lol
|
||||||
|
|
||||||
|
struct Object {
|
||||||
|
char name[8];
|
||||||
|
u8 type;
|
||||||
|
s32 parameter;
|
||||||
|
float min_range;
|
||||||
|
float max_range;
|
||||||
|
Transform transform;
|
||||||
|
s16 child; // ID, -1 if no child
|
||||||
|
s16 next; // ID, -1 if no next
|
||||||
|
u16 vhot_start;
|
||||||
|
u16 vhot_count;
|
||||||
|
u16 point_start;
|
||||||
|
u16 point_count;
|
||||||
|
u16 light_start;
|
||||||
|
u16 light_count;
|
||||||
|
u16 norm_start;
|
||||||
|
u16 norm_count;
|
||||||
|
u16 node_start;
|
||||||
|
u16 node_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Material {
|
||||||
|
char name[16];
|
||||||
|
u8 type;
|
||||||
|
u8 slot;
|
||||||
|
u32 handle; // Or RGBA depending on type
|
||||||
|
float uv; // Or inverse palette lookup?
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AuxMaterialInfo {
|
||||||
|
float transparency;
|
||||||
|
float self_illumination;
|
||||||
|
if (parent.aux_material_size == 16) {
|
||||||
|
Vec2<float> max_texel_size;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VHot {
|
||||||
|
u32 id;
|
||||||
|
Vec3<float> location;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Light {
|
||||||
|
u16 material;
|
||||||
|
u16 vertex;
|
||||||
|
u32 normal; // This is the actual normal compacted down
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Polygon {
|
||||||
|
u16 index;
|
||||||
|
u16 data; // Either color or material index based on type
|
||||||
|
u8 type;
|
||||||
|
u8 vertex_count;
|
||||||
|
u16 normal;
|
||||||
|
float d;
|
||||||
|
u16 vertex_indices[vertex_count];
|
||||||
|
u16 light_indices[vertex_count];
|
||||||
|
if (type == 0x1B) {
|
||||||
|
u16 uv_indices[vertex_count];
|
||||||
|
}
|
||||||
|
u8 material; // Only in version 4
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Model {
|
||||||
|
char signature[4]; // Always "LGMD"
|
||||||
|
s32 version;
|
||||||
|
char name[8];
|
||||||
|
float radius;
|
||||||
|
float max_polygon_radius;
|
||||||
|
Vec3<float> max_bounds;
|
||||||
|
Vec3<float> min_bounds;
|
||||||
|
Vec3<float> center;
|
||||||
|
|
||||||
|
// Counts
|
||||||
|
u16 polygon_count;
|
||||||
|
u16 vertex_count;
|
||||||
|
u16 parameter_count;
|
||||||
|
u8 material_count;
|
||||||
|
u8 vcall_count;
|
||||||
|
u8 vhot_count;
|
||||||
|
u8 object_count;
|
||||||
|
|
||||||
|
// Offsets
|
||||||
|
u32 object_offset;
|
||||||
|
u32 material_offset;
|
||||||
|
u32 uv_offset;
|
||||||
|
u32 vhot_offset;
|
||||||
|
u32 vertex_offset;
|
||||||
|
u32 light_offset;
|
||||||
|
u32 normal_offset;
|
||||||
|
u32 polygon_offset;
|
||||||
|
u32 node_offset;
|
||||||
|
|
||||||
|
u32 model_size;
|
||||||
|
|
||||||
|
if (version == 4) {
|
||||||
|
u32 aux_material_flags;
|
||||||
|
u32 aux_material_offset;
|
||||||
|
u32 aux_material_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object objects[object_count] @ object_offset;
|
||||||
|
Material materials[material_count] @ material_offset;
|
||||||
|
u32 uv_count = (vhot_offset - uv_offset) / 8;
|
||||||
|
Vec2<float> uvs[uv_count] @ uv_offset;
|
||||||
|
VHot vhots[vhot_count] @ vhot_offset;
|
||||||
|
Vec3<float> vertices[vertex_count] @ vertex_offset;
|
||||||
|
Light lights[polygon_count] @ light_offset;
|
||||||
|
u32 normal_count = (polygon_offset - normal_offset) / 12;
|
||||||
|
Vec3<float> normals[normal_count] @ normal_offset;
|
||||||
|
Polygon polygons[polygon_count] @ polygon_offset;
|
||||||
|
// TODO: BSP nodes
|
||||||
|
if (version == 4) {
|
||||||
|
AuxMaterialInfo aux_material_infos[material_count] @ aux_material_offset;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Model model @ 0;
|
Loading…
Reference in New Issue