]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_alias.c
mathlib: Simplify VectorNormalizeLength to use existing math macros
[xonotic/darkplaces.git] / model_alias.c
index be300a1bb346a6bf6abca3c058a6863d9614262b..95f61ab79cbd33d8b1efac4f56887c6d5570493a 100644 (file)
@@ -27,17 +27,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #endif
 
 #ifdef SSE_POSSIBLE
-static qboolean r_skeletal_use_sse_defined = false;
-cvar_t r_skeletal_use_sse = {CVAR_CLIENT, "r_skeletal_use_sse", "1", "use SSE for skeletal model animation"};
+static qbool r_skeletal_use_sse_defined = false;
+cvar_t r_skeletal_use_sse = {CF_CLIENT, "r_skeletal_use_sse", "1", "use SSE for skeletal model animation"};
 #endif
-cvar_t r_skeletal_debugbone = {CVAR_CLIENT, "r_skeletal_debugbone", "-1", "development cvar for testing skeletal model code"};
-cvar_t r_skeletal_debugbonecomponent = {CVAR_CLIENT, "r_skeletal_debugbonecomponent", "3", "development cvar for testing skeletal model code"};
-cvar_t r_skeletal_debugbonevalue = {CVAR_CLIENT, "r_skeletal_debugbonevalue", "100", "development cvar for testing skeletal model code"};
-cvar_t r_skeletal_debugtranslatex = {CVAR_CLIENT, "r_skeletal_debugtranslatex", "1", "development cvar for testing skeletal model code"};
-cvar_t r_skeletal_debugtranslatey = {CVAR_CLIENT, "r_skeletal_debugtranslatey", "1", "development cvar for testing skeletal model code"};
-cvar_t r_skeletal_debugtranslatez = {CVAR_CLIENT, "r_skeletal_debugtranslatez", "1", "development cvar for testing skeletal model code"};
-cvar_t mod_alias_supporttagscale = {CVAR_CLIENT | CVAR_SERVER, "mod_alias_supporttagscale", "1", "support scaling factors in bone/tag attachment matrices as supported by MD3"};
-cvar_t mod_alias_force_animated = {CVAR_CLIENT | CVAR_SERVER, "mod_alias_force_animated", "", "if set to an non-empty string, overrides the is-animated flag of any alias models (for benchmarking)"};
+cvar_t r_skeletal_debugbone = {CF_CLIENT, "r_skeletal_debugbone", "-1", "development cvar for testing skeletal model code"};
+cvar_t r_skeletal_debugbonecomponent = {CF_CLIENT, "r_skeletal_debugbonecomponent", "3", "development cvar for testing skeletal model code"};
+cvar_t r_skeletal_debugbonevalue = {CF_CLIENT, "r_skeletal_debugbonevalue", "100", "development cvar for testing skeletal model code"};
+cvar_t r_skeletal_debugtranslatex = {CF_CLIENT, "r_skeletal_debugtranslatex", "1", "development cvar for testing skeletal model code"};
+cvar_t r_skeletal_debugtranslatey = {CF_CLIENT, "r_skeletal_debugtranslatey", "1", "development cvar for testing skeletal model code"};
+cvar_t r_skeletal_debugtranslatez = {CF_CLIENT, "r_skeletal_debugtranslatez", "1", "development cvar for testing skeletal model code"};
+cvar_t mod_alias_supporttagscale = {CF_CLIENT | CF_SERVER, "mod_alias_supporttagscale", "1", "support scaling factors in bone/tag attachment matrices as supported by MD3"};
+cvar_t mod_alias_force_animated = {CF_CLIENT | CF_SERVER, "mod_alias_force_animated", "", "if set to an non-empty string, overrides the is-animated flag of any alias models (for benchmarking)"};
 
 float mod_md3_sin[320];
 
@@ -62,7 +62,7 @@ void *Mod_Skeletal_AnimateVertices_AllocBuffers(size_t nbytes)
        return Mod_Skeletal_AnimateVertices_bonepose;
 }
 
-void Mod_Skeletal_BuildTransforms(const dp_model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT bonepose, float * RESTRICT boneposerelative)
+void Mod_Skeletal_BuildTransforms(const model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT bonepose, float * RESTRICT boneposerelative)
 {
        int i, blends;
        float m[12];
@@ -160,7 +160,7 @@ void Mod_Skeletal_BuildTransforms(const dp_model_t * RESTRICT model, const frame
        }
 }
 
-static void Mod_Skeletal_AnimateVertices(const dp_model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
+static void Mod_Skeletal_AnimateVertices(const model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
 {
 
        if (!model->surfmesh.num_vertices)
@@ -213,7 +213,7 @@ void Mod_AliasInit (void)
 #endif
 }
 
-static int Mod_Skeletal_AddBlend(dp_model_t *model, const blendweights_t *newweights)
+static int Mod_Skeletal_AddBlend(model_t *model, const blendweights_t *newweights)
 {
        int i;
        blendweights_t *weights;
@@ -230,7 +230,7 @@ static int Mod_Skeletal_AddBlend(dp_model_t *model, const blendweights_t *newwei
        return model->num_bones + i;
 }
 
-static int Mod_Skeletal_CompressBlend(dp_model_t *model, const int *newindex, const float *newinfluence)
+static int Mod_Skeletal_CompressBlend(model_t *model, const int *newindex, const float *newinfluence)
 {
        int i, total;
        float scale;
@@ -273,7 +273,7 @@ static int Mod_Skeletal_CompressBlend(dp_model_t *model, const int *newindex, co
        return Mod_Skeletal_AddBlend(model, &newweights);
 }
 
-static void Mod_MD3_AnimateVertices(const dp_model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
+static void Mod_MD3_AnimateVertices(const model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
 {
        // vertex morph
        int i, numblends, blendnum;
@@ -361,7 +361,7 @@ static void Mod_MD3_AnimateVertices(const dp_model_t * RESTRICT model, const fra
                }
        }
 }
-static void Mod_MDL_AnimateVertices(const dp_model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
+static void Mod_MDL_AnimateVertices(const model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f)
 {
        // vertex morph
        int i, numblends, blendnum;
@@ -458,7 +458,7 @@ static void Mod_MDL_AnimateVertices(const dp_model_t * RESTRICT model, const fra
        }
 }
 
-int Mod_Alias_GetTagMatrix(const dp_model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, matrix4x4_t *outmatrix)
+int Mod_Alias_GetTagMatrix(const model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, matrix4x4_t *outmatrix)
 {
        matrix4x4_t temp;
        matrix4x4_t parentbonematrix;
@@ -525,7 +525,7 @@ int Mod_Alias_GetTagMatrix(const dp_model_t *model, const frameblend_t *frameble
        return 0;
 }
 
-int Mod_Alias_GetExtendedTagInfoForIndex(const dp_model_t *model, unsigned int skin, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, int *parentindex, const char **tagname, matrix4x4_t *tag_localmatrix)
+int Mod_Alias_GetExtendedTagInfoForIndex(const model_t *model, unsigned int skin, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, int *parentindex, const char **tagname, matrix4x4_t *tag_localmatrix)
 {
        int blendindex;
        int k;
@@ -582,7 +582,7 @@ int Mod_Alias_GetExtendedTagInfoForIndex(const dp_model_t *model, unsigned int s
        return 2;
 }
 
-int Mod_Alias_GetTagIndexForName(const dp_model_t *model, unsigned int skin, const char *tagname)
+int Mod_Alias_GetTagIndexForName(const model_t *model, unsigned int skin, const char *tagname)
 {
        int i;
        if(skin >= (unsigned int)model->numskins)
@@ -623,13 +623,13 @@ static void Mod_BuildBaseBonePoses(void)
        Mem_Free(basebonepose);
 }
 
-static qboolean Mod_Alias_CalculateBoundingBox(void)
+static qbool Mod_Alias_CalculateBoundingBox(void)
 {
        int vnum;
-       qboolean firstvertex = true;
+       qbool firstvertex = true;
        float dist, yawradius, radius;
        float *v;
-       qboolean isanimated = false;
+       qbool isanimated = false;
        VectorClear(loadmodel->normalmins);
        VectorClear(loadmodel->normalmaxs);
        yawradius = 0;
@@ -752,7 +752,7 @@ static void Mod_Alias_MorphMesh_CompileFrames(void)
        }
 }
 
-static void Mod_MDLMD2MD3_TraceLine(dp_model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, trace_t *trace, const vec3_t start, const vec3_t end, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask)
+static void Mod_MDLMD2MD3_TraceLine(model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, trace_t *trace, const vec3_t start, const vec3_t end, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask)
 {
        int i;
        float segmentmins[3], segmentmaxs[3];
@@ -791,7 +791,7 @@ static void Mod_MDLMD2MD3_TraceLine(dp_model_t *model, const frameblend_t *frame
                Mem_Free(freevertex3f);
 }
 
-static void Mod_MDLMD2MD3_TraceBox(dp_model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, trace_t *trace, const vec3_t start, const vec3_t boxmins, const vec3_t boxmaxs, const vec3_t end, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask)
+static void Mod_MDLMD2MD3_TraceBox(model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, trace_t *trace, const vec3_t start, const vec3_t boxmins, const vec3_t boxmaxs, const vec3_t end, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask)
 {
        int i;
        vec3_t shiftstart, shiftend;
@@ -966,10 +966,10 @@ void Mod_BuildAliasSkinsFromSkinFiles(texture_t *skin, skinfile_t *skinfile, con
                Mod_LoadTextureFromQ3Shader(loadmodel->mempool, loadmodel->name, skin, stripbuf, true, true, (r_mipskins.integer ? TEXF_MIPMAP : 0) | TEXF_ALPHA | TEXF_PICMIP | TEXF_COMPRESS, MATERIALFLAG_WALL);
        }
 }
-
+extern cvar_t r_nolerp_list;
 #define BOUNDI(VALUE,MIN,MAX) if (VALUE < MIN || VALUE >= MAX) Host_Error("model %s has an invalid ##VALUE (%d exceeds %d - %d)", loadmodel->name, VALUE, MIN, MAX);
 #define BOUNDF(VALUE,MIN,MAX) if (VALUE < MIN || VALUE >= MAX) Host_Error("model %s has an invalid ##VALUE (%f exceeds %f - %f)", loadmodel->name, VALUE, MIN, MAX);
-void Mod_IDP0_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_IDP0_Load(model_t *mod, void *buffer, void *bufferend)
 {
        int i, j, version, totalskins, skinwidth, skinheight, groupframes, groupskins, numverts;
        float scales, scalet, interval;
@@ -1006,13 +1006,13 @@ void Mod_IDP0_Load(dp_model_t *mod, void *buffer, void *bufferend)
        loadmodel->type = mod_alias;
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        // FIXME add TraceBrush!
@@ -1044,6 +1044,9 @@ void Mod_IDP0_Load(dp_model_t *mod, void *buffer, void *bufferend)
        i = LittleLong (pinmodel->flags);
        loadmodel->effects = ((i & 255) << 24) | (i & 0x00FFFF00);
 
+       if (strstr(r_nolerp_list.string, loadmodel->name))
+               loadmodel->nolerp = true;
+
        for (i = 0;i < 3;i++)
        {
                loadmodel->surfmesh.num_morphmdlframescale[i] = LittleFloat (pinmodel->scale[i]);
@@ -1322,13 +1325,13 @@ void Mod_IDP0_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
-void Mod_IDP2_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_IDP2_Load(model_t *mod, void *buffer, void *bufferend)
 {
        int i, j, hashindex, numxyz, numst, xyz, st, skinwidth, skinheight, *vertremap, version, end;
        float iskinwidth, iskinheight;
@@ -1362,13 +1365,13 @@ void Mod_IDP2_Load(dp_model_t *mod, void *buffer, void *bufferend)
        loadmodel->type = mod_alias;
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -1586,13 +1589,13 @@ void Mod_IDP2_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
-void Mod_IDP3_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_IDP3_Load(model_t *mod, void *buffer, void *bufferend)
 {
        int i, j, k, version, meshvertices, meshtriangles;
        unsigned char *data;
@@ -1621,13 +1624,13 @@ void Mod_IDP3_Load(dp_model_t *mod, void *buffer, void *bufferend)
        loadmodel->type = mod_alias;
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -1776,13 +1779,13 @@ void Mod_IDP3_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
-void Mod_ZYMOTICMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_ZYMOTICMODEL_Load(model_t *mod, void *buffer, void *bufferend)
 {
        zymtype1header_t *pinmodel, *pheader;
        unsigned char *pbase;
@@ -1856,13 +1859,13 @@ void Mod_ZYMOTICMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
 
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -2169,13 +2172,13 @@ void Mod_ZYMOTICMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
-void Mod_DARKPLACESMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_DARKPLACESMODEL_Load(model_t *mod, void *buffer, void *bufferend)
 {
        dpmheader_t *pheader;
        dpmframe_t *frames;
@@ -2233,13 +2236,13 @@ void Mod_DARKPLACESMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
 
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -2543,15 +2546,15 @@ void Mod_DARKPLACESMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
 // no idea why PSK/PSA files contain weird quaternions but they do...
 #define PSKQUATNEGATIONS
-void Mod_PSKMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_PSKMODEL_Load(model_t *mod, void *buffer, void *bufferend)
 {
        int i, j, index, version, recordsize, numrecords, meshvertices, meshtriangles;
        int numpnts, numvtxw, numfaces, nummatts, numbones, numrawweights, numanimbones, numanims, numanimkeys;
@@ -2582,13 +2585,13 @@ void Mod_PSKMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
        loadmodel->type = mod_alias;
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -3214,13 +3217,13 @@ void Mod_PSKMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }
 
-void Mod_INTERQUAKEMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
+void Mod_INTERQUAKEMODEL_Load(model_t *mod, void *buffer, void *bufferend)
 {
        unsigned char *data;
        const char *text;
@@ -3406,13 +3409,13 @@ void Mod_INTERQUAKEMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
 
        loadmodel->DrawSky = NULL;
        loadmodel->DrawAddWaterPlanes = NULL;
-       loadmodel->Draw = R_Q1BSP_Draw;
-       loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
-       loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
-       loadmodel->DrawPrepass = R_Q1BSP_DrawPrepass;
-       loadmodel->CompileShadowMap = R_Q1BSP_CompileShadowMap;
-       loadmodel->DrawShadowMap = R_Q1BSP_DrawShadowMap;
-       loadmodel->DrawLight = R_Q1BSP_DrawLight;
+       loadmodel->Draw = R_Mod_Draw;
+       loadmodel->DrawDepth = R_Mod_DrawDepth;
+       loadmodel->DrawDebug = R_Mod_DrawDebug;
+       loadmodel->DrawPrepass = R_Mod_DrawPrepass;
+       loadmodel->CompileShadowMap = R_Mod_CompileShadowMap;
+       loadmodel->DrawShadowMap = R_Mod_DrawShadowMap;
+       loadmodel->DrawLight = R_Mod_DrawLight;
        loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
        loadmodel->TraceLine = Mod_MDLMD2MD3_TraceLine;
        loadmodel->PointSuperContents = NULL;
@@ -3961,8 +3964,8 @@ void Mod_INTERQUAKEMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
        for (i = 0;i < loadmodel->num_textures;i++)
        {
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_SKY))
-                       mod->DrawSky = R_Q1BSP_DrawSky;
+                       mod->DrawSky = R_Mod_DrawSky;
                if (loadmodel->data_textures[i].basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION | MATERIALFLAG_CAMERA))
-                       mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
+                       mod->DrawAddWaterPlanes = R_Mod_DrawAddWaterPlanes;
        }
 }