Exemple #1
0
void PlayLevelSong( int levelnum )
{
	int songnum;
	int n_tracks;
	int bD1Song = (gameData.missions.list[gameData.missions.nCurrentMission].descent_version == 1);

	Assert( levelnum != 0 );

	if ( !gameData.songs.bInitialized )
		songs_init();
	SongsStopAll();
	nCurrentLevelSong = levelnum;
	songnum = (levelnum > 0) ? levelnum - 1 : -levelnum;
	gameStates.sound.nCurrentSong = songnum;
	if (!RBAEnabled() && gameStates.sound.bRedbookEnabled && gameOpts->sound.bUseRedbook)
		reinit_redbook();
	if (force_rb_register) {
		RBARegisterCD();			//get new track list for new CD
		force_rb_register = 0;
	}
	if (gameStates.sound.bRedbookEnabled && RBAEnabled() && (n_tracks = RBAGetNumberOfTracks()) > 1) {
		//try to play redbook
		play_redbook_track(REDBOOK_FIRST_LEVEL_TRACK + (songnum % (n_tracks-REDBOOK_FIRST_LEVEL_TRACK+1)),1);
	}
	if (! gameStates.sound.bRedbookPlaying) {			//not playing redbook, so play midi
		songnum = gameData.songs.nLevelSongs [bD1Song] ? gameData.songs.nFirstLevelSong [bD1Song] + (songnum % gameData.songs.nLevelSongs [bD1Song]) : 0;
		gameStates.sound.nCurrentSong = songnum;
			DigiPlayMidiSong( 
				gameData.songs.info [songnum].filename, 
				gameData.songs.info [songnum].melodic_bank_file, 
				gameData.songs.info [songnum].drum_bank_file, 
				1, 
				bD1Song);
	}
}
Exemple #2
0
//returns 1 if track started sucessfully
//start at tracknum.  if keep_playing set, play to end of disc.  else
//play only specified track
int play_redbook_track(int tracknum,int keep_playing)
{
	gameStates.sound.bRedbookPlaying = 0;
#ifdef _DEBUG
	tracknum = 1;
#endif

	if (!RBAEnabled() && gameStates.sound.bRedbookEnabled && !gameOpts->sound.bUseRedbook)
		reinit_redbook();

	if (force_rb_register) {
		RBARegisterCD();			//get new track list for new CD
		force_rb_register = 0;
	}

	if (gameStates.sound.bRedbookEnabled && RBAEnabled()) {
		int num_tracks = RBAGetNumberOfTracks();
		if (tracknum <= num_tracks)
			if (RBAPlayTracks(tracknum,keep_playing?num_tracks:tracknum))  {
				gameStates.sound.bRedbookPlaying = tracknum;
			}
	}

	return (gameStates.sound.bRedbookPlaying != 0);
}
Exemple #3
0
void songs_play_song( int songnum, int repeat )
{
	#ifndef SHAREWARE
	//Assert(songnum != SONG_ENDLEVEL && songnum != SONG_ENDGAME);	//not in full version
	#endif

	if ( !gameData.songs.bInitialized )
		songs_init();

	//stop any music already playing
	if (!(gameStates.sound.bRedbookEnabled ? gameConfig.nRedbookVolume : gameConfig.nMidiVolume))
		return;
	SongsStopAll();

	//do we want any of these to be redbook songs?

	if (force_rb_register) {
		RBARegisterCD();			//get new track list for new CD
		force_rb_register = 0;
	}

	gameStates.sound.nCurrentSong = songnum;

	if (songnum == SONG_TITLE)
		play_redbook_track(REDBOOK_TITLE_TRACK,0);
	else if (songnum == SONG_CREDITS)
		play_redbook_track(REDBOOK_CREDITS_TRACK,0);

	if (!gameStates.sound.bRedbookPlaying) {		//not playing redbook, so play midi
		DigiPlayMidiSong(
			gameData.songs.info[songnum].filename, gameData.songs.info[songnum].melodic_bank_file, 
			gameData.songs.info[songnum].drum_bank_file, repeat, gameData.songs.nD1Songs && (songnum >= gameData.songs.nD2Songs) );
	}
}
Exemple #4
0
void SongsInit ()
{
	int	i, bD1Songs;
	char	*p, inputline [81];
	CFILE	cf;

if (gameData.songs.bInitialized)
	return;
CFUseD1HogFile ("descent.hog");
for (i = 0, bD1Songs = 0; bD1Songs < 2; bD1Songs++) {
		if (!FindArg ("-nomixer"))
			CD_blast_mixer ();   // Crank it!
	if (CFExist ("descent.sng", gameFolders.szDataDir, bD1Songs)) {   // mac (demo?) datafiles don't have the .sng file
		if (!CFOpen (&cf, "descent.sng", gameFolders.szDataDir, "rb", bD1Songs)) {
			if (bD1Songs)
				break;
			else
				Error ("Couldn't open descent.sng");
			}
		while (CFGetS (inputline, 80, &cf)) {
			if ((p = strchr (inputline,'\n')))
				*p = '\0';
			if (*inputline) {
				Assert(i < MAX_NUM_SONGS);
				if (3 == sscanf (inputline, "%s %s %s",
									  gameData.songs.info [i].filename,
									  gameData.songs.info [i].melodicBankFile,
									  gameData.songs.info [i].drumBankFile)) {
					if (!gameData.songs.nFirstLevelSong [bD1Songs] && strstr (gameData.songs.info [i].filename, "game01.hmp"))
						 gameData.songs.nFirstLevelSong [bD1Songs] = i;
					if (bD1Songs && strstr (gameData.songs.info [i].filename, "endlevel.hmp"))
						gameData.songs.nD1EndLevelSong = i;
					i++;
					}
				}
			}
		gameData.songs.nSongs [bD1Songs] = i;
		gameData.songs.nLevelSongs [bD1Songs] = gameData.songs.nSongs [bD1Songs] - gameData.songs.nFirstLevelSong [bD1Songs];
		if (!gameData.songs.nFirstLevelSong [bD1Songs])
			Error ("Descent 1 songs are missing.");
		CFClose(&cf);
		}
	gameData.songs.nTotalSongs = i;
	gameData.songs.bInitialized = 1;
	//	RBA Hook
	if (!gameOpts->sound.bUseRedbook)
		gameStates.sound.bRedbookEnabled = 0;
	else {	// use redbook
			RBAInit ();
		if (RBAEnabled ()) {
			SetRedbookVolume(gameConfig.nRedbookVolume);
			RBARegisterCD ();
			}
		}
	atexit(RBAStop);    // stop song on exit
	}
}
Exemple #5
0
void ReInitRedbook ()
{
RBAInit ();
if (RBAEnabled ()) {
	SetRedbookVolume (gameConfig.nRedbookVolume);
	RBARegisterCD ();
	bForceRBRegister = 0;
	}
}
Exemple #6
0
void reinit_redbook()
{
	#ifndef __MSDOS__
		RBAInit();
	#else
		RBAInit(toupper(CDROM_dir[0]) - 'A');
	#endif

	if (RBAEnabled())
	{
		set_redbook_volume(gameConfig.nRedbookVolume);
		RBARegisterCD();
		force_rb_register=0;
	}
}
Exemple #7
0
void PlayLevelSong (int nLevel, int bFromHog)
{
	int	nSong;
	int	nTracks;
	int	bD1Song = (gameData.missions.list [gameData.missions.nCurrentMission].nDescentVersion == 1);
	char	szFilename [FILENAME_LEN];

if (!nLevel)
	return;
if (!gameData.songs.bInitialized)
	SongsInit ();
SongsStopAll ();
nCurrentLevelSong = nLevel;
nSong = (nLevel > 0) ? nLevel - 1 : -nLevel;
gameStates.sound.nCurrentSong = nSong;
if (!RBAEnabled () && gameStates.sound.bRedbookEnabled && gameOpts->sound.bUseRedbook)
	ReInitRedbook ();
if (bForceRBRegister) {
	RBARegisterCD ();			//get new track list for new CD
	bForceRBRegister = 0;
	}
if (bFromHog) {
	strcpy (szFilename, LevelSongName (nLevel));
	if (*szFilename && CFExtract (szFilename, gameFolders.szDataDir, 0, szFilename)) {
		char	szSong [FILENAME_LEN];

		sprintf (szSong, "%s%s%s", gameFolders.szCacheDir, *gameFolders.szCacheDir ? "/" : "", szFilename);
		if (DigiPlayMidiSong (szSong, NULL, NULL, 1, 0))
			return;
		}
	}
if ((nLevel > 0) && gameData.songs.user.nLevelSongs) {
	if (DigiPlayMidiSong (gameData.songs.user.pszLevelSongs [(nLevel - 1) % gameData.songs.user.nLevelSongs], NULL, NULL, 1, 0))
		return;
	}
if (gameStates.sound.bRedbookEnabled && RBAEnabled () && (nTracks = RBAGetNumberOfTracks ()) > 1)	//try to play redbook
	PlayRedbookTrack (REDBOOK_FIRST_LEVEL_TRACK + (nSong % (nTracks-REDBOOK_FIRST_LEVEL_TRACK+1)),1);
if (!gameStates.sound.bRedbookPlaying) {			//not playing redbook, so play midi
	nSong = gameData.songs.nLevelSongs [bD1Song] ? gameData.songs.nFirstLevelSong [bD1Song] + (nSong % gameData.songs.nLevelSongs [bD1Song]) : 0;
	gameStates.sound.nCurrentSong = nSong;
		DigiPlayMidiSong (
			gameData.songs.info [nSong].filename,
			gameData.songs.info [nSong].melodicBankFile,
			gameData.songs.info [nSong].drumBankFile,
			1,
			bD1Song);
	}
}
Exemple #8
0
Fichier : rbtest.c Projet : btb/d2x
int main()
{
	fix fsecs;
	int oldmin=-1, oldsec=-1;

	error_init(NULL, NULL);
	dpmi_init(0);
	timer_init();
	key_init();
	RBAInit();
	RBARegisterCD();
	RBAPlayTrack(2);

	fsecs = timer_get_fixed_seconds();
	do
	{
		int min, sec, frame;
		long headloc;

		if ((timer_get_fixed_seconds() - fsecs) >= F2_0) {
			headloc = RBAGetHeadLoc(&min, &sec, &frame);
			printf("Head loc: %d (%d:%d:%d)\n", headloc, min, sec, frame);
			if (min==oldmin && sec==oldsec) {
				printf("\nRepeating track..\n");
				RBAPlayTrack(2);
			}
			oldmin = min; oldsec = sec;
			fsecs = timer_get_fixed_seconds();
		}
		if (key_inkey()) {
			RBAStop();
			printf("\nCD stopped.\n");
			break;
		}
	}
	while (1); 

	key_close();
	timer_close();

	return 0;
}
Exemple #9
0
void SongsPlaySong (int nSong, int repeat)
{
//Assert(nSong != SONG_ENDLEVEL && nSong != SONG_ENDGAME);	//not in full version
if (!gameData.songs.bInitialized)
	SongsInit ();
//stop any music already playing
if (!(gameStates.sound.bRedbookEnabled ? gameConfig.nRedbookVolume : gameConfig.nMidiVolume))
	return;
SongsStopAll ();
//do we want any of these to be redbook songs?
if (bForceRBRegister) {
	RBARegisterCD ();			//get new track list for new CD
	bForceRBRegister = 0;
	}
gameStates.sound.nCurrentSong = nSong;
if (nSong == SONG_TITLE) {
	if (*gameData.songs.user.szIntroSong &&
		DigiPlayMidiSong (gameData.songs.user.szIntroSong, NULL, NULL, repeat, 0))
		return;
	PlayRedbookTrack (REDBOOK_TITLE_TRACK, 0);
	}
else if (nSong == SONG_CREDITS) {
	if (*gameData.songs.user.szCreditsSong &&
		 DigiPlayMidiSong (gameData.songs.user.szCreditsSong, NULL, NULL, repeat, 0))
		return;
	PlayRedbookTrack (REDBOOK_CREDITS_TRACK, 0);
	}
else if (nSong == SONG_BRIEFING) {
	if (*gameData.songs.user.szBriefingSong &&
		 DigiPlayMidiSong (gameData.songs.user.szBriefingSong, NULL, NULL, repeat, 0))
		return;
	}
if (!gameStates.sound.bRedbookPlaying) {		//not playing redbook, so play midi
	DigiPlayMidiSong (
		gameData.songs.info [nSong].filename,
		gameData.songs.info [nSong].melodicBankFile,
		gameData.songs.info [nSong].drumBankFile,
		repeat, gameData.songs.nSongs [1] && (nSong >= gameData.songs.nSongs [0]));
	}
}
Exemple #10
0
//------------------------------------------------------------------------------
//returns 1 if track started sucessfully
//start at nTrack.  if bKeepPlaying set, play to end of disc.  else
//play only specified track
int PlayRedbookTrack (int nTrack, int bKeepPlaying)
{
gameStates.sound.bRedbookPlaying = 0;
#if DBG
nTrack = 1;
#endif

if (!RBAEnabled () && gameStates.sound.bRedbookEnabled && !gameOpts->sound.bUseRedbook)
	ReInitRedbook ();

if (bForceRBRegister) {
	RBARegisterCD ();			//get new track list for new CD
	bForceRBRegister = 0;
	}
if (gameStates.sound.bRedbookEnabled && RBAEnabled ()) {
	int nTracks = RBAGetNumberOfTracks ();
	if (nTrack <= nTracks)
		if (RBAPlayTracks(nTrack, bKeepPlaying ? nTracks : nTrack))  {
			gameStates.sound.bRedbookPlaying = nTrack;
			}
	}
return (gameStates.sound.bRedbookPlaying != 0);
}
Exemple #11
0
void songs_init()
{
	int i, bD1Songs;
	char inputline[80+1];
	CFILE * fp;

if ( gameData.songs.bInitialized ) 
	return;
CFUseD1HogFile("descent.hog");
for (bD1Songs = 0; bD1Songs < 2; bD1Songs++) {
	#if !defined(WINDOWS)
		if (!FindArg("-nomixer"))
			CD_blast_mixer();   // Crank it!
	#endif
	if (CFExist("descent.sng", gameFolders.szDataDir, bD1Songs)) {   // mac (demo?) datafiles don't have the .sng file
		fp = CFOpen( "descent.sng", gameFolders.szDataDir, "rb", bD1Songs );
		if ( fp == NULL ) {
			if (bD1Songs)
				break;
			else
				Error( "Couldn't open descent.sng" );
			}
		i = gameData.songs.nSongs;
		while (CFGetS(inputline, 80, fp ))
		{
			char *p = strchr(inputline,'\n');
			if (p) *p = '\0';
			if ( strlen( inputline ) )
			{
				Assert( i < MAX_NUM_SONGS );
				sscanf( inputline, "%s %s %s",
						gameData.songs.info[i].filename,
						gameData.songs.info[i].melodic_bank_file,
						gameData.songs.info[i].drum_bank_file );
				if (!gameData.songs.nFirstLevelSong [bD1Songs] && strstr (gameData.songs.info [i].filename, "game01.hmp"))
					 gameData.songs.nFirstLevelSong [bD1Songs] = i;
				if (bD1Songs && strstr (gameData.songs.info [i].filename, "endlevel.hmp"))
					gameData.songs.nD1EndLevelSong = i;

				////printf( "%d. '%s' '%s' '%s'\n",i,gameData.songs.info[i].filename,gameData.songs.info[i].melodic_bank_file,gameData.songs.info[i].drum_bank_file );
				i++;
			}
		}
		if (bD1Songs) 
			gameData.songs.nD1Songs = i - gameData.songs.nSongs;
		else
			gameData.songs.nD2Songs = i - gameData.songs.nSongs;
		gameData.songs.nSongs = i;
		gameData.songs.nLevelSongs [bD1Songs] = gameData.songs.nSongs - gameData.songs.nFirstLevelSong [bD1Songs];
		if (!gameData.songs.nFirstLevelSong [bD1Songs])
			Error("gameData.songs.info are missing.");
		CFClose(fp);
	}
	gameData.songs.bInitialized = 1;
	//	RBA Hook
	#if !defined(SHAREWARE) || ( defined(SHAREWARE) && defined(APPLE_DEMO) )
		if (!gameOpts->sound.bUseRedbook)
			gameStates.sound.bRedbookEnabled = 0;
		else	// use redbook
		{
			#ifndef __MSDOS__
				RBAInit();
			#else
				RBAInit(toupper(CDROM_dir[0]) - 'A');
			#endif

				if (RBAEnabled())
			{
				set_redbook_volume(gameConfig.nRedbookVolume);
				RBARegisterCD();
			}
		}
		atexit(RBAStop);    // stop song on exit
	#endif	// endof ifndef SHAREWARE, ie ifdef SHAREWARE
	}
}