models: move md5 merge code to separate function

This commit is contained in:
Denis Pauk 2024-01-28 18:12:23 +02:00
parent f57ef011b5
commit ca0e150232
2 changed files with 86 additions and 54 deletions

View file

@ -1416,39 +1416,46 @@ Mod_LoadModel(const char *mod_name, const void *buffer, int modfilelen,
}
static int
Mod_LoadFileWithoutExt(const char *namewe, void **buffer, const char* ext)
Mod_LoadFileMD5Merge(const char *namewe, void **buffer)
{
int fullsize, filesize_anim, filesize;
char *final_buffer = NULL;
void *anim_buffer = NULL;
char newname[256];
size_t tlen;
*buffer = NULL;
tlen = strlen(namewe);
if (!strcmp(ext, "fm") ||
!strcmp(ext, "dkm") ||
!strcmp(ext, "md2") ||
!strcmp(ext, "md5mesh") ||
!strcmp(ext, "mdl"))
{
int filesize;
/* Check ReRelease / Doom 3 / Quake 4 model */
Q_strlcpy(newname, namewe, sizeof(newname));
Q_strlcat(newname, ".md5mesh", sizeof(newname));
filesize = ri.FS_LoadFile(newname, buffer);
if (filesize > 0)
#if 0
if (filesize <= 0)
{
int fullsize, filesize_anim;
char *final_buffer = NULL;
void *anim_buffer = NULL;
const char *model_name;
char model_path[256];
Q_strlcpy(newname, namewe, sizeof(newname));
Q_strlcat(newname, ".md5anim", sizeof(newname));
model_name = COM_SkipPath(namewe);
memset(model_path, 0, sizeof(model_path));
memcpy(model_path, namewe, strlen(namewe) - strlen(model_name));
Q_strlcpy(newname, model_path, sizeof(newname));
Q_strlcat(newname, "md5/", sizeof(newname));
Q_strlcat(newname, model_name, sizeof(newname));
Q_strlcat(newname, ".md5mesh", sizeof(newname));
filesize = ri.FS_LoadFile(newname, buffer);
/* no replace file */
if (filesize <= 0)
{
return filesize;
}
}
#endif
memcpy(newname + strlen(newname) - strlen("mesh"), "anim", strlen("anim"));
filesize_anim = ri.FS_LoadFile(newname, &anim_buffer);
if (filesize_anim <= 0)
{
ri.FS_FreeFile(*buffer);
return filesize;
}
@ -1470,6 +1477,31 @@ Mod_LoadFileWithoutExt(const char *namewe, void **buffer, const char* ext)
return fullsize;
}
static int
Mod_LoadFileWithoutExt(const char *namewe, void **buffer, const char* ext)
{
char newname[256];
size_t tlen;
*buffer = NULL;
tlen = strlen(namewe);
if (!strcmp(ext, "fm") ||
!strcmp(ext, "dkm") ||
!strcmp(ext, "md2") ||
!strcmp(ext, "md5mesh") ||
!strcmp(ext, "mdl"))
{
int filesize;
/* Check ReRelease / Doom 3 / Quake 4 model */
filesize = Mod_LoadFileMD5Merge(namewe, buffer);
if (filesize > 0)
{
return filesize;
}
/* Check Heretic2 model */
Q_strlcpy(newname, namewe, sizeof(newname));
Q_strlcat(newname, ".fm", sizeof(newname));

View file

@ -310,7 +310,7 @@ AllocateFrames(md5_model_t *anim)
anim->num_tris += anim->meshes[i].num_tris;
}
R_Printf(PRINT_ALL, "mesh num tris %d / num vert %d\n",
R_Printf(PRINT_DEVELOPER, "mesh num tris %d / num vert %d\n",
anim->num_tris, anim->num_verts);
anim->vertexIndices = (int *)
@ -434,7 +434,7 @@ ReadMD5Anim(md5_model_t *anim, const char *buffer, size_t size)
}
else if (sscanf(buff, "frameRate %d", &anim->frameRate) == 1)
{
R_Printf(PRINT_ALL, "md5anim: animation's frame rate is %d\n", anim->frameRate);
R_Printf(PRINT_DEVELOPER, "md5anim: animation's frame rate is %d\n", anim->frameRate);
}
else if (sscanf(buff, "numAnimatedComponents %d", &numAnimatedComponents) == 1)
{