#include "v1dbfile.h"
#include "CORE/FW/brqsort.h"
#include "CORE/FW/datafile.h"
#include "CORE/FW/diag.h"
#include "CORE/FW/file.h"
#include "CORE/FW/genfile.h"
#include "CORE/FW/resource.h"
#include "CORE/FW/scratch.h"
#include "CORE/V1DB/actsupt.h"
#include "CORE/V1DB/chunkids.h"
#include "CORE/V1DB/dbsetup.h"
#include "CORE/V1DB/matsupt.h"
#include "CORE/V1DB/modsupt.h"
#include "CORE/V1DB/regsupt.h"
#include "CORE/V1DB/stackids.h"
#include "harness/trace.h"
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
br_file_struct_member br_vertex_FM[3] = {
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[0]), "p.v[x]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[1]), "p.v[y]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[2]), "p.v[z]", NULL
}
};
br_file_struct br_vertex_F = { "br_vertex", BR_ASIZE(br_vertex_FM), br_vertex_FM, sizeof(br_vertex) };
br_file_struct_member br_vertex_uv_FM[] = {
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, map.
v[0]), "map.v[0]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, map.
v[1]), "map.v[1]", NULL
}
};
br_file_struct br_vertex_uv_F = { "br_vertex_uv", BR_ASIZE(br_vertex_uv_FM), br_vertex_uv_FM, sizeof(br_vertex) };
br_file_struct_member br_old_vertex_uv_FM[5] = {
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[0]), "p.v[X]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[1]), "p.v[Y]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, p.
v[2]), "p.v[Z]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, map.
v[0]), "map.v[0]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_vertex
, map.
v[1]), "map.v[1]", NULL
},
};
br_file_struct br_old_vertex_uv_F = { "br_old_vertex_uv", BR_ASIZE(br_old_vertex_uv_FM), br_old_vertex_uv_FM, sizeof(br_vertex) };
br_file_struct_member br_face_FM[5] = {
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[0]), "vertices[0]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[1]), "vertices[1]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[2]), "vertices[2]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, smoothing
), "smoothing", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_face
, flags
), "flags", NULL
}
};
br_file_struct br_face_F = { "br_face", BR_ASIZE(br_face_FM), br_face_FM, sizeof(br_face) };
br_file_struct_member br_old_face_1_FM[5] = {
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[0]), "vertices[0]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[1]), "vertices[1]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[2]), "vertices[2]", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_face
, smoothing
), "smoothing", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_face
, flags
), "flags", NULL
},
};
br_file_struct br_old_face_1_F = { "br_old_face_1", BR_ASIZE(br_old_face_1_FM), br_old_face_1_FM, sizeof(br_face) };
br_file_struct_member br_old_face_FM[5] = {
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[0]), "vertices[0]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[1]), "vertices[1]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, vertices
[2]), "vertices[2]", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, material
), "material", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_face
, smoothing
), "smoothing", NULL
}, // DF_TYPE_BR_UINT_32 in EXE
};
br_file_struct br_old_face_F = { "br_old_face", BR_ASIZE(br_old_face_FM), br_old_face_FM, sizeof(br_face) };
br_file_struct_member br_model_FM[2] = {
{ DF_TYPE_BR_UINT_16
, offsetof(br_model
, flags
), "flags", NULL
},
{ DF_TYPE_ASCIZ
, offsetof(br_model
, identifier
), "identifier", NULL
}
};
br_file_struct br_model_F = { "br_model", BR_ASIZE(br_model_FM), br_model_FM, sizeof(br_model) };
br_file_struct_member br_old_model_1_FM[1] = {
{ DF_TYPE_ASCIZ
, offsetof(br_model
, identifier
), "identifier", NULL
},
};
br_file_struct br_old_model_1_F = { "br_old_model_1", BR_ASIZE(br_old_model_1_FM), br_old_model_1_FM, sizeof(br_model) };
br_file_struct_member br_pivot_FM[3] = {
{ DF_TYPE_BR_SCALAR
, offsetof(br_model
, pivot.
v[0]), "pivot.v[X]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_model
, pivot.
v[1]), "pivot.v[Y]", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_model
, pivot.
v[2]), "pivot.v[Z]", NULL
},
};
br_file_struct br_pivot_F = { "br_pivot", BR_ASIZE(br_pivot_FM), br_pivot_FM, sizeof(br_model) };
br_file_struct_member br_material_old_FM[13] = {
{ DF_TYPE_BR_COLOUR
, offsetof(br_material
, colour
), "colour", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, opacity
), "opacity", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, ka
), "ka", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, kd
), "kd", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, ks
), "ks", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_material
, power
), "power", NULL
},
{ DF_TYPE_BR_UINT_16
, offsetof(br_material
, flags
), "flags", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[0]), "map_transform.m[0]", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[1]), "map_transform.m[1]", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[2]), "map_transform.m[2]", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, index_base
), "index_base", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, index_range
), "index_range", NULL
},
{ DF_TYPE_ASCIZ
, offsetof(br_material
, identifier
), "identifier", NULL
}
};
br_file_struct br_material_old_F = { "br_material_old", BR_ASIZE(br_material_old_FM), br_material_old_FM, sizeof(br_material) };
br_file_struct_member br_material_FM[17] = {
{ DF_TYPE_BR_COLOUR
, offsetof(br_material
, colour
), "colour", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, opacity
), "opacity", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, ka
), "ka", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, kd
), "kd", NULL
},
{ DF_TYPE_BR_UFRACTION
, offsetof(br_material
, ks
), "ks", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_material
, power
), "power", NULL
},
{ DF_TYPE_BR_UINT_32
, offsetof(br_material
, flags
), "flags", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[0]), "map_transform.m[0]", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[1]), "map_transform.m[1]", NULL
},
{ DF_TYPE_BR_VECTOR2
, offsetof(br_material
, map_transform.
m[2]), "map_transform.m[2]", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, index_base
), "index_base", NULL
},
{ DF_TYPE_BR_UINT_8
, offsetof(br_material
, index_range
), "index_range", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_material
, fog_min
), "fog_min", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_material
, fog_max
), "fog_max", NULL
},
{ DF_TYPE_BR_COLOUR
, offsetof(br_material
, fog_colour
), "fog_colour", NULL
},
{ DF_TYPE_BR_INT_32
, offsetof(br_material
, subdivide_tolerance
), "subdivide_tolerance", NULL
},
{ DF_TYPE_ASCIZ
, offsetof(br_material
, identifier
), "identifier", NULL
},
};
br_file_struct br_material_F = { "br_material", BR_ASIZE(br_material_FM), br_material_FM, sizeof(br_material) };
struct {
br_uint_32 id;
size_t offset;
int table;
} MaterialMaps[5] = {
{ CHUNKID_MATERIAL_COLOUR_MAP
, offsetof(br_material
, colour_map
), 0 },
{ CHUNKID_MATERIAL_INDEX_BLEND
, offsetof(br_material
, index_blend
), 1 },
{ CHUNKID_MATERIAL_INDEX_SHADE
, offsetof(br_material
, index_shade
), 1 },
{ CHUNKID_MATERIAL_SCREENDOOR
, offsetof(br_material
, screendoor
), 1 },
{ CHUNKID_MATERIAL_INDEX_FOG
, offsetof(br_material
, index_fog
), 1 },
};
br_file_enum_member actor_type_FM[8] = {
{ 0, "BR_ACTOR_NONE" },
{ 1, "BR_ACTOR_MODEL" },
{ 2, "BR_ACTOR_LIGHT" },
{ 3, "BR_ACTOR_CAMERA" },
{ 4, "_BR_ACTOR_RESERVED" },
{ 5, "BR_ACTOR_BOUNDS" },
{ 6, "BR_ACTOR_BOUNDS_CORRECT" },
{ 7, "BR_ACTOR_CLIP_PLANE" }
};
br_file_enum actor_type_F = { BR_ASIZE(actor_type_FM), actor_type_FM };
br_file_enum_member render_style_FM[8] = {
{ 0, "BR_RSTYLE_DEFAULT"},
{ 1, "BR_RSTYLE_NONE"},
{ 2, "BR_RSTYLE_POINTS"},
{ 3, "BR_RSTYLE_EDGES"},
{ 4, "BR_RSTYLE_FACES"},
{ 5, "BR_RSTYLE_BOUNDING_POINTS"},
{ 6, "BR_RSTYLE_BOUNDING_EDGES"},
{ 7, "BR_RSTYLE_BOUNDING_FACES"},
};
br_file_enum render_style_F = { 8, render_style_FM };
br_file_struct_member br_actor_FM[3] = {
{ DF_TYPE_ENUM_8
, offsetof(br_actor
, type
), "type", &actor_type_F
},
{ DF_TYPE_ENUM_8
, offsetof(br_actor
, render_style
), "render_style", &render_style_F
},
{ DF_TYPE_ASCIZ
, offsetof(br_actor
, identifier
), "identifier", NULL
}
};
br_file_struct br_actor_F = { "br_actor", BR_ASIZE(br_actor_FM), br_actor_FM, sizeof(br_actor) };
br_file_struct_member br_transform_matrix34_FM[4] = {
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
mat.
m[0]), "t.mat.m[0]", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
mat.
m[1]), "t.mat.m[1]", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
mat.
m[2]), "t.mat.m[2]", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
mat.
m[3]), "t.mat.m[3]", NULL
}
};
br_file_struct br_transform_matrix34_F = { "br_transform_matrix34", BR_ASIZE(br_transform_matrix34_FM), br_transform_matrix34_FM, sizeof(br_transform) };
br_file_struct_member br_transform_quat_FM[5] = {
{ DF_TYPE_BR_SCALAR
, offsetof(br_transform
, t.
quat.
q.
x), "t.quat.q.x", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_transform
, t.
quat.
q.
y), "t.quat.q.y", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_transform
, t.
quat.
q.
z), "t.quat.q.z", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_transform
, t.
quat.
q.
w), "t.quat.q.w", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
quat.
t), "t.quat.t", NULL
},
};
br_file_struct br_transform_quat_F = { "br_transform_quat", BR_ASIZE(br_transform_quat_FM), br_transform_quat_FM, sizeof(br_transform) };
br_file_enum_member angle_order_FM[24] = {
{ 0, "BR_EULER_XYZ_S" },
{ 8, "BR_EULER_XYX_S" },
{ 4, "BR_EULER_XZY_S" },
{ 12, "BR_EULER_XZX_S" },
{ 1, "BR_EULER_YZX_S" },
{ 9, "BR_EULER_YZY_S" },
{ 5, "BR_EULER_YXZ_S" },
{ 13, "BR_EULER_YXY_S" },
{ 2, "BR_EULER_ZXY_S" },
{ 10, "BR_EULER_ZXZ_S" },
{ 6, "BR_EULER_ZYX_S" },
{ 14, "BR_EULER_ZYZ_S" },
{ 16, "BR_EULER_ZYX_R" },
{ 24, "BR_EULER_XYX_R" },
{ 20, "BR_EULER_YZX_R" },
{ 28, "BR_EULER_XZX_R" },
{ 17, "BR_EULER_XZY_R" },
{ 25, "BR_EULER_YZY_R" },
{ 21, "BR_EULER_ZXY_R" },
{ 29, "BR_EULER_YXY_R" },
{ 18, "BR_EULER_YXZ_R" },
{ 26, "BR_EULER_ZXZ_R" },
{ 22, "BR_EULER_XYZ_R" },
{ 30, "BR_EULER_ZYZ_R" },
};
br_file_enum angle_order_F = { BR_ASIZE(angle_order_FM), angle_order_FM };
br_file_struct_member br_transform_euler_FM[5] = {
{ DF_TYPE_ENUM_8
, offsetof(br_transform
, t.
euler.
e.
order), "t.euler.e.order", &angle_order_F
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_transform
, t.
euler.
e.
a), "t.euler.e.a", NULL
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_transform
, t.
euler.
e.
b), "t.euler.e.b", NULL
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_transform
, t.
euler.
e.
c), "t.euler.e.c", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
euler.
t), "t.euler.t", NULL
},
};
br_file_struct br_transform_euler_F = { "br_transform_euler", BR_ASIZE(br_transform_euler_FM), br_transform_euler_FM, sizeof(br_transform) };
br_file_struct_member br_transform_look_up_FM[3] = {
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
look_up.
look), "t.look_up.look", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
look_up.
up), "t.look_up.up", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
look_up.
t), "t.look_up.t", NULL
},
};
br_file_struct br_transform_look_up_F = { "br_transform_look_up", BR_ASIZE(br_transform_look_up_FM), br_transform_look_up_FM, sizeof(br_transform) };
br_file_struct_member br_transform_translation_FM[1] = {
{ DF_TYPE_BR_VECTOR3
, offsetof(br_transform
, t.
translate.
t), "t.translate.t", NULL
},
};
br_file_struct br_transform_translation_F = { "br_transform_translation", BR_ASIZE(br_transform_translation_FM), br_transform_translation_FM, sizeof(br_transform) };
transform_type TransformTypes[7] = {
{ CHUNKID_TRANSFORM_MAT34, &br_transform_matrix34_F },
{ CHUNKID_TRANSFORM_MAT34_LP, &br_transform_matrix34_F },
{ CHUNKID_TRANSFORM_QUAT, &br_transform_quat_F },
{ CHUNKID_TRANSFORM_EULER, &br_transform_euler_F },
{ CHUNKID_TRANSFORM_LOOK_UP, &br_transform_look_up_F },
{ CHUNKID_TRANSFORM_TRANSLATION, &br_transform_translation_F },
{ CHUNKID_TRANSFORM_IDENTITY, NULL }
};
br_file_struct_member br_bounds3_FM[2] = {
{ DF_TYPE_BR_VECTOR3
, offsetof(br_bounds3
, min
), "min", NULL
},
{ DF_TYPE_BR_VECTOR3
, offsetof(br_bounds3
, max
), "max", NULL
},
};
br_file_struct br_bounds3_F = { "br_bounds3", BR_ASIZE(br_bounds3_FM), br_bounds3_FM, sizeof(br_bounds3) };
br_file_struct_member br_plane_FM[1] = {
{ DF_TYPE_BR_VECTOR4
, offsetof(br_vector4
, v
), "eqn", NULL
},
};
br_file_struct br_plane_F = { "br_plane", BR_ASIZE(br_plane_FM), br_plane_FM, sizeof(br_vector4) };
br_file_enum_member light_type_FM[6] = {
{ 0, "BR_LIGHT_POINT"},
{ 1, "BR_LIGHT_DIRECT"},
{ 2, "BR_LIGHT_SPOT"},
{ 4, "BR_LIGHT_VIEW|BR_LIGHT_POINT"},
{ 5, "BR_LIGHT_VIEW|BR_LIGHT_DIRECT"},
{ 6, "BR_LIGHT_VIEW|BR_LIGHT_SPOT"},
};
br_file_enum light_type_F = { BR_ASIZE(light_type_FM), light_type_FM };
br_file_struct_member br_light_FM[8] = {
{ DF_TYPE_ENUM_8
, offsetof(br_light
, type
), "type", &light_type_F
},
{ DF_TYPE_BR_COLOUR
, offsetof(br_light
, colour
), "colour", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_light
, attenuation_c
), "attenuation_c", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_light
, attenuation_l
), "attenuation_l", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_light
, attenuation_q
), "attenuation_q", NULL
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_light
, cone_inner
), "cone_inner", NULL
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_light
, cone_outer
), "cone_outer", NULL
},
{ DF_TYPE_ASCIZ
, offsetof(br_light
, identifier
), "identifier", NULL
},
};
br_file_struct br_light_F = { "br_light", BR_ASIZE(br_light_FM), br_light_FM, sizeof(br_light) };
br_file_enum_member camera_type_FM[2] = {
{ 0, "BR_CAMERA_PARALLEL"},
{ 1, "BR_CAMERA_PERSPECTIVE"},
};
br_file_enum camera_type_F = { BR_ASIZE(camera_type_FM), camera_type_FM };
br_file_struct_member br_camera_FM[6] = {
{ DF_TYPE_ENUM_8
, offsetof(br_camera
, type
), "type", &camera_type_F
},
{ DF_TYPE_BR_ANGLE
, offsetof(br_camera
, field_of_view
), "field_of_view", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_camera
, hither_z
), "hither_z", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_camera
, yon_z
), "yon_z", NULL
},
{ DF_TYPE_BR_SCALAR
, offsetof(br_camera
, aspect
), "aspect", NULL
},
{ DF_TYPE_ASCIZ
, offsetof(br_camera
, identifier
), "identifier", NULL
},
};
br_file_struct br_camera_F = { "br_camera", BR_ASIZE(br_camera_FM), br_camera_FM, sizeof(br_camera) };
br_chunks_table_entry ModelLoadEntries[15] = {
{ CHUNKID_END, 0u, FopRead_END },
{ CHUNKID_OLD_MATERIAL_INDEX, 0u, FopRead_OLD_MATERIAL_INDEX },
{ CHUNKID_OLD_VERTICES, 0u, FopRead_OLD_VERTICES },
{ CHUNKID_OLD_VERTICES_UV, 0u, FopRead_OLD_VERTICES_UV },
{ CHUNKID_OLD_FACES, 0u, FopRead_OLD_FACES },
{ CHUNKID_OLD_MODEL, 0u, FopRead_OLD_MODEL },
{ CHUNKID_OLD_FACES_1, 1u, FopRead_OLD_FACES_1 },
{ CHUNKID_OLD_MODEL_1, 0u, FopRead_OLD_MODEL_1 },
{ CHUNKID_MODEL, 0u, FopRead_MODEL },
{ CHUNKID_MATERIAL_INDEX, 1u, FopRead_MATERIAL_INDEX },
{ CHUNKID_MODEL_VERTICES, 1u, FopRead_VERTICES },
{ CHUNKID_MODEL_VERTEX_UV, 1u, FopRead_VERTEX_UV },
{ CHUNKID_MODEL_FACES, 1u, FopRead_FACES },
{ CHUNKID_MODEL_FACE_MATERIAL, 0u, FopRead_FACE_MATERIAL },
{ CHUNKID_MODEL_PIVOT, 0u, FopRead_PIVOT },
};
br_chunks_table ModelLoadTable = { BR_ASIZE(ModelLoadEntries), ModelLoadEntries };
br_chunks_table_entry ActorLoadEntries[21] = {
{ CHUNKID_END, 0u, FopRead_END },
{ CHUNKID_ACTOR, 0u, FopRead_ACTOR },
{ CHUNKID_ACTOR_MODEL, 0u, FopRead_ACTOR_MODEL },
{ CHUNKID_ACTOR_TRANSFORM, 0u, FopRead_ACTOR_TRANSFORM },
{ CHUNKID_ACTOR_MATERIAL, 0u, FopRead_ACTOR_MATERIAL },
{ CHUNKID_ACTOR_LIGHT, 0u, FopRead_ACTOR_LIGHT },
{ CHUNKID_ACTOR_CAMERA, 0u, FopRead_ACTOR_CAMERA },
{ CHUNKID_ACTOR_BOUNDS, 0u, FopRead_ACTOR_BOUNDS },
{ CHUNKID_ACTOR_CLIP_PLANE, 0u, FopRead_ACTOR_CLIP_PLANE },
{ CHUNKID_ACTOR_ADD_CHILD, 0u, FopRead_ACTOR_ADD_CHILD },
{ CHUNKID_TRANSFORM_MAT34, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_MAT34_LP, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_QUAT, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_EULER, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_LOOK_UP, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_TRANSLATION, 0u, FopRead_TRANSFORM },
{ CHUNKID_TRANSFORM_IDENTITY, 0u, FopRead_TRANSFORM },
{ CHUNKID_BOUNDS, 0u, FopRead_BOUNDS },
{ CHUNKID_LIGHT, 0u, FopRead_LIGHT },
{ CHUNKID_CAMERA, 0u, FopRead_CAMERA },
{ CHUNKID_PLANE, 0u, FopRead_PLANE },
};
br_chunks_table ActorLoadTable = { BR_ASIZE(ActorLoadEntries), ActorLoadEntries };
br_chunks_table_entry MaterialLoadEntries[8] = {
{ CHUNKID_END, 0u, FopRead_END },
{ CHUNKID_MATERIAL_OLD, 0u, FopRead_MATERIAL_OLD },
{ CHUNKID_MATERIAL_COLOUR_MAP, 0u, FopRead_PIXELMAP_REF },
{ CHUNKID_MATERIAL_INDEX_BLEND, 0u, FopRead_PIXELMAP_REF },
{ CHUNKID_MATERIAL_INDEX_SHADE, 0u, FopRead_PIXELMAP_REF },
{ CHUNKID_MATERIAL_SCREENDOOR, 0u, FopRead_PIXELMAP_REF },
{ CHUNKID_MATERIAL_INDEX_FOG, 0u, FopRead_PIXELMAP_REF },
{ CHUNKID_MATERIAL, 0u, FopRead_MATERIAL },
};
br_chunks_table MaterialLoadTable = { BR_ASIZE(MaterialLoadEntries), MaterialLoadEntries };
// IDA: int __usercall FopWrite_VERTICES@<EAX>(br_datafile *df@<EAX>, br_vertex *vertices@<EDX>, int nvertices@<EBX>)
int FopWrite_VERTICES(br_datafile* df, br_vertex* vertices, int nvertices) {
LOG_TRACE("(%p, %p, %d)", df, vertices, nvertices);
df->prims->chunk_write(df, CHUNKID_MODEL_VERTICES, df->prims->struct_size(df, &br_vertex_F, NULL) * nvertices + df->prims->count_size(df));
df->prims->count_write(df, nvertices);
DfStructWriteArray(df, &br_vertex_F, vertices, nvertices);
return 0;
}
// IDA: int __usercall FopRead_VERTICES@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_VERTICES(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
//int i; // Pierre-Marie Baty -- unused variable
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
mp = DfTop(DF_MODEL, NULL);
mp->vertices = BrResAllocate(mp, sizeof(br_vertex) * count, BR_MEMORY_VERTICES);
DfStructReadArray(df, &br_vertex_F, mp->vertices, count);
mp->nvertices = count;
return 0;
}
// IDA: int __usercall FopRead_OLD_VERTICES@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_VERTICES(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
void* ptr;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
count = length / df->prims->struct_size(df, &br_vertex_F, NULL);
ptr = BrResAllocate(v1db.res, count * sizeof(br_vertex), BR_MEMORY_VERTICES);
DfStructReadArray(df, &br_vertex_F, ptr, count);
DfPush(DF_VERTEX, ptr, count);
return 0;
}
// IDA: int __usercall FopWrite_VERTEX_UV@<EAX>(br_datafile *df@<EAX>, br_vertex *vertices@<EDX>, int nvertices@<EBX>)
int FopWrite_VERTEX_UV(br_datafile* df, br_vertex* vertices, int nvertices) {
LOG_TRACE("(%p, %p, %d)", df, vertices, nvertices);
df->prims->chunk_write(df, CHUNKID_MODEL_VERTEX_UV, df->prims->struct_size(df, &br_vertex_uv_F, NULL) * nvertices + df->prims->count_size(df));
df->prims->count_write(df, nvertices);
DfStructWriteArray(df, &br_vertex_uv_F, vertices, nvertices);
return 0;
}
// IDA: int __usercall FopRead_VERTEX_UV@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_VERTEX_UV(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
mp = DfTop(DF_MODEL, NULL);
if (count > mp->nvertices) {
BrFailure("Vertex UV: too many entries");
}
DfStructReadArray(df, &br_vertex_uv_F, mp->vertices, count);
return 0;
}
// IDA: int __usercall FopRead_OLD_VERTICES_UV@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_VERTICES_UV(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
void* ptr;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
count = length / df->prims->struct_size(df, &br_old_vertex_uv_F, NULL);
ptr = BrResAllocate(v1db.res, count * sizeof(br_vertex), BR_MEMORY_VERTICES);
DfStructReadArray(df, &br_old_vertex_uv_F, ptr, count);
DfPush(DF_VERTEX, ptr, count);
return 0;
}
// IDA: int __usercall FopRead_MATERIAL_INDEX@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_MATERIAL_INDEX(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
char name[256];
br_material** mip;
br_uint_32 i;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
mip = (br_material**)BrResAllocate(v1db.res, sizeof(br_material*) * (count + 1), BR_MEMORY_MATERIAL_INDEX);
mip[0] = NULL;
for (i = 1; i < count + 1; i++) {
df->prims->name_read(df, name);
mip[i] = BrMaterialFind(name);
}
DfPush(DF_MATERIAL_INDEX, mip, count + 1);
return 0;
}
// IDA: int __usercall FopWrite_MATERIAL_INDEX@<EAX>(br_datafile *df@<EAX>, br_material **materials@<EDX>, int nmaterials@<EBX>)
int FopWrite_MATERIAL_INDEX(br_datafile* df, br_material** materials, int nmaterials) {
int i;
int s;
LOG_TRACE("(%p, %p, %d)", df, materials, nmaterials);
s = df->prims->count_size(df);
for (i = 0; i < nmaterials; i++) {
s += df->prims->name_size(df, materials[i]->identifier);
}
df->prims->chunk_write(df, CHUNKID_MATERIAL_INDEX, s);
df->prims->count_write(df, nmaterials);
for (i = 0; i < nmaterials; i++) {
df->prims->name_write(df, materials[i]->identifier);
}
return 0;
}
// IDA: int __usercall FopRead_OLD_MATERIAL_INDEX@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_MATERIAL_INDEX(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
char* mblock;
char* cp;
int i;
int num_materials;
br_material** mip;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mblock = BrScratchAllocate(length);
if (BrFileRead(mblock, 1, length, df->h) != length) {
BrFailure("could not read material index");
}
num_materials = 0;
cp = mblock;
for (i = 0; i < (int) length; i++) { // Pierre-Marie Baty -- added type cast
if (*cp == '\0') {
num_materials++;
}
cp++;
}
mip = BrResAllocate(v1db.res, num_materials * sizeof(br_material*), BR_MEMORY_MATERIAL_INDEX);
cp = mblock;
for (i = 0; i < num_materials; i++) {
mip[i] = BrMaterialFind(cp);
while (*cp != '\0') {
cp++;
}
cp++;
}
BrScratchFree(mblock);
DfPush(DF_MATERIAL_INDEX, mip, num_materials);
return 0;
}
// IDA: int __usercall FopRead_FACES@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_FACES(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
int i;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
mp = DfTop(DF_MODEL, 0);
mp->faces = (br_face*)BrResAllocate(mp, sizeof(br_face) * count, BR_MEMORY_FACES);
mp->nfaces = count;
DfStructReadArray(df, &br_face_F, mp->faces, count);
for (i = 0; i < mp->nfaces; i++) {
if (!mp->faces[i].smoothing) {
mp->faces[i].smoothing = -1;
}
mp->faces[i].index = i;
}
return 0;
}
// IDA: int __usercall FopWrite_FACES@<EAX>(br_datafile *df@<EAX>, br_face *faces@<EDX>, int nfaces@<EBX>)
int FopWrite_FACES(br_datafile* df, br_face* faces, int nfaces) {
LOG_TRACE("(%p, %p, %d)", df, faces, nfaces);
df->prims->chunk_write(df, CHUNKID_MODEL_FACES, df->prims->struct_size(df, &br_face_F, NULL) * nfaces + df->prims->count_size(df));
df->prims->count_write(df, nfaces);
DfStructWriteArray(df, &br_face_F, faces, nfaces);
return 0;
}
// IDA: int __usercall FopRead_OLD_FACES_1@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_FACES_1(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
int i;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = DfTop(DF_MODEL, NULL);
mp->faces = BrResAllocate(mp, count * sizeof(br_face), BR_MEMORY_FACES);
mp->nfaces = count;
DfStructReadArray(df, &br_old_face_1_F, mp->faces, (br_uint_16)count);
for (i = 0; i < mp->nfaces; i++) {
if (mp->faces[i].smoothing == 0) {
mp->faces[i].smoothing = -1;
} else {
mp->faces[i].smoothing = 1 << ((mp->faces[i].smoothing - 1) % 16);
}
}
return 0;
}
// IDA: int __usercall FopRead_OLD_FACES@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_FACES(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_face* fp;
br_material** mip;
int mi_count;
/*unsigned*/ int i; // Pierre-Marie Baty -- fixed type
void* ptr;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
ptr = DfPop(DF_VERTEX, /*(int*)*/&i); // Pierre-Marie Baty -- removed type cast
mip = DfPop(DF_MATERIAL_INDEX, &mi_count);
DfPush(DF_VERTEX, ptr, i);
mi_count = length / df->prims->struct_size(df, &br_old_face_F, NULL);
fp = BrResAllocate(v1db.res, sizeof(br_face) * mi_count, BR_MEMORY_FACES);
DfStructReadArray(df, &br_old_face_F, fp, mi_count);
for (i = 0; i < mi_count; i++) {
fp[i].material = mip[*(br_uint_16*)&fp[i].material];
if (fp[i].smoothing == 0) {
fp[i].smoothing = -1;
}
}
BrResFree(mip);
DfPush(DF_FACE, fp, mi_count);
return 0;
}
// IDA: int __usercall FopWrite_FACE_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_face *faces@<EDX>, int nfaces@<EBX>, br_material **mindex@<ECX>, int nmaterials)
int FopWrite_FACE_MATERIAL(br_datafile* df, br_face* faces, int nfaces, br_material** mindex, int nmaterials) {
br_uint_16* block;
//br_uint_16* ip; // Pierre-Marie Baty -- unused variable
//br_face* fp; // Pierre-Marie Baty -- unused variable
int i;
int j;
LOG_TRACE("(%p, %p, %d, %p, %d)", df, faces, nfaces, mindex, nmaterials);
FopWrite_MATERIAL_INDEX(df, mindex, nmaterials);
block = BrResAllocate(v1db.res, nfaces * sizeof(br_uint_16), BR_MEMORY_MATERIAL_INDEX);
for (i = 0; i < nfaces; i++) {
block[i] = 0;
if (faces[i].material != NULL) {
for (j = 0; j < nmaterials; j++) {
if (faces[i].material == mindex[j]) {
block[i] = j + 1;
break;
}
}
}
}
df->prims->chunk_write(df, CHUNKID_MODEL_FACE_MATERIAL, df->prims->block_size(df, block, nfaces, 0, 1, sizeof(br_uint_16)));
df->prims->block_write(df, block, nfaces, 0, 1, sizeof(br_uint_16));
BrResFree(block);
return 0;
}
// IDA: int __usercall FopRead_FACE_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_FACE_MATERIAL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_material** mindex;
int nmaterials;
br_model* mp;
br_face* fp;
br_uint_16* block;
br_uint_16* ip;
int block_count;
int i;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
mindex = DfPop(DF_MATERIAL_INDEX, &nmaterials);
mp = DfTop(DF_MODEL, 0);
block = BrScratchAllocate(length);
block_count = mp->nfaces;
block = df->prims->block_read(df, block, &block_count, sizeof(br_uint_16), 0);
if (block_count > mp->nfaces)
BrFailure("Face Materials: too many entries");
fp = mp->faces;
ip = block;
for (i = 0; i < block_count; i++) {
fp->material = (*ip < nmaterials) ? mindex[*ip] : NULL;
fp++;
ip++;
}
BrScratchFree(block);
BrResFree(mindex);
return 0;
}
// IDA: int __usercall FopRead_MODEL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_MODEL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = BrModelAllocate(NULL, 0, 0);
mp->identifier = NULL;
df->res = mp;
df->prims->struct_read(df, &br_model_F, mp);
df->res = NULL;
mp->flags &= (BR_MODF_DONT_WELD | BR_MODF_KEEP_ORIGINAL | BR_MODF_GENERATE_TAGS | BR_MODF_QUICK_UPDATE);
DfPush(DF_MODEL, mp, 1);
return 0;
}
// IDA: int __usercall FopWrite_MODEL@<EAX>(br_datafile *df@<EAX>, br_model *mp@<EDX>)
int FopWrite_MODEL(br_datafile* df, br_model* mp) {
br_model temp_model;
LOG_TRACE("(%p, %p)", df, mp);
memcpy(&temp_model
, mp
, sizeof(br_model
));
df->prims->chunk_write(df, CHUNKID_MODEL, df->prims->struct_size(df, &br_model_F, mp));
df->prims->struct_write(df, &br_model_F, mp);
return 0;
}
// IDA: int __usercall FopRead_OLD_MODEL_1@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_MODEL_1(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = BrModelAllocate(NULL, 0, 0);
df->res = mp;
df->prims->struct_read(df, &br_old_model_1_F, mp);
df->res = NULL;
DfPush(DF_MODEL, df->res, 1);
return 0;
}
// IDA: int __usercall FopRead_OLD_MODEL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_OLD_MODEL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
int i;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = BrModelAllocate(NULL, 0, 0);
df->res = mp;
df->prims->struct_read(df, &br_model_F, mp);
df->res = NULL;
mp->faces = DfPop(DF_FACE, &i);
mp->nfaces = i;
mp->vertices = DfPop(DF_VERTEX, &i);
mp->nvertices = i;
BrResAdd(mp, mp->faces);
BrResAdd(mp, mp->vertices);
mp->flags = mp->flags & (BR_MODF_DONT_WELD | BR_MODF_KEEP_ORIGINAL | BR_MODF_GENERATE_TAGS | BR_MODF_QUICK_UPDATE);
DfPush(DF_MODEL, mp, 1);
return 0;
}
// IDA: int __usercall FopRead_PIVOT@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_PIVOT(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_model* mp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = DfPop(DF_MODEL, NULL);
df->res = mp;
df->prims->struct_read(df, &br_pivot_F, mp);
df->res = NULL;
DfPush(DF_MODEL, mp, 1);
return 0;
}
// IDA: int __usercall FopRead_MATERIAL_OLD@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_MATERIAL_OLD(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_material* mp;
mp = BrMaterialAllocate(NULL);
df->res = mp;
df->prims->struct_read(df, &br_material_old_F, mp);
df->res = NULL;
DfPush(DF_MATERIAL, mp, 1);
return 0;
}
// IDA: int __usercall FopRead_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_MATERIAL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_material* mp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
mp = BrMaterialAllocate(NULL);
df->res = mp;
df->prims->struct_read(df, &br_material_F, mp);
df->res = NULL;
DfPush(DF_MATERIAL, mp, 1);
return 0;
}
// IDA: int __usercall FopWrite_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_material *mp@<EDX>)
int FopWrite_MATERIAL(br_datafile* df, br_material* mp) {
LOG_TRACE("(%p, %p)", df, mp);
df->prims->chunk_write(df, CHUNKID_MATERIAL, df->prims->struct_size(df, &br_material_F, mp));
df->prims->struct_write(df,&br_material_F, mp);
return 0;
}
// IDA: int __usercall FopRead_PIXELMAP_REF@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_PIXELMAP_REF(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_pixelmap* pm;
char name[256];
char* mp;
int i;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
for (i = 0; i < BR_ASIZE(MaterialMaps); i++) {
if (id == MaterialMaps[i].id) {
break;
}
}
mp = DfTop(DF_MATERIAL, NULL);
df->prims->name_read(df, name);
if (MaterialMaps[i].table != 0) {
pm = BrTableFind(name);
} else {
pm = BrMapFind(name);
}
*(intptr_t*)(mp + MaterialMaps[i].offset) = (intptr_t/***/)pm; // Pierre-Marie Baty -- fixed type
return 0;
}
// IDA: int __usercall FopWrite_PIXELMAP_REF@<EAX>(br_datafile *df@<EAX>, int id@<EDX>, br_pixelmap *pixelmap@<EBX>)
int FopWrite_PIXELMAP_REF(br_datafile* df, int id, br_pixelmap* pixelmap) {
LOG_TRACE("(%p, %d, %p)", df, id, pixelmap);
df->prims->chunk_write(df, id, df->prims->name_size(df, pixelmap->identifier));
df->prims->name_write(df, pixelmap->identifier);
return 0;
}
// IDA: int __usercall FopWrite_ACTOR@<EAX>(br_datafile *df@<EAX>, br_actor *ap@<EDX>)
int FopWrite_ACTOR(br_datafile* df, br_actor* ap) {
LOG_TRACE("(%p, %p)", df, ap);
df->prims->chunk_write(df, CHUNKID_ACTOR, df->prims->struct_size(df, &br_actor_F, ap));
df->prims->struct_write(df, &br_actor_F, ap);
return 0;
}
// IDA: int __usercall FopRead_ACTOR@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* ap;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
ap = BrActorAllocate(BR_ACTOR_NONE, NULL);
df->res = ap;
df->prims->struct_read(df, &br_actor_F, ap);
df->res = NULL;
ap->t.type = BR_TRANSFORM_IDENTITY;
DfPush(DF_ACTOR, ap, 1);
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_MODEL@<EAX>(br_datafile *df@<EAX>, br_model *model@<EDX>)
int FopWrite_ACTOR_MODEL(br_datafile* df, br_model* model) {
LOG_TRACE9("(%p, %p)", df, model);
df->prims->chunk_write(df, CHUNKID_ACTOR_MODEL, df->prims->name_size(df, model->identifier));
df->prims->name_write(df, model->identifier);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_MODEL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_MODEL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
char name[256];
br_actor* a;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
a = DfTop(DF_ACTOR, 0);
df->prims->name_read(df, name);
a->model = BrModelFind(name);
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_material *material@<EDX>)
int FopWrite_ACTOR_MATERIAL(br_datafile* df, br_material* material) {
LOG_TRACE("(%p, %p)", df, material);
df->prims->chunk_write(df, CHUNKID_ACTOR_MATERIAL, df->prims->name_size(df, material->identifier));
df->prims->name_write(df, material->identifier);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_MATERIAL@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_MATERIAL(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
char name[256];
br_actor* a;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
a = DfTop(DF_ACTOR, NULL);
df->prims->name_read(df, name);
a->material = BrMaterialFind(name);
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_TRANSFORM@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_TRANSFORM(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_TRANSFORM, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_TRANSFORM@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_TRANSFORM(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_transform* tp;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
tp = DfPop(DF_TRANSFORM, NULL);
a = DfTop(DF_ACTOR, NULL);
memcpy(&a
->t
, tp
, sizeof(br_transform
));
BrResFree(tp);
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_LIGHT@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_LIGHT(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_LIGHT, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_LIGHT@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_LIGHT(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_light* lp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
lp = DfPop(DF_LIGHT, NULL);
a = DfTop(DF_ACTOR, NULL);
a->type_data = lp;
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_CAMERA@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_CAMERA(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_CAMERA, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_CAMERA@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_CAMERA(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_light* cp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
cp = DfPop(DF_CAMERA, NULL);
a = DfTop(DF_ACTOR, NULL);
a->type_data = cp;
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_BOUNDS@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_BOUNDS(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_BOUNDS, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_BOUNDS@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_BOUNDS(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_bounds* bp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
bp = DfPop(DF_BOUNDS, 0);
a = DfTop(DF_ACTOR, 0);
a->type_data = bp;
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_CLIP_PLANE@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_CLIP_PLANE(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_CLIP_PLANE, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_CLIP_PLANE@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_CLIP_PLANE(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_vector4* vp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
vp = DfPop(DF_CLIP_PLANE, NULL);
a = DfTop(DF_ACTOR, NULL);
a->type_data = vp;
return 0;
}
// IDA: int __usercall FopWrite_ACTOR_ADD_CHILD@<EAX>(br_datafile *df@<EAX>)
int FopWrite_ACTOR_ADD_CHILD(br_datafile* df) {
LOG_TRACE("(%p)", df);
df->prims->chunk_write(df, CHUNKID_ACTOR_ADD_CHILD, 0);
return 0;
}
// IDA: int __usercall FopRead_ACTOR_ADD_CHILD@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_ACTOR_ADD_CHILD(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_actor* a;
br_actor* p;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
a = DfPop(DF_ACTOR, 0);
p = DfTop(DF_ACTOR, 0);
BrActorAdd(p, a);
return 0;
}
// IDA: int __usercall FopWrite_TRANSFORM@<EAX>(br_datafile *df@<EAX>, br_transform *t@<EDX>)
int FopWrite_TRANSFORM(br_datafile* df, br_transform* t) {
transform_type* tt;
LOG_TRACE("(%p, %p)", df, t);
tt = &TransformTypes[t->type];
if (tt->fs == NULL) {
df->prims->chunk_write(df, tt->id, 0);
} else {
df->prims->chunk_write(df, tt->id, df->prims->struct_size(df, tt->fs, t));
df->prims->struct_size(df, tt->fs, &t);
df->prims->struct_write(df, tt->fs, t);
}
return 0;
}
// IDA: int __usercall FopRead_TRANSFORM@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_TRANSFORM(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
int t;
br_transform* tp;
LOG_TRACE9("(%p, %d, %d, %d)", df, id, length, count);
for (t = 0; t < BR_ASIZE(TransformTypes); t++) {
if (id == TransformTypes[t].id) {
break;
}
}
if (t == BR_ASIZE(TransformTypes)) {
LOG_PANIC("transform type not found!");
}
tp = (br_transform*)BrResAllocate(v1db.res, sizeof(br_transform), BR_MEMORY_TRANSFORM);
tp->type = t;
df->res = tp;
if (TransformTypes[t].fs) {
df->prims->struct_read(df, TransformTypes[t].fs, tp);
}
df->res = NULL;
DfPush(DF_TRANSFORM, tp, 1);
return 0;
}
// IDA: int __usercall FopWrite_BOUNDS@<EAX>(br_datafile *df@<EAX>, br_bounds *bp@<EDX>)
int FopWrite_BOUNDS(br_datafile* df, br_bounds* bp) {
LOG_TRACE("(%p, %p)", df, bp);
df->prims->chunk_write(df, CHUNKID_BOUNDS, df->prims->struct_size(df, &br_bounds3_F, bp));
df->prims->struct_write(df, &br_bounds3_F, bp);
return 0;
}
// IDA: int __usercall FopRead_BOUNDS@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_BOUNDS(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_bounds3* bp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
bp = BrResAllocate(v1db.res, sizeof(br_bounds3), BR_MEMORY_BOUNDS);
df->res = bp;
df->prims->struct_read(df, &br_bounds3_F, bp);
df->res = NULL;
DfPush(DF_BOUNDS, bp, 1);
return 0;
}
// IDA: int __usercall FopWrite_PLANE@<EAX>(br_datafile *df@<EAX>, br_vector4 *pp@<EDX>)
int FopWrite_PLANE(br_datafile* df, br_vector4* pp) {
LOG_TRACE("(%p, %p)", df, pp);
df->prims->chunk_write(df, CHUNKID_PLANE, df->prims->struct_size(df, &br_plane_F, pp));
df->prims->struct_write(df, &br_plane_F, pp);
return 0;
}
// IDA: int __usercall FopRead_PLANE@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_PLANE(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_vector4* pp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
pp = BrResAllocate(v1db.res, sizeof(br_vector4), BR_MEMORY_CLIP_PLANE);
df->res = pp;
df->prims->struct_read(df, &br_plane_F, pp);
df->res = NULL;
DfPush(DF_CLIP_PLANE, pp, 1);
return 0;
}
// IDA: int __usercall FopWrite_LIGHT@<EAX>(br_datafile *df@<EAX>, br_light *lp@<EDX>)
int FopWrite_LIGHT(br_datafile* df, br_light* lp) {
LOG_TRACE("(%p, %p)", df, lp);
df->prims->chunk_write(df, CHUNKID_LIGHT, df->prims->struct_size(df, &br_light_F, lp));
df->prims->struct_write(df, &br_light_F, lp);
return 0;
}
// IDA: int __usercall FopRead_LIGHT@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_LIGHT(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_light* lp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
lp = BrResAllocate(v1db.res, sizeof(br_light), BR_MEMORY_LIGHT);
df->res = lp;
df->prims->struct_read(df, &br_light_F, lp);
df->res = NULL;
DfPush(DF_LIGHT, lp, 1);
return 0;
}
// IDA: int __usercall FopWrite_CAMERA@<EAX>(br_datafile *df@<EAX>, br_camera *cp@<EDX>)
int FopWrite_CAMERA(br_datafile* df, br_camera* cp) {
LOG_TRACE("(%p, %p)", df, cp);
df->prims->chunk_write(df, CHUNKID_CAMERA, df->prims->struct_size(df, &br_camera_F, cp));
df->prims->struct_write(df, &br_camera_F, cp);
return 0;
}
// IDA: int __usercall FopRead_CAMERA@<EAX>(br_datafile *df@<EAX>, br_uint_32 id@<EDX>, br_uint_32 length@<EBX>, br_uint_32 count@<ECX>)
int FopRead_CAMERA(br_datafile* df, br_uint_32 id, br_uint_32 length, br_uint_32 count) {
br_camera* cp;
LOG_TRACE("(%p, %d, %d, %d)", df, id, length, count);
cp = BrResAllocate(v1db.res, sizeof(br_camera), BR_MEMORY_CAMERA);
df->res = cp;
df->prims->struct_read(df, &br_camera_F, cp);
df->res = NULL;
DfPush(DF_CAMERA, cp, 1);
return 0;
}
// IDA: br_uint_32 __cdecl BrModelLoadMany(char *filename, br_model **models, br_uint_16 num)
br_uint_32 BrModelLoadMany(char* filename, br_model** models, br_uint_16 num) {
int count;
int r;
br_datafile* df;
LOG_TRACE9("(\"%s\", %p, %d)", filename, models, num);
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
return 0;
}
count = 0;
do {
if (count >= num) {
break;
}
r = DfChunksInterpret(df, &ModelLoadTable);
if (DfTopType() == DF_MODEL) {
models[count] = DfPop(DF_MODEL, 0);
count++;
}
} while (r != 0);
DfClose(df);
return count;
}
// IDA: int __cdecl PtrCompare(void *a, void *b)
int PtrCompare(void* a, void* b) {
LOG_TRACE("(%p, %p)", a, b);
if (*(uintptr_t*)a > *(uintptr_t*)b) {
return -1;
}
return *(uintptr_t*)a < *(uintptr_t*)b;
}
// IDA: br_uint_32 __cdecl WriteModel(br_model *mp, br_datafile *df)
br_uint_32 WriteModel(br_model* mp, br_datafile* df) {
br_material** mindex;
//br_vertex* vp; // Pierre-Marie Baty -- unused variable
int nmaterials;
int i;
int has_uv;
LOG_TRACE("(%p, %p)", mp, df);
nmaterials = 0;
if (mp->vertices == NULL || mp->faces == NULL) {
if (mp->identifier != NULL) {
BrWarning(mp->identifier);
}
BrWarning("Model must have vertex and face information to save.");
BrWarning("This information may have neem stripped on addition to");
BrWarning("the registry. To prevent this, set the BR_MODF_UPDATEABLE");
BrFailure("flag before adding the model to the registry.");
}
mindex = BrResAllocate(v1db.res, mp->nfaces * sizeof(br_material*), BR_MEMORY_MATERIAL_INDEX);
for (i = 0; i < mp->nfaces; i++) {
mindex[i] = mp->faces[i].material;
}
BrQsort(mindex, mp->nfaces, sizeof(br_material*), (br_qsort_cbfn*)PtrCompare);
nmaterials = 1;
for (i = 1; i < mp->nfaces; i++) {
if (mindex[nmaterials-1] == mindex[i]) {
mindex[nmaterials] = mindex[i];
nmaterials++;
}
}
if (mindex[nmaterials-1] == NULL) {
nmaterials = 0;
}
has_uv = 0;
for (i = 0; i < mp->nvertices; i++) {
if (mp->vertices[i].map.v[0] != 0.f || mp->vertices[i].map.v[1] != 0.f) {
has_uv = 1;
break;
}
}
FopWrite_MODEL(df, mp);
if (mp->nvertices != 0) {
FopWrite_VERTICES(df, mp->vertices, mp->nvertices);
if (has_uv != 0) {
FopWrite_VERTEX_UV(df, mp->vertices, mp->nvertices);
}
}
if (mp->nfaces != 0) {
FopWrite_FACES(df, mp->faces, mp->nfaces);
if (nmaterials != 0) {
FopWrite_FACE_MATERIAL(df, mp->faces, mp->nfaces, mindex, nmaterials);
}
}
FopWrite_END(df);
BrResFree(mindex);
return 0;
}
// IDA: br_uint_32 __cdecl BrModelSaveMany(char *filename, br_model **models, br_uint_16 num)
br_uint_32 BrModelSaveMany(char* filename, br_model** models, br_uint_16 num) {
br_datafile* df;
int i;
int m;
LOG_TRACE("(\"%s\", %p, %d)", filename, models, num);
df = DfOpen(filename, 1, BRT_FLOAT);
if (df == NULL) {
return 0;
}
FopWrite_FILE_INFO(df, FILE_TYPE_MODEL);
if (models == NULL) {
BrModelEnum(NULL, (br_model_enum_cbfn*)&WriteModel, df);
m = BrModelCount(NULL);
} else {
for (i = 0; i < num; i++) {
WriteModel(models[i], df);
}
m = num;
}
DfClose(df);
return m;
}
// IDA: br_uint_32 __cdecl BrActorLoadMany(char *filename, br_actor **actors, br_uint_16 num)
br_uint_32 BrActorLoadMany(char* filename, br_actor** actors, br_uint_16 num) {
br_datafile* df;
int count;
int r;
LOG_TRACE9("(\"%s\", %p, %d)", filename, actors, num);
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
return 0;
}
count = 0;
do {
if (count >= num) {
break;
}
r = DfChunksInterpret(df, &ActorLoadTable);
if (DfTopType() == DF_ACTOR) {
actors[count] = DfPop(DF_ACTOR, NULL);
count++;
}
} while (r != 0);
DfClose(df);
return count;
}
// IDA: int __usercall WriteActor@<EAX>(br_actor *a@<EAX>, br_datafile *df@<EDX>)
int WriteActor(br_actor* a, br_datafile* df) {
br_actor* ap;
br_actor* last_ap;
LOG_TRACE("(%p, %p)", a, df);
FopWrite_ACTOR(df, a);
if (a->t.type != BR_TRANSFORM_IDENTITY) {
FopWrite_TRANSFORM(df, &a->t);
FopWrite_ACTOR_TRANSFORM(df);
}
if (a->material != NULL) {
FopWrite_ACTOR_MATERIAL(df, a->material);
}
if (a->model != NULL) {
FopWrite_ACTOR_MODEL(df, a->model);
}
if (a->type_data != NULL) {
switch (a->type) {
case BR_ACTOR_LIGHT:
FopWrite_LIGHT(df, a->type_data);
FopWrite_ACTOR_LIGHT(df);
break;
case BR_ACTOR_CAMERA:
FopWrite_CAMERA(df, a->type_data);
FopWrite_ACTOR_CAMERA(df);
break;
case BR_ACTOR_BOUNDS:
FopWrite_BOUNDS(df, a->type_data);
FopWrite_ACTOR_BOUNDS(df);
break;
case BR_ACTOR_CLIP_PLANE:
FopWrite_PLANE(df, a->type_data);
FopWrite_ACTOR_CLIP_PLANE(df);
break;
}
}
if (a->children != NULL){
last_ap = a->children;
while (last_ap->next != NULL) {
last_ap = last_ap->next;
}
ap = last_ap;
while (1) {
WriteActor(ap, df);
FopWrite_ACTOR_ADD_CHILD(df);
if (a->children == ap) {
break;
}
ap = (br_actor*)ap->prev;
}
}
return 0;
}
// IDA: br_uint_32 __cdecl BrActorSaveMany(char *filename, br_actor **actors, br_uint_16 num)
br_uint_32 BrActorSaveMany(char* filename, br_actor** actors, br_uint_16 num) {
br_datafile* df;
int i;
LOG_TRACE("(\"%s\", %p, %d)", filename, actors, num);
df = DfOpen(filename, 1, BRT_FLOAT);
if (df == NULL) {
return 0;
}
FopWrite_FILE_INFO(df, FILE_TYPE_ACTORS);
for (i = 0; i < num; i++) {
WriteActor(actors[i], df);
FopWrite_END(df);
}
DfClose(df);
return num;
}
// IDA: br_uint_32 __cdecl BrMaterialLoadMany(char *filename, br_material **materials, br_uint_16 num)
br_uint_32 BrMaterialLoadMany(char* filename, br_material** materials, br_uint_16 num) {
br_datafile* df;
int count;
int r;
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
return 0;
}
count = 0;
do {
if (count >= num) {
break;
}
r = DfChunksInterpret(df, &MaterialLoadTable);
if (DfTopType() == DF_MATERIAL) {
materials[count] = DfPop(DF_MATERIAL, 0);
++count;
}
} while (r != 0);
DfClose(df);
return count;
}
// IDA: br_uint_32 __cdecl WriteMaterial(br_material *mp, br_datafile *df)
br_uint_32 WriteMaterial(br_material* mp, br_datafile* df) {
LOG_TRACE("(%p, %p)", mp, df);
FopWrite_MATERIAL(df, mp);
if (mp->colour_map != NULL) {
FopWrite_PIXELMAP_REF(df, CHUNKID_MATERIAL_COLOUR_MAP, mp->colour_map);
}
if (mp->index_shade != NULL) {
FopWrite_PIXELMAP_REF(df, CHUNKID_MATERIAL_INDEX_SHADE, mp->index_shade);
}
if (mp->index_blend != NULL) {
FopWrite_PIXELMAP_REF(df, CHUNKID_MATERIAL_INDEX_BLEND, mp->index_blend);
}
if (mp->screendoor != NULL) {
FopWrite_PIXELMAP_REF(df, CHUNKID_MATERIAL_SCREENDOOR, mp->screendoor);
}
if (mp->index_fog != NULL) {
FopWrite_PIXELMAP_REF(df, CHUNKID_MATERIAL_INDEX_FOG, mp->index_fog);
}
FopWrite_END(df);
return 0;
}
// IDA: br_uint_32 __cdecl BrMaterialSaveMany(char *filename, br_material **materials, br_uint_16 num)
br_uint_32 BrMaterialSaveMany(char* filename, br_material** materials, br_uint_16 num) {
br_datafile* df;
int i;
int count;
LOG_TRACE("(\"%s\", %p, %d)", filename, materials, num);
df = DfOpen(filename, 1, BRT_FLOAT);
if (df == NULL) {
return 0;
}
#ifdef BRENDER_FIX_BUGS
FopWrite_FILE_INFO(df, FILE_TYPE_MATERIAL);
#else
FopWrite_FILE_INFO(df, FILE_TYPE_MATERIAL_OLD);
#endif
if (materials == NULL) {
BrMaterialEnum(NULL, (br_material_enum_cbfn*)WriteMaterial, df);
count = BrMaterialCount(NULL);
} else {
for (i = 0; i < num; i++) {
WriteMaterial(materials[i], df);
}
count = num;
}
DfClose(df);
return count;
}
// IDA: br_model* __cdecl BrModelLoad(char *filename)
br_model* BrModelLoad(char* filename) {
br_model* ptr;
LOG_TRACE("(\"%s\")", filename);
if (BrModelLoadMany(filename, &ptr, 1) == 1) {
return ptr;
}
return NULL;
}
// IDA: br_uint_32 __cdecl BrModelSave(char *filename, br_model *ptr)
br_uint_32 BrModelSave(char* filename, br_model* ptr) {
LOG_TRACE("(\"%s\", %p)", filename, ptr);
return BrModelSaveMany(filename, &ptr, 1);
}
// IDA: br_material* __cdecl BrMaterialLoad(char *filename)
br_material* BrMaterialLoad(char* filename) {
br_material* ptr;
if (BrMaterialLoadMany(filename, &ptr, 1) == 1) {
return ptr;
}
return NULL;
}
// IDA: br_uint_32 __cdecl BrMaterialSave(char *filename, br_material *ptr)
br_uint_32 BrMaterialSave(char* filename, br_material* ptr) {
LOG_TRACE("(\"%s\", %p)", filename, ptr);
return BrMaterialSaveMany(filename, &ptr, 1);
}
// IDA: br_actor* __cdecl BrActorLoad(char *filename)
br_actor* BrActorLoad(char* filename) {
br_actor* ptr;
LOG_TRACE("(\"%s\")", filename);
if (BrActorLoadMany(filename, &ptr, 1) == 1) {
return ptr;
}
LOG_DEBUG("loadmany fail");
return NULL;
}
// IDA: br_uint_32 __cdecl BrActorSave(char *filename, br_actor *ptr)
br_uint_32 BrActorSave(char* filename, br_actor* ptr) {
LOG_TRACE("(\"%s\", %p)", filename, ptr);
return BrActorSaveMany(filename, &ptr, 1);
}
// IDA: br_error __cdecl BrModelFileCount(char *filename, br_uint_16 *num)
br_error BrModelFileCount(char* filename, br_uint_16* num) {
br_datafile* df;
LOG_TRACE("(\"%s\", %p)", filename, num);
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
if (num != NULL) {
*num = 0;
}
return 0x1002;
}
if (num == NULL) {
return 0;
}
*num = 0;
while (DfChunksInterpret(df, &ModelLoadTable) != 0) {
if (DfTopType() == DF_MODEL) {
*num = *num + 1;
DfPop(DF_MODEL, NULL);
}
}
DfClose(df);
return 0;
}
// IDA: br_error __cdecl BrActorFileCount(char *filename, br_uint_16 *num)
br_error BrActorFileCount(char* filename, br_uint_16* num) {
br_datafile* df;
LOG_TRACE("(\"%s\", %p)", filename, num);
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
if (num != NULL) {
*num = 0;
}
return 0x1002;
}
if (num == NULL) {
return 0;
}
*num = 0;
while (DfChunksInterpret(df, &ActorLoadTable) != 0) {
if (DfTopType() == DF_ACTOR) {
*num = *num + 1;
DfPop(DF_ACTOR, NULL);
}
}
DfClose(df);
return 0;
}
// IDA: br_error __cdecl BrMaterialFileCount(char *filename, br_uint_16 *num)
br_error BrMaterialFileCount(char* filename, br_uint_16* num) {
br_datafile* df;
LOG_TRACE("(\"%s\", %p)", filename, num);
df = DfOpen(filename, 0, BRT_FLOAT);
if (df == NULL) {
if (num != NULL) {
*num = 0;
}
return 0x1002;
}
if (num == NULL) {
return 0;
}
*num = 0;
while (DfChunksInterpret(df, &MaterialLoadTable) != 0) {
if (DfTopType() == DF_MATERIAL) {
*num = *num + 1;
DfPop(DF_MATERIAL, NULL);
}
}
DfClose(df);
return 0;
}