mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-11 18:50: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);
|
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 G_EnterLevel(int32_t g)
|
||||||
{
|
{
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
@ -1929,58 +1981,9 @@ int32_t G_EnterLevel(int32_t g)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
G_LoadMapHack(levname, boardfilename);
|
||||||
char *p;
|
|
||||||
|
|
||||||
G_LoadMapHack(levname, boardfilename);
|
G_SetupFilenameBasedMusic(levname, boardfilename, ud.m_level_number);
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (loadboard(MapInfo[(ud.volume_number*MAXLEVELS)+ud.level_number].filename,0,&g_player[0].ps->pos.x,
|
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)
|
&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 g_numRealPalettes;
|
||||||
extern int32_t voting,vote_map,vote_episode;
|
extern int32_t voting,vote_map,vote_episode;
|
||||||
extern palette_t CrosshairColors;
|
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_EnterLevel(int32_t g);
|
||||||
int32_t G_FindLevelByFile(const char *fn);
|
int32_t G_FindLevelByFile(const char *fn);
|
||||||
void G_CacheMapData(void);
|
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)
|
if (boardfilename[0] != 0 && ud.level_number == 7 && ud.volume_number == 0)
|
||||||
{
|
{
|
||||||
char *p;
|
|
||||||
char levname[BMAX_PATH];
|
char levname[BMAX_PATH];
|
||||||
int32_t fil;
|
|
||||||
|
|
||||||
Bstrcpy(levname, boardfilename);
|
G_SetupFilenameBasedMusic(levname, boardfilename, ud.level_number);
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ud.config.MusicToggle)
|
if (ud.config.MusicToggle)
|
||||||
|
|
Loading…
Reference in a new issue