mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Factor out filename-based music setup code into G_SetupFilenameBasedMusic.
There were two instances of nearly identical code in premap.c and savegame.c. Also identifies a (harmless) problem with realloc'ing, we had: if (len+1 > sizeof(MapInfo[...].musicfn)) MapInfo[...].musicfn = Brealloc(MapInfo[...].musicfn, len+1) which reallocs almost all the time (since .musicfn is a pointer). Now we do realloc every time... git-svn-id: https://svn.eduke32.com/eduke32@2202 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
bf00465922
commit
8ecb6e6bd5
3 changed files with 56 additions and 95 deletions
|
@ -1831,6 +1831,58 @@ static void G_LoadMapHack(char *outbuf, const char *filename)
|
|||
initprintf("Loaded map hack file '%s'\n",outbuf);
|
||||
}
|
||||
|
||||
static void realloc_and_copy_musicfn(int32_t level_number, const char *levnamebuf, int32_t altp)
|
||||
{
|
||||
char **musicfn = altp ? &MapInfo[level_number].alt_musicfn : &MapInfo[level_number].musicfn;
|
||||
int32_t dastrlen = Bstrlen(levnamebuf);
|
||||
|
||||
*musicfn = Brealloc(*musicfn, dastrlen+1);
|
||||
Bstrcpy(*musicfn, levnamebuf);
|
||||
}
|
||||
|
||||
// levnamebuf should have at least size BMAX_PATH
|
||||
void G_SetupFilenameBasedMusic(char *levnamebuf, const char *boardfilename, int32_t level_number)
|
||||
{
|
||||
char *p;
|
||||
int32_t fil;
|
||||
|
||||
Bstrcpy(levnamebuf, boardfilename);
|
||||
|
||||
// usermap music based on map filename
|
||||
Bcorrectfilename(levnamebuf,0);
|
||||
|
||||
p = Bstrrchr(levnamebuf,'.');
|
||||
if (!p)
|
||||
{
|
||||
p = levnamebuf + Bstrlen(levnamebuf);
|
||||
p[0] = '.';
|
||||
}
|
||||
|
||||
Bmemcpy(p+1, "ogg", 4);
|
||||
fil = kopen4loadfrommod(levnamebuf,0);
|
||||
|
||||
if (fil > -1)
|
||||
{
|
||||
kclose(fil);
|
||||
|
||||
realloc_and_copy_musicfn(level_number, levnamebuf, 1);
|
||||
}
|
||||
else if (MapInfo[level_number].alt_musicfn != NULL)
|
||||
{
|
||||
Bfree(MapInfo[level_number].alt_musicfn);
|
||||
MapInfo[level_number].alt_musicfn = NULL;
|
||||
}
|
||||
|
||||
Bmemcpy(p+1, "mid", 4);
|
||||
fil = kopen4loadfrommod(levnamebuf,0);
|
||||
|
||||
if (fil == -1)
|
||||
Bstrcpy(levnamebuf, "dethtoll.mid");
|
||||
else kclose(fil);
|
||||
|
||||
realloc_and_copy_musicfn(level_number, levnamebuf, 0);
|
||||
}
|
||||
|
||||
int32_t G_EnterLevel(int32_t g)
|
||||
{
|
||||
int32_t i;
|
||||
|
@ -1929,58 +1981,9 @@ int32_t G_EnterLevel(int32_t g)
|
|||
return 1;
|
||||
}
|
||||
|
||||
{
|
||||
char *p;
|
||||
G_LoadMapHack(levname, boardfilename);
|
||||
|
||||
G_LoadMapHack(levname, boardfilename);
|
||||
|
||||
// usermap music based on map filename
|
||||
Bcorrectfilename(levname,0);
|
||||
p = Bstrrchr(levname,'.');
|
||||
if (p)
|
||||
{
|
||||
int32_t fil;
|
||||
|
||||
p[1]='o';
|
||||
p[2]='g';
|
||||
p[3]='g';
|
||||
p[4]=0;
|
||||
|
||||
fil = kopen4loadfrommod(levname,0);
|
||||
|
||||
if (fil > -1)
|
||||
{
|
||||
kclose(fil);
|
||||
if (MapInfo[ud.m_level_number].alt_musicfn == NULL)
|
||||
MapInfo[ud.m_level_number].alt_musicfn = Bcalloc(Bstrlen(levname)+1,sizeof(uint8_t));
|
||||
else if ((Bstrlen(levname)+1) > sizeof(MapInfo[ud.m_level_number].alt_musicfn))
|
||||
MapInfo[ud.m_level_number].alt_musicfn = Brealloc(MapInfo[ud.m_level_number].alt_musicfn,(Bstrlen(levname)+1));
|
||||
Bstrcpy(MapInfo[ud.m_level_number].alt_musicfn,levname);
|
||||
}
|
||||
else if (MapInfo[ud.m_level_number].alt_musicfn != NULL)
|
||||
{
|
||||
Bfree(MapInfo[ud.m_level_number].alt_musicfn);
|
||||
MapInfo[ud.m_level_number].alt_musicfn = NULL;
|
||||
}
|
||||
|
||||
p[1]='m';
|
||||
p[2]='i';
|
||||
p[3]='d';
|
||||
p[4]=0;
|
||||
|
||||
fil = kopen4loadfrommod(levname,0);
|
||||
|
||||
if (fil == -1)
|
||||
Bsprintf(levname,"dethtoll.mid");
|
||||
else kclose(fil);
|
||||
|
||||
if (MapInfo[ud.m_level_number].musicfn == NULL)
|
||||
MapInfo[ud.m_level_number].musicfn = Bcalloc(Bstrlen(levname)+1,sizeof(uint8_t));
|
||||
else if ((Bstrlen(levname)+1) > sizeof(MapInfo[ud.m_level_number].musicfn))
|
||||
MapInfo[ud.m_level_number].musicfn = Brealloc(MapInfo[ud.m_level_number].musicfn,(Bstrlen(levname)+1));
|
||||
Bstrcpy(MapInfo[ud.m_level_number].musicfn,levname);
|
||||
}
|
||||
}
|
||||
G_SetupFilenameBasedMusic(levname, boardfilename, ud.m_level_number);
|
||||
}
|
||||
else if (loadboard(MapInfo[(ud.volume_number*MAXLEVELS)+ud.level_number].filename,0,&g_player[0].ps->pos.x,
|
||||
&g_player[0].ps->pos.y, &g_player[0].ps->pos.z, &g_player[0].ps->ang,&g_player[0].ps->cursectnum) == -1)
|
||||
|
|
|
@ -31,6 +31,7 @@ extern int32_t g_levelTextTime;
|
|||
extern int32_t g_numRealPalettes;
|
||||
extern int32_t voting,vote_map,vote_episode;
|
||||
extern palette_t CrosshairColors;
|
||||
void G_SetupFilenameBasedMusic(char *levnamebuf, const char *boardfilename, int32_t level_number);
|
||||
int32_t G_EnterLevel(int32_t g);
|
||||
int32_t G_FindLevelByFile(const char *fn);
|
||||
void G_CacheMapData(void);
|
||||
|
|
|
@ -549,52 +549,9 @@ int32_t G_LoadPlayer(int32_t spot)
|
|||
|
||||
if (boardfilename[0] != 0 && ud.level_number == 7 && ud.volume_number == 0)
|
||||
{
|
||||
char *p;
|
||||
char levname[BMAX_PATH];
|
||||
int32_t fil;
|
||||
|
||||
Bstrcpy(levname, boardfilename);
|
||||
|
||||
// usermap music based on map filename
|
||||
Bcorrectfilename(levname,0);
|
||||
p = Bstrrchr(levname,'.');
|
||||
if (!p)
|
||||
{
|
||||
p = levname + Bstrlen(levname);
|
||||
p[0] = '.';
|
||||
}
|
||||
|
||||
Bmemcpy(p+1, "ogg", 4);
|
||||
fil = kopen4loadfrommod(levname,0);
|
||||
|
||||
if (fil > -1)
|
||||
{
|
||||
kclose(fil);
|
||||
|
||||
if (MapInfo[ud.level_number].alt_musicfn == NULL)
|
||||
MapInfo[ud.level_number].alt_musicfn = Bcalloc(Bstrlen(levname)+1,sizeof(uint8_t));
|
||||
else if ((Bstrlen(levname)+1) > sizeof(MapInfo[ud.level_number].alt_musicfn))
|
||||
MapInfo[ud.level_number].alt_musicfn = Brealloc(MapInfo[ud.level_number].alt_musicfn,(Bstrlen(levname)+1));
|
||||
Bstrcpy(MapInfo[ud.level_number].alt_musicfn,levname);
|
||||
}
|
||||
else if (MapInfo[ud.level_number].alt_musicfn != NULL)
|
||||
{
|
||||
Bfree(MapInfo[ud.level_number].alt_musicfn);
|
||||
MapInfo[ud.level_number].alt_musicfn = NULL;
|
||||
}
|
||||
|
||||
Bmemcpy(p+1, "mid", 4);
|
||||
fil = kopen4loadfrommod(levname,0);
|
||||
|
||||
if (fil == -1)
|
||||
Bstrcpy(levname,"dethtoll.mid");
|
||||
else kclose(fil);
|
||||
|
||||
if (MapInfo[ud.level_number].musicfn == NULL)
|
||||
MapInfo[ud.level_number].musicfn = Bcalloc(Bstrlen(levname)+1,sizeof(uint8_t));
|
||||
else if ((Bstrlen(levname)+1) > sizeof(MapInfo[ud.level_number].musicfn))
|
||||
MapInfo[ud.level_number].musicfn = Brealloc(MapInfo[ud.level_number].musicfn,(Bstrlen(levname)+1));
|
||||
Bstrcpy(MapInfo[ud.level_number].musicfn,levname);
|
||||
G_SetupFilenameBasedMusic(levname, boardfilename, ud.level_number);
|
||||
}
|
||||
|
||||
if (ud.config.MusicToggle)
|
||||
|
|
Loading…
Reference in a new issue