- #include "modsupt.h" 
- #include "CORE/FW/resource.h" 
- #include "CORE/MATH/matrix34.h" 
- #include "CORE/V1DB/dbsetup.h" 
- #include "harness/trace.h" 
- #include <math.h> 
-   
- // FIXME: move this definition (+BR_MAC3+BR_MAC4) to br_defs.h (and remove from matrix34.c matrix4.c ...) 
- #define BR_MAC2(A, B, C, D) ((A) * (B) + (C) * (D)) 
-   
- // IDA: void __cdecl BrModelApplyMap(br_model *model, int map_type, br_matrix34 *xform) 
- void BrModelApplyMap(br_model* model, int map_type, br_matrix34* xform) { 
-     int v; 
-     br_vertex* vp; 
-     br_vector3 mv; 
-     br_matrix34 default_xform; 
-     br_scalar d; 
-     LOG_TRACE("(%p, %d, %p)", model, map_type, xform); 
-   
-     if (xform == NULL) { 
-         BrMatrix34Identity(&default_xform); 
-         xform = &default_xform; 
-     } 
-     for (v = 0; v < model->nvertices; v++, vp++) { 
-         vp = &model->vertices[v]; 
-         BrMatrix34ApplyP(&mv, &vp->p, xform); 
-         switch (map_type) { 
-         case BR_APPLYMAP_PLANE: 
-             vp->map.v[0] = (mv.v[0] + 1.f) * 0.5f; 
-             vp->map.v[1] = (mv.v[1] + 1.f) * 0.5f; 
-             break; 
-         case BR_APPLYMAP_SPHERE: 
-             vp->map.v[0] = BrAngleToDegrees(BR_ATAN2(-mv.v[2], mv.v[0])) / 360.f; 
-             d = BR_MAC2(mv.v[0], mv.v[0], mv.v[2], mv.v[2]); 
-             vp->map.v[1] = 1.f - BrAngleToDegrees(BR_ATAN2(d, mv.v[1])) / 180.f; 
-             break; 
-         case BR_APPLYMAP_CYLINDER: 
-             vp->map.v[0] = BrAngleToDegrees(BR_ATAN2(-mv.v[2], mv.v[0])) / 360.f; 
-             vp->map.v[1] = (mv.v[1] + 1.f) * 0.5f; 
-             break; 
-         case BR_APPLYMAP_DISC: 
-             vp->map.v[0] = BrAngleToDegrees(BR_ATAN2(-mv.v[1], mv.v[0])) / 360.f; 
-             vp->map.v[1] = sqrtf(BR_MAC2(mv.v[0], mv.v[0], mv.v[1], mv.v[1])); 
-             break; 
-         case BR_APPLYMAP_NONE: 
-             vp->map.v[0] = 0.f; 
-             vp->map.v[1] = 0.f; 
-             break; 
-         } 
-     } 
- } 
-   
- // IDA: br_matrix34* __cdecl BrModelFitMap(br_model *model, int axis_0, int axis_1, br_matrix34 *transform) 
- br_matrix34* BrModelFitMap(br_model* model, int axis_0, int axis_1, br_matrix34* transform) { 
-     br_vector3 axis_3; 
-     br_vector3 tr; 
-     br_vector3 sc; 
-     int i; 
-     static br_vector3 axis_vectors[6] = { 
-         { {  1.f,  0.f,  0.f } }, 
-         { {  0.f,  1.f,  0.f } }, 
-         { {  0.f,  0.f,  1.f } }, 
-         { { -1.f,  0.f,  0.f } }, 
-         { {  0.f, -1.f,  0.f } }, 
-         { {  0.f,  0.f, -1.f } }, 
-     }; 
-     LOG_TRACE("(%p, %d, %d, %p)", model, axis_0, axis_1, transform); 
-   
-     BrMatrix34Identity(transform); 
-     axis_3.v[0] = axis_vectors[axis_1].v[2] * axis_vectors[axis_0].v[1] - axis_vectors[axis_1].v[1] * axis_vectors[axis_0].v[2]; 
-     axis_3.v[1] = axis_vectors[axis_1].v[0] * axis_vectors[axis_0].v[2] - axis_vectors[axis_1].v[2] * axis_vectors[axis_0].v[0]; 
-     axis_3.v[2] = axis_vectors[axis_1].v[1] * axis_vectors[axis_0].v[0] - axis_vectors[axis_1].v[0] * axis_vectors[axis_0].v[1]; 
-     for (i = 0; i < 3; i++) { 
-         transform->m[i][0] = axis_vectors[axis_0].v[i]; 
-         transform->m[i][1] = axis_vectors[axis_1].v[i]; 
-         transform->m[i][2] = axis_3.v[i]; 
-     } 
-     for (i = 0; i < 3; i++) { 
-         tr.v[i] = -(model->bounds.max.v[i] * .5f + model->bounds.min.v[i] * .5f); 
-     } 
-     for (i = 0; i < 3; i++) { 
-         if (model->bounds.max.v[i] == model->bounds.min.v[i]) { 
-             sc.v[i] = 1.f; 
-         } else { 
-             sc.v[i] = 1.f / (model->bounds.max.v[i] * .5f - model->bounds.min.v[i] * .5f); 
-         } 
-     } 
-   
-     BrMatrix34PreScale(transform, sc.v[0], sc.v[1], sc.v[2]); 
-     BrMatrix34PreTranslate(transform, tr.v[0], tr.v[1], tr.v[2]); 
-     return transform; 
- } 
-   
- // IDA: void __cdecl BrModelFree(br_model *m) 
- void BrModelFree(br_model* m) { 
-     BrResFree(m); 
- } 
-   
- // IDA: br_model* __cdecl BrModelAllocate(char *name, int nvertices, int nfaces) 
- br_model* BrModelAllocate(char* name, int nvertices, int nfaces) { 
-     br_model* m; 
-   
-     m = BrResAllocate(v1db.res, sizeof(br_model), BR_MEMORY_MODEL); 
-     m->nfaces = nfaces; 
-     m->nvertices = nvertices; 
-     if (name != NULL) { 
-         m->identifier = BrResStrDup(m, name); 
-     } 
-     if (nvertices != 0) { 
-         m->vertices = BrResAllocate(m, sizeof(br_vertex) * nvertices, BR_MEMORY_VERTICES); 
-     } 
-     if (nfaces != 0) { 
-         m->faces = BrResAllocate(m, sizeof(br_face) * nfaces, BR_MEMORY_FACES); 
-     } 
-     return m; 
- } 
-   
- // IDA: br_primitive_list* __cdecl BrPrimitiveListAllocate(br_uint_32 prim_type, br_uint_16 num_prims) 
- br_primitive_list* BrPrimitiveListAllocate(br_uint_32 prim_type, br_uint_16 num_prims) { 
-     LOG_TRACE("(%d, %d)", prim_type, num_prims); 
-   
-     return NULL; 
- } 
-   
- // IDA: br_uint_32 __cdecl BrModelAddPrimitiveList(br_model *model, br_primitive_list *primitive_list) 
- br_uint_32 BrModelAddPrimitiveList(br_model* model, br_primitive_list* primitive_list) { 
-     LOG_TRACE("(%p, %p)", model, primitive_list); 
-   
-     return 0; // Pierre-Marie Baty -- fixed return value 
- } 
-