models: check mda before md2 on load

This commit is contained in:
Denis Pauk 2024-09-15 23:31:28 +03:00
parent 6ba618fc42
commit 105b019130
3 changed files with 38 additions and 17 deletions

View file

@ -2894,6 +2894,17 @@ Mod_LoadModel_MDA_Text(const char *mod_name, char *curr_buff,
{ {
void *extradata, *base; void *extradata, *base;
int base_size; int base_size;
char *curr;
curr = base_model;
while (*curr)
{
if (*curr == '\\')
{
*curr = '/';
}
curr++;
}
base_size = read_file(base_model, (void **)&base); base_size = read_file(base_model, (void **)&base);
if (base_size <= 0) if (base_size <= 0)
@ -3250,12 +3261,13 @@ Mod_ReLoadSkins(struct image_s **skins, findimage_t find_image, loadimage_t load
else if (type == mod_alias) else if (type == mod_alias)
{ {
dmdx_t *pheader; dmdx_t *pheader;
int i;
pheader = (dmdx_t *)extradata; pheader = (dmdx_t *)extradata;
if (pheader->ofs_imgbit && load_image) if (pheader->ofs_imgbit && load_image)
{ {
byte* images = (byte *)pheader + pheader->ofs_imgbit; byte* images = (byte *)pheader + pheader->ofs_imgbit;
int i;
for (i = 0; i < pheader->num_skins; i++) for (i = 0; i < pheader->num_skins; i++)
{ {
skins[i] = load_image( skins[i] = load_image(
@ -3269,7 +3281,9 @@ Mod_ReLoadSkins(struct image_s **skins, findimage_t find_image, loadimage_t load
} }
else else
{ {
for (i=0; i < pheader->num_skins; i++) int i;
for (i = 0; i < pheader->num_skins; i++)
{ {
skins[i] = find_image((char *)pheader + pheader->ofs_skins + i*MAX_SKINNAME, it_skin); skins[i] = find_image((char *)pheader + pheader->ofs_skins + i*MAX_SKINNAME, it_skin);
} }

View file

@ -287,16 +287,6 @@ Mod_LoadFileWithoutExt(const char *namewe, void **buffer, const char* ext)
return filesize; return filesize;
} }
/* Check Quake 2 model */
Q_strlcpy(newname + tlen, ".md2", sizeof(newname));
filesize = FS_LoadFile(newname, buffer);
if (filesize > 0)
{
Com_DPrintf("%s: %s loaded as md2 (Quake 2/Anachronox)\n",
__func__, namewe);
return filesize;
}
/* Check Anachronox model definition */ /* Check Anachronox model definition */
Q_strlcpy(newname + tlen, ".mda", sizeof(newname)); Q_strlcpy(newname + tlen, ".mda", sizeof(newname));
filesize = FS_LoadFile(newname, buffer); filesize = FS_LoadFile(newname, buffer);
@ -307,6 +297,16 @@ Mod_LoadFileWithoutExt(const char *namewe, void **buffer, const char* ext)
return filesize; return filesize;
} }
/* Check Quake 2 model */
Q_strlcpy(newname + tlen, ".md2", sizeof(newname));
filesize = FS_LoadFile(newname, buffer);
if (filesize > 0)
{
Com_DPrintf("%s: %s loaded as md2 (Quake 2/Anachronox)\n",
__func__, namewe);
return filesize;
}
/* Check Kingpin model */ /* Check Kingpin model */
Q_strlcpy(newname + tlen, ".mdx", sizeof(newname)); Q_strlcpy(newname + tlen, ".mdx", sizeof(newname));
filesize = FS_LoadFile(newname, buffer); filesize = FS_LoadFile(newname, buffer);

View file

@ -214,12 +214,15 @@ ED_CallSpawn(edict_t *ent)
} }
} }
i = DynamicSpawnSearch(ent->classname); if (dynamicentities && ndynamicentities)
if (i >= 0)
{ {
DynamicSpawn(ent, &dynamicentities[i]); i = DynamicSpawnSearch(ent->classname);
if (i >= 0)
{
DynamicSpawn(ent, &dynamicentities[i]);
return; return;
}
} }
gi.dprintf("%s doesn't have a spawn function\n", ent->classname); gi.dprintf("%s doesn't have a spawn function\n", ent->classname);
@ -1715,11 +1718,12 @@ DynamicIntParse(char *line, int *field)
static char * static char *
DynamicFloatParse(char *line, float *field, int size) DynamicFloatParse(char *line, float *field, int size)
{ {
char *next_section;
int i; int i;
for (i = 0; i < size; i++) for (i = 0; i < size; i++)
{ {
char *next_section;
next_section = strchr(line, '|'); next_section = strchr(line, '|');
if (next_section) if (next_section)
{ {
@ -1750,6 +1754,9 @@ DynamicSpawnInit(void)
buf = NULL; buf = NULL;
len = 0; len = 0;
dynamicentities = NULL;
ndynamicentities = 0;
/* load the file */ /* load the file */
len = gi.FS_LoadFile("models/entity.dat", (void **)&raw); len = gi.FS_LoadFile("models/entity.dat", (void **)&raw);
if (len > 1) if (len > 1)