mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
Rewrote music playback to be more sensible. Hopefully this will get rid of the crashes that the handful of people reported. Needs to be fully tested.
Also, not sure what to do re: map screen. OG seems to keep playing the currently playing track, which seems slightly janky? should we just play track 19? # Conflicts: # source/exhumed/src/cd.cpp # source/exhumed/src/cd.h
This commit is contained in:
parent
115675417a
commit
e115058cd3
7 changed files with 37 additions and 78 deletions
|
@ -31,28 +31,14 @@ BEGIN_PS_NS
|
|||
extern short word_9AC30;
|
||||
|
||||
static char *pTrack = NULL;
|
||||
int trackhandle = -1;
|
||||
static int trackhandle = -1;
|
||||
int nLastVolumeSet = 0;
|
||||
|
||||
/* TODO
|
||||
|
||||
int cd_check_device_present()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
Currently playing music must keep playing on return to map screen or exit from training level
|
||||
|
||||
int initcdaudio()
|
||||
{
|
||||
if (!cd_check_device_present())
|
||||
{
|
||||
word_9AC30 = 1;
|
||||
|
||||
// return to text video mode
|
||||
initprintf("No MSCDEX driver installed!\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
void setCDaudiovolume(int val)
|
||||
{
|
||||
|
@ -61,13 +47,13 @@ void setCDaudiovolume(int val)
|
|||
}
|
||||
}
|
||||
|
||||
int playCDtrack(int nTrack)
|
||||
bool playCDtrack(int nTrack, bool bLoop)
|
||||
{
|
||||
if (nTrack < 2) {
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
nCDTrackLength = 0;
|
||||
StopCD();
|
||||
|
||||
char filename[128];
|
||||
|
||||
|
@ -80,7 +66,7 @@ int playCDtrack(int nTrack)
|
|||
sprintf(filename, "exhumed%02d.ogg", nTrack);
|
||||
hFile = kopen4load(filename, 0);
|
||||
if (hFile < 0) {
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,7 +77,7 @@ int playCDtrack(int nTrack)
|
|||
{
|
||||
OSD_Printf("Error allocating music track data memory for %s", filename);
|
||||
kclose(hFile);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int nRead = kread(hFile, pTrack, nFileLen);
|
||||
|
@ -101,12 +87,12 @@ int playCDtrack(int nTrack)
|
|||
Xaligned_free(pTrack);
|
||||
pTrack = NULL;
|
||||
kclose(hFile);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
kclose(hFile);
|
||||
|
||||
trackhandle = FX_Play(pTrack, nRead, -1, 0, 0, 255, 255, 255, FX_MUSIC_PRIORITY, fix16_one, MUSIC_ID);
|
||||
trackhandle = FX_Play(pTrack, nRead, bLoop ? 0 : -1, 0, 0, 255, 255, 255, FX_MUSIC_PRIORITY, fix16_one, MUSIC_ID);
|
||||
if (trackhandle <= FX_Ok)
|
||||
{
|
||||
OSD_Printf("Error playing music track %s", filename);
|
||||
|
@ -115,14 +101,12 @@ int playCDtrack(int nTrack)
|
|||
Xaligned_free(pTrack);
|
||||
pTrack = NULL;
|
||||
}
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
setCDaudiovolume(gMusicVolume);
|
||||
|
||||
nCDTrackLength = 1;
|
||||
|
||||
return nCDTrackLength;
|
||||
return true;
|
||||
}
|
||||
|
||||
void StartfadeCDaudio()
|
||||
|
@ -157,13 +141,13 @@ int StepFadeCDaudio()
|
|||
return 1;
|
||||
}
|
||||
|
||||
int CDplaying()
|
||||
bool CDplaying()
|
||||
{
|
||||
if (trackhandle > 0 && pTrack) { // better way to do this?
|
||||
return 1;
|
||||
if (trackhandle <= 0) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
return FX_SoundActive(trackhandle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,8 +158,6 @@ void StopCD()
|
|||
trackhandle = -1;
|
||||
}
|
||||
|
||||
nCDTrackLength = 0;
|
||||
|
||||
if (pTrack)
|
||||
{
|
||||
Xaligned_free(pTrack);
|
||||
|
|
|
@ -20,15 +20,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
#define __cd_h__
|
||||
|
||||
BEGIN_PS_NS
|
||||
|
||||
extern int trackhandle;
|
||||
|
||||
int initcdaudio();
|
||||
void setCDaudiovolume(int val);
|
||||
int playCDtrack(int nTrack);
|
||||
bool playCDtrack(int nTrack, bool bLoop);
|
||||
void StartfadeCDaudio();
|
||||
int StepFadeCDaudio();
|
||||
int CDplaying();
|
||||
bool CDplaying();
|
||||
void StopCD();
|
||||
|
||||
END_PS_NS
|
||||
|
|
|
@ -738,15 +738,9 @@ short nCurBodyNum = 0;
|
|||
|
||||
short nBodyTotal = 0;
|
||||
|
||||
|
||||
short textpages;
|
||||
|
||||
short nCDTrackLength = 0;
|
||||
|
||||
short lastfps;
|
||||
|
||||
short nCDTracks = 0;
|
||||
|
||||
short nMapMode = 0;
|
||||
short bNoCreatures = kFalse;
|
||||
|
||||
|
@ -873,13 +867,11 @@ void timerhandler()
|
|||
scan_char = 0;
|
||||
lastfps = fps;
|
||||
fps = 0;
|
||||
|
||||
// if (nCDTrackLength > 0) {
|
||||
// nCDTrackLength--;
|
||||
// }
|
||||
}
|
||||
if (!bInMove)
|
||||
|
||||
if (!bInMove) {
|
||||
OSD_DispatchQueued();
|
||||
}
|
||||
}
|
||||
|
||||
void HandleAsync()
|
||||
|
@ -1338,7 +1330,7 @@ void DoCredits()
|
|||
{
|
||||
NoClip();
|
||||
|
||||
playCDtrack(19);
|
||||
playCDtrack(19, false);
|
||||
|
||||
int var_20 = 0;
|
||||
|
||||
|
@ -1976,7 +1968,6 @@ int app_main(int argc, char const* const* argv)
|
|||
}
|
||||
|
||||
ResetPassword();
|
||||
nCDTracks = initcdaudio();
|
||||
|
||||
// GetCurPal(NULL);
|
||||
|
||||
|
@ -2284,7 +2275,7 @@ LOOP3:
|
|||
lPlayerXVel = 0;
|
||||
lPlayerYVel = 0;
|
||||
movefifopos = movefifoend;
|
||||
// nCDTrackLength = 0;
|
||||
|
||||
RefreshStatus();
|
||||
|
||||
if (bSerialPlay) {
|
||||
|
@ -2306,19 +2297,16 @@ LOOP3:
|
|||
|
||||
HandleAsync();
|
||||
OSD_DispatchQueued();
|
||||
|
||||
// Section B
|
||||
if (!nCDTrackLength && !nFreeze && !nNetPlayerCount)
|
||||
if (!CDplaying() && !nFreeze && !nNetPlayerCount)
|
||||
{
|
||||
int nTrack = levelnum;
|
||||
if (nTrack != 0) {
|
||||
nTrack--;
|
||||
}
|
||||
|
||||
nCDTrackLength = playCDtrack((nTrack % 8) + 11);
|
||||
|
||||
if (!nCDTrackLength) {
|
||||
nCDTrackLength = -1;
|
||||
}
|
||||
playCDtrack((nTrack % 8) + 11, true);
|
||||
}
|
||||
|
||||
// TODO CONTROL_GetButtonInput();
|
||||
|
@ -2714,13 +2702,12 @@ void DoTitle()
|
|||
|
||||
EraseScreen(4);
|
||||
|
||||
playCDtrack(19);
|
||||
playCDtrack(19, true);
|
||||
|
||||
videoNextPage();
|
||||
FadeIn();
|
||||
WaitVBL();
|
||||
|
||||
|
||||
int String_Copyright = FindGString("COPYRIGHT");
|
||||
|
||||
const char *a = gString[String_Copyright];
|
||||
|
@ -3103,9 +3090,7 @@ void InitSpiritHead()
|
|||
nTrack = 7;
|
||||
}
|
||||
|
||||
nCDTrackLength = playCDtrack(nTrack);
|
||||
|
||||
bSubTitles = nCDTrackLength == 0;
|
||||
bSubTitles = playCDtrack(nTrack, false) == 0;
|
||||
|
||||
StartSwirlies();
|
||||
|
||||
|
|
|
@ -103,8 +103,6 @@ void HandleAsync();
|
|||
extern int32_t g_commandSetup;
|
||||
extern int32_t g_noSetup;
|
||||
|
||||
extern short nCDTrackLength;
|
||||
|
||||
extern char sHollyStr[];
|
||||
|
||||
extern int localclock;
|
||||
|
|
|
@ -1893,10 +1893,9 @@ void ReadyCinemaText(uint16_t nVal)
|
|||
|
||||
uint8_t AdvanceCinemaText()
|
||||
{
|
||||
int var_1C = nCDTrackLength;
|
||||
int tmp = nHeight + nCrawlY > 0;
|
||||
|
||||
if (tmp || nCDTrackLength && nCDTrackLength > 0)
|
||||
if (tmp || CDplaying())
|
||||
{
|
||||
nextclock = (int)totalclock + 14;
|
||||
|
||||
|
@ -1928,7 +1927,7 @@ uint8_t AdvanceCinemaText()
|
|||
break;
|
||||
}
|
||||
|
||||
if (var_1C || nCDTrackLength)
|
||||
if (CDplaying())
|
||||
{
|
||||
if (nextclock <= (int)totalclock) {
|
||||
return kTrue;
|
||||
|
@ -2094,7 +2093,7 @@ void GoToTheCinema(int nVal)
|
|||
fadecdaudio();
|
||||
}
|
||||
|
||||
playCDtrack(edx + 2); // , 1);
|
||||
playCDtrack(edx + 2, false);
|
||||
}
|
||||
|
||||
DoCinemaText(ebx);
|
||||
|
@ -2102,7 +2101,7 @@ void GoToTheCinema(int nVal)
|
|||
|
||||
FadeOut(kTrue);
|
||||
|
||||
overwritesprite(0, 0, 764, 100, 2, kPalNormal);
|
||||
overwritesprite(0, 0, kMovieTile, 100, 2, kPalNormal);
|
||||
videoNextPage();
|
||||
|
||||
GrabPalette();
|
||||
|
@ -2169,7 +2168,7 @@ void DoFailedFinalScene()
|
|||
fadecdaudio();
|
||||
}
|
||||
|
||||
playCDtrack(9);
|
||||
playCDtrack(9, false);
|
||||
FadeToWhite();
|
||||
|
||||
GoToTheCinema(4);
|
||||
|
|
|
@ -297,8 +297,6 @@ void CalcASSPan(int nPan, int nVolume, int *pLeft, int *pRight)
|
|||
void ASSCallback(intptr_t num)
|
||||
{
|
||||
if ((int32_t)num == MUSIC_ID) {
|
||||
trackhandle = -1;
|
||||
StopCD();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1181,7 +1179,7 @@ void StopAllSounds(void)
|
|||
|
||||
for (int i = 0; i < kMaxActiveSounds; i++)
|
||||
{
|
||||
if (sActiveSound[i].f_e >= 0 && sActiveSound[i].f_e != trackhandle)
|
||||
if (sActiveSound[i].f_e >= 0)
|
||||
FX_StopSound(sActiveSound[i].f_e);
|
||||
// AIL_end_sample(sActiveSound[i].f_e);
|
||||
}
|
||||
|
|
|
@ -596,9 +596,10 @@ void DrawView(int smoothRatio)
|
|||
I_AdvanceTriggerClear();
|
||||
levelnew = levelnum + 1;
|
||||
|
||||
if (CDplaying())
|
||||
if (CDplaying()) {
|
||||
fadecdaudio();
|
||||
}
|
||||
}
|
||||
|
||||
videoSetViewableArea(nViewLeft, nViewTop, nViewRight, nViewBottom);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue