static qboolean initialized = false;
static qboolean enabled = false;
static float cdvolume;
-static unsigned char remap[MAXTRACKS];
+typedef char filename_t[MAX_QPATH];
+static filename_t remap[MAXTRACKS];
static unsigned char maxTrack;
static int faketrack = -1;
void CDAudio_Play_byName (const char *trackname, qboolean looping)
{
- unsigned char track;
+ unsigned int track;
sfx_t* sfx;
Host_StartVideo();
if(strspn(trackname, "0123456789") == strlen(trackname))
{
track = (unsigned char) atoi(trackname);
- track = remap[track];
+ if(track > 0 && track < MAXTRACKS)
+ if(*remap[track])
+ trackname = remap[track];
+ }
+
+ if(strspn(trackname, "0123456789") == strlen(trackname))
+ {
+ track = (unsigned char) atoi(trackname);
if (track < 1)
{
Con_Printf("CDAudio: Bad track number %u.\n", track);
S_SetChannelFlag (faketrack, CHANNELFLAG_FORCELOOP, true);
S_SetChannelFlag (faketrack, CHANNELFLAG_FULLVOLUME, true);
if(track >= 1)
- Con_DPrintf ("Fake CD track %u playing...\n", track);
+ Con_Printf ("Fake CD track %u playing...\n", track);
else
- Con_DPrintf ("BGM track %s playing...\n", trackname);
+ Con_Printf ("BGM track %s playing...\n", trackname);
}
}
Con_Print("Could not load BGM track.\n");
return;
}
-
+
if (!cdValid)
{
CDAudio_GetAudioDiskInfo();
if (faketrack != -1)
{
- S_StopChannel (faketrack);
+ S_StopChannel (faketrack, true);
faketrack = -1;
}
- else if (CDAudio_SysStop() == -1)
+ else if (cdPlaying && (CDAudio_SysStop() == -1))
return;
wasPlaying = false;
if (cdPlaying)
CDAudio_Stop();
for (n = 0; n < MAXTRACKS; n++)
- remap[n] = n;
+ *remap[n] = 0; // empty string, that is, unremapped
CDAudio_GetAudioDiskInfo();
return;
}
if (ret <= 0)
{
for (n = 1; n < MAXTRACKS; n++)
- if (remap[n] != n)
- Con_Printf(" %u -> %u\n", n, remap[n]);
+ if (*remap[n])
+ Con_Printf(" %u -> %s\n", n, remap[n]);
return;
}
for (n = 1; n <= ret; n++)
- remap[n] = atoi(Cmd_Argv (n+1));
+ strlcpy(remap[n], Cmd_Argv (n+1), sizeof(*remap));
return;
}
CDAudio_SysInit();
for (i = 0; i < MAXTRACKS; i++)
- remap[i] = i;
+ *remap[i] = 0;
Cvar_RegisterVariable(&cdaudioinitialized);
Cvar_SetValueQuick(&cdaudioinitialized, true);