tidy up music keys, ALT-SHIFT-F9 ejects audio CDs
This commit is contained in:
parent
b20c810d1d
commit
16cfedcccd
|
@ -3,6 +3,7 @@ D1X-Rebirth Changelog
|
|||
20080615
|
||||
--------
|
||||
main/gameseq.c, main/mission.c, main/newdemo.c, main/scores.c: Fixed scores write (wasn't PhysFS); Fixed PLAYING_BUILTING_MISSION in D1X; Better call for DoJasonInterpolate in demo code (hopefully)
|
||||
arch/sdl/digi_mixer.c, arch/sdl/rbaudio.c, include/inferno.h, include/rbaudio.h, main/game.c, main/songs.c: tidy up music keys, ALT-SHIFT-F9 ejects audio CDs
|
||||
|
||||
20080612
|
||||
--------
|
||||
|
|
|
@ -278,7 +278,8 @@ void digi_mixer_stop_current_song() {
|
|||
digi_midi_song_playing = 0;
|
||||
}
|
||||
#endif
|
||||
jukebox_stop(); //stops jukebox as well as standard music
|
||||
jukebox_stop();
|
||||
mix_stop_music();
|
||||
}
|
||||
|
||||
void digi_mixer_pause_midi() {}
|
||||
|
|
|
@ -31,7 +31,7 @@ static int initialised = 0;
|
|||
|
||||
void RBAExit()
|
||||
{
|
||||
if (initialised)
|
||||
if (s_cd)
|
||||
{
|
||||
SDL_CDStop(s_cd);
|
||||
SDL_CDClose(s_cd);
|
||||
|
@ -40,6 +40,9 @@ void RBAExit()
|
|||
|
||||
void RBAInit()
|
||||
{
|
||||
int num_cds;
|
||||
int i,j;
|
||||
|
||||
if (initialised) return;
|
||||
|
||||
if (SDL_Init(SDL_INIT_CDROM) < 0)
|
||||
|
@ -48,34 +51,20 @@ void RBAInit()
|
|||
return;
|
||||
}
|
||||
|
||||
RBARegisterCD();
|
||||
|
||||
atexit(RBAExit);
|
||||
initialised = 1;
|
||||
}
|
||||
|
||||
int RBAEnabled()
|
||||
{
|
||||
return initialised;
|
||||
}
|
||||
|
||||
void RBARegisterCD()
|
||||
{
|
||||
int num_cds;
|
||||
int i,j;
|
||||
|
||||
if (s_cd && CD_INDRIVE(SDL_CDStatus(s_cd)))
|
||||
return;
|
||||
|
||||
num_cds = SDL_CDNumDrives();
|
||||
if (num_cds < 1)
|
||||
{
|
||||
Warning("No cdrom drives found!\n");
|
||||
#if defined(__APPLE__) || defined(macintosh)
|
||||
SDL_QuitSubSystem(SDL_INIT_CDROM); // necessary for rescanning CDROMs
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_cds; i++)
|
||||
{
|
||||
if (s_cd)
|
||||
SDL_CDClose(s_cd);
|
||||
s_cd = SDL_CDOpen(i);
|
||||
|
||||
if (s_cd && CD_INDRIVE(SDL_CDStatus(s_cd)))
|
||||
|
@ -89,17 +78,36 @@ void RBARegisterCD()
|
|||
if (j != s_cd->numtracks)
|
||||
break; // we've found an audio CD
|
||||
}
|
||||
else if (s_cd == NULL)
|
||||
Warning("Could not open cdrom %i for redbook audio:%s\n", i, SDL_GetError());
|
||||
}
|
||||
|
||||
if (i == num_cds)
|
||||
{
|
||||
Warning("Could not open cdrom for redbook audio!\n");
|
||||
Warning("No audio CDs found\n");
|
||||
if (s_cd) // if there's no audio CD, say that there's no redbook and hence play MIDI instead
|
||||
{
|
||||
SDL_CDClose(s_cd);
|
||||
s_cd = NULL;
|
||||
}
|
||||
#if defined(__APPLE__) || defined(macintosh)
|
||||
SDL_QuitSubSystem(SDL_INIT_CDROM); // necessary for rescanning CDROMs
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
atexit(RBAExit);
|
||||
initialised = 1;
|
||||
}
|
||||
|
||||
int RBAEnabled()
|
||||
{
|
||||
return initialised;
|
||||
}
|
||||
|
||||
int RBAPlayTrack(int a)
|
||||
{
|
||||
if (!initialised) return -1;
|
||||
if (!s_cd) return -1;
|
||||
|
||||
if (CD_INDRIVE(SDL_CDStatus(s_cd)) ) {
|
||||
SDL_CDPlayTracks(s_cd, a-1, 0, 0, 0);
|
||||
|
@ -109,17 +117,27 @@ int RBAPlayTrack(int a)
|
|||
|
||||
void RBAStop()
|
||||
{
|
||||
if (!initialised) return;
|
||||
if (!s_cd) return;
|
||||
SDL_CDStop(s_cd);
|
||||
}
|
||||
|
||||
void RBAEjectDisk()
|
||||
{
|
||||
if (!s_cd) return;
|
||||
SDL_CDEject(s_cd); // play nothing until it tries to load a song
|
||||
#if defined(__APPLE__) || defined(macintosh)
|
||||
SDL_QuitSubSystem(SDL_INIT_CDROM); // necessary for rescanning CDROMs
|
||||
#endif
|
||||
initialised = 0;
|
||||
}
|
||||
|
||||
void RBASetVolume(int volume)
|
||||
{
|
||||
#ifdef __linux__
|
||||
int cdfile, level;
|
||||
struct cdrom_volctrl volctrl;
|
||||
|
||||
if (!initialised) return;
|
||||
if (!s_cd) return;
|
||||
|
||||
cdfile = s_cd->id;
|
||||
level = volume * 3;
|
||||
|
@ -143,20 +161,34 @@ void RBASetVolume(int volume)
|
|||
|
||||
void RBAPause()
|
||||
{
|
||||
if (!initialised) return;
|
||||
if (!s_cd) return;
|
||||
SDL_CDPause(s_cd);
|
||||
}
|
||||
|
||||
int RBAResume()
|
||||
{
|
||||
if (!initialised) return -1;
|
||||
if (!s_cd) return -1;
|
||||
SDL_CDResume(s_cd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RBAPauseResume()
|
||||
{
|
||||
if (!s_cd) return 0;
|
||||
|
||||
if (SDL_CDStatus(s_cd) == CD_PLAYING)
|
||||
SDL_CDPause(s_cd);
|
||||
else if (SDL_CDStatus(s_cd) == CD_PAUSED)
|
||||
SDL_CDResume(s_cd);
|
||||
else
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RBAGetNumberOfTracks()
|
||||
{
|
||||
if (!initialised) return -1;
|
||||
if (!s_cd) return -1;
|
||||
SDL_CDStatus(s_cd);
|
||||
return s_cd->numtracks;
|
||||
}
|
||||
|
@ -164,7 +196,7 @@ int RBAGetNumberOfTracks()
|
|||
// plays tracks first through last, inclusive
|
||||
int RBAPlayTracks(int first, int last)
|
||||
{
|
||||
if (!initialised)
|
||||
if (!s_cd)
|
||||
return 0;
|
||||
|
||||
if (CD_INDRIVE(SDL_CDStatus(s_cd)))
|
||||
|
@ -178,7 +210,7 @@ int RBAPlayTracks(int first, int last)
|
|||
// is called. Returns 0 if no track playing, else track number
|
||||
int RBAGetTrackNum()
|
||||
{
|
||||
if (!initialised)
|
||||
if (!s_cd)
|
||||
return 0;
|
||||
|
||||
if (SDL_CDStatus(s_cd) != CD_PLAYING)
|
||||
|
@ -189,7 +221,15 @@ int RBAGetTrackNum()
|
|||
|
||||
int RBAPeekPlayStatus()
|
||||
{
|
||||
return (SDL_CDStatus(s_cd) == CD_PLAYING);
|
||||
if (!s_cd)
|
||||
return 0;
|
||||
|
||||
if (SDL_CDStatus(s_cd) == CD_PLAYING)
|
||||
return 1;
|
||||
else if (SDL_CDStatus(s_cd) == CD_PAUSED) // hack so it doesn't keep restarting paused music
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cddb_sum(int n)
|
||||
|
@ -213,7 +253,7 @@ unsigned long RBAGetDiscID()
|
|||
{
|
||||
int i, t = 0, n = 0;
|
||||
|
||||
if (!initialised)
|
||||
if (!s_cd)
|
||||
return 0;
|
||||
|
||||
/* For backward compatibility this algorithm must not change */
|
||||
|
|
|
@ -30,7 +30,6 @@ typedef struct _RBACHANNELCTL {
|
|||
#else
|
||||
extern void RBAInit(ubyte cd_drive_num); //drive a == 0, drive b == 1
|
||||
#endif
|
||||
extern void RBARegisterCD(void);
|
||||
extern long RBAGetDeviceStatus(void);
|
||||
extern int RBAPlayTrack(int track);
|
||||
extern int RBAPlayTracks(int first, int last); //plays tracks first through last, inclusive
|
||||
|
@ -38,6 +37,7 @@ extern int RBACheckMediaChange();
|
|||
extern long RBAGetHeadLoc(int *min, int *sec, int *frame);
|
||||
extern int RBAPeekPlayStatus(void);
|
||||
extern void RBAStop(void);
|
||||
extern void RBAEjectDisk(void);
|
||||
extern void RBASetStereoAudio(RBACHANNELCTL *channels);
|
||||
extern void RBASetQuadAudio(RBACHANNELCTL *channels);
|
||||
extern void RBAGetAudioInfo(RBACHANNELCTL *channels);
|
||||
|
@ -49,6 +49,7 @@ extern void RBAEnable(void);
|
|||
extern int RBAGetNumberOfTracks(void);
|
||||
extern void RBAPause();
|
||||
extern int RBAResume();
|
||||
extern int RBAPauseResume();
|
||||
|
||||
//return the track number currently playing. Useful if RBAPlayTracks()
|
||||
//is called. Returns 0 if no track playing, else track number
|
||||
|
|
111
main/game.c
111
main/game.c
|
@ -1402,10 +1402,16 @@ int do_game_pause()
|
|||
return key;
|
||||
}
|
||||
|
||||
#ifdef USE_SDLMIXER
|
||||
#define EXT_MUSIC_TEXT "Jukebox/Audio CD"
|
||||
#else
|
||||
#define EXT_MUSIC_TEXT "Audio CD"
|
||||
#endif
|
||||
|
||||
void show_help()
|
||||
{
|
||||
int nitems = 0;
|
||||
newmenu_item m[25];
|
||||
newmenu_item m[26];
|
||||
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_ESC;
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "SHIFT-ESC\t SHOW GAME LOG";
|
||||
|
@ -1418,10 +1424,9 @@ void show_help()
|
|||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_PRTSCN;
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_1TO5;
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_6TO10;
|
||||
#ifdef USE_SDLMIXER
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Alt-Shift-F10\t Play/Pause Jukebox";
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Alt-Shift-F9\t Eject Audio CD";
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Alt-Shift-F10\t Play/Pause " EXT_MUSIC_TEXT;
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Alt-Shift-F11/F12\t Previous/Next Song";
|
||||
#endif
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "";
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "MULTIPLAYER:";
|
||||
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "ALT-F4\t SHOW RETICLE NAMES";
|
||||
|
@ -2196,84 +2201,50 @@ void HandleGameKey(int key)
|
|||
case KEY_ALTED+KEY_F2: if (!Player_is_dead) state_save_all( 0 ); break; // 0 means not between levels.
|
||||
case KEY_ALTED+KEY_F3: if (!Player_is_dead) state_restore_all(1); break;
|
||||
|
||||
case KEY_MINUS + KEY_ALTED: songs_goto_prev_song(); break;
|
||||
case KEY_EQUAL + KEY_ALTED: songs_goto_next_song(); break;
|
||||
|
||||
#ifdef MACINTOSH
|
||||
|
||||
case KEY_COMMAND+KEY_M:
|
||||
#if !defined(SHAREWARE) || defined(APPLE_DEMO)
|
||||
if ( (Game_mode & GM_MULTI) ) // don't process in multiplayer games
|
||||
break;
|
||||
|
||||
key_close(); // no processing of keys with keyboard handler.. jeez
|
||||
stop_time();
|
||||
show_boxed_message ("Mounting CD\nESC to quit", 0);
|
||||
RBAMountDisk(); // OS has totaly control of the CD.
|
||||
if (Function_mode == FMODE_MENU)
|
||||
songs_play_song(SONG_TITLE,1);
|
||||
else if (Function_mode == FMODE_GAME)
|
||||
songs_play_level_song( Current_level_num );
|
||||
key_init();
|
||||
start_time();
|
||||
#endif
|
||||
|
||||
break;
|
||||
|
||||
case KEY_COMMAND+KEY_E:
|
||||
/*
|
||||
* Jukebox hotkeys -- MD2211, 2007
|
||||
* Now for all music
|
||||
* ==============================================
|
||||
*/
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F9:
|
||||
MAC(case KEY_COMMAND+KEY_E:)
|
||||
songs_stop_redbook();
|
||||
RBAEjectDisk();
|
||||
break;
|
||||
|
||||
case KEY_COMMAND+KEY_RIGHT:
|
||||
songs_goto_next_song();
|
||||
break;
|
||||
case KEY_COMMAND+KEY_LEFT:
|
||||
songs_goto_prev_song();
|
||||
break;
|
||||
case KEY_COMMAND+KEY_UP:
|
||||
songs_play_level_song(1);
|
||||
break;
|
||||
case KEY_COMMAND+KEY_DOWN:
|
||||
songs_stop_redbook();
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F10:
|
||||
MAC(case KEY_COMMAND+KEY_UP:)
|
||||
MAC(case KEY_COMMAND+KEY_DOWN:)
|
||||
if (GameCfg.SndEnableRedbook && !RBAPauseResume())
|
||||
{
|
||||
if (Function_mode == FMODE_GAME)
|
||||
songs_play_level_song( Current_level_num );
|
||||
else if (Function_mode == FMODE_MENU)
|
||||
songs_play_song(SONG_TITLE, 1);
|
||||
}
|
||||
#ifdef USE_SDLMIXER
|
||||
jukebox_pause_resume();
|
||||
#endif
|
||||
break;
|
||||
|
||||
case KEY_MINUS + KEY_ALTED:
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F11:
|
||||
MAC(case KEY_COMMAND+KEY_LEFT:)
|
||||
songs_goto_prev_song();
|
||||
break;
|
||||
case KEY_EQUAL + KEY_ALTED:
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F12:
|
||||
MAC(case KEY_COMMAND+KEY_RIGHT:)
|
||||
songs_goto_next_song();
|
||||
break;
|
||||
|
||||
#ifdef MACINTOSH
|
||||
case KEY_COMMAND+KEY_Q:
|
||||
if ( !(Game_mode & GM_MULTI) )
|
||||
macintosh_quit();
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_SDLMIXER
|
||||
/*
|
||||
* Jukebox hotkeys -- MD2211, 2007
|
||||
* ==============================================
|
||||
*/
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F10:
|
||||
jukebox_pause_resume();
|
||||
break;
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F11:
|
||||
if (GameCfg.JukeboxOn)
|
||||
jukebox_prev();
|
||||
else
|
||||
songs_goto_prev_song();
|
||||
break;
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F12:
|
||||
if (GameCfg.JukeboxOn)
|
||||
jukebox_next();
|
||||
else
|
||||
songs_goto_next_song();
|
||||
break;
|
||||
#else
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F11:
|
||||
songs_goto_prev_song();
|
||||
break;
|
||||
case KEY_ALTED + KEY_SHIFTED + KEY_F12:
|
||||
songs_goto_next_song();
|
||||
break;
|
||||
#endif
|
||||
|
||||
//use function keys for window sizing
|
||||
|
||||
// ================================================================================================
|
||||
|
|
|
@ -20,6 +20,12 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#ifndef _INFERNO_H
|
||||
#define _INFERNO_H
|
||||
|
||||
#if MACINTOSH
|
||||
#define MAC(x) x
|
||||
#else
|
||||
#define MAC(x)
|
||||
#endif
|
||||
|
||||
/**
|
||||
** Constants
|
||||
**/
|
||||
|
|
52
main/songs.c
52
main/songs.c
|
@ -30,6 +30,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include "rbaudio.h"
|
||||
#include "config.h"
|
||||
#include "timer.h"
|
||||
#include "jukebox.h"
|
||||
|
||||
song_info Songs[MAX_SONGS];
|
||||
int Songs_initialized = 0;
|
||||
|
@ -144,12 +145,7 @@ void songs_init()
|
|||
if (GameCfg.SndEnableRedbook)
|
||||
{
|
||||
RBAInit();
|
||||
|
||||
if (RBAEnabled())
|
||||
{
|
||||
set_redbook_volume(GameCfg.MusicVolume);
|
||||
RBARegisterCD();
|
||||
}
|
||||
}
|
||||
atexit(RBAStop); // stop song on exit
|
||||
#endif // endof ifndef SHAREWARE, ie ifdef SHAREWARE
|
||||
|
@ -194,18 +190,10 @@ void songs_stop_all(void)
|
|||
songs_stop_redbook(); // Stop CD, if playing
|
||||
}
|
||||
|
||||
int force_rb_register=0;
|
||||
|
||||
void reinit_redbook()
|
||||
{
|
||||
RBAInit();
|
||||
|
||||
if (RBAEnabled())
|
||||
{
|
||||
set_redbook_volume(GameCfg.MusicVolume);
|
||||
RBARegisterCD();
|
||||
force_rb_register=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -216,15 +204,10 @@ int play_redbook_track(int tracknum,int keep_playing)
|
|||
{
|
||||
Redbook_playing = 0;
|
||||
|
||||
if ((RBAGetNumberOfTracks() < 1) && GameCfg.SndEnableRedbook)
|
||||
if (!RBAEnabled() && GameCfg.SndEnableRedbook)
|
||||
reinit_redbook();
|
||||
|
||||
if (force_rb_register) {
|
||||
RBARegisterCD(); //get new track list for new CD
|
||||
force_rb_register = 0;
|
||||
}
|
||||
|
||||
if (GameCfg.SndEnableRedbook && RBAEnabled()) {
|
||||
if (GameCfg.SndEnableRedbook) {
|
||||
int num_tracks = RBAGetNumberOfTracks();
|
||||
if (tracknum <= num_tracks)
|
||||
if (RBAPlayTracks(tracknum,keep_playing?num_tracks:tracknum)) {
|
||||
|
@ -247,11 +230,6 @@ void songs_play_song( int songnum, int repeat )
|
|||
|
||||
songs_stop_all();
|
||||
|
||||
if (force_rb_register) {
|
||||
RBARegisterCD(); //get new track list for new CD
|
||||
force_rb_register = 0;
|
||||
}
|
||||
|
||||
// The endgame track is the last track...
|
||||
if (songnum < SONG_ENDGAME)
|
||||
play_redbook_track(songnum + 2,0);
|
||||
|
@ -287,15 +265,7 @@ void songs_play_level_song( int levelnum )
|
|||
else
|
||||
songnum = (levelnum-1) % cGameSongsAvailable;
|
||||
|
||||
if ((RBAGetNumberOfTracks() < 2) && GameCfg.SndEnableRedbook)
|
||||
reinit_redbook();
|
||||
|
||||
if (force_rb_register) {
|
||||
RBARegisterCD(); //get new track list for new CD
|
||||
force_rb_register = 0;
|
||||
}
|
||||
|
||||
if (GameCfg.SndEnableRedbook && RBAEnabled() && (n_tracks = RBAGetNumberOfTracks()) > 1) {
|
||||
if (GameCfg.SndEnableRedbook) {
|
||||
|
||||
//try to play redbook
|
||||
|
||||
|
@ -333,6 +303,13 @@ void songs_goto_next_song()
|
|||
{
|
||||
if (Redbook_playing) //get correct track
|
||||
current_song_level = RBAGetTrackNum() - REDBOOK_FIRST_LEVEL_TRACK + 1;
|
||||
#ifdef USE_SDLMIXER
|
||||
else if (GameCfg.JukeboxOn)
|
||||
{
|
||||
jukebox_next();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
songs_play_level_song(current_song_level+1);
|
||||
|
||||
|
@ -343,6 +320,13 @@ void songs_goto_prev_song()
|
|||
{
|
||||
if (Redbook_playing) //get correct track
|
||||
current_song_level = RBAGetTrackNum() - REDBOOK_FIRST_LEVEL_TRACK + 1;
|
||||
#ifdef USE_SDLMIXER
|
||||
else if (GameCfg.JukeboxOn)
|
||||
{
|
||||
jukebox_prev();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (current_song_level > 1)
|
||||
songs_play_level_song(current_song_level-1);
|
||||
|
|
Loading…
Reference in a new issue