diff options
author | Tim Angus <tim@ngus.net> | 2009-10-13 17:17:27 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-03 00:16:49 +0000 |
commit | 6efd4cef3cfcc44d6727cb0e54da26fbb74a7533 (patch) | |
tree | fdb5ee764999ac868d00c54cefb8c290f1735fd6 /src/client | |
parent | fafe107646105e680e2bd4a82d9330dffaf69c9a (diff) |
* Merge ioq3-r1666
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/cl_cgame.c | 2 | ||||
-rw-r--r-- | src/client/cl_curl.c | 2 | ||||
-rw-r--r-- | src/client/cl_input.c | 2 | ||||
-rw-r--r-- | src/client/cl_keys.c | 239 | ||||
-rw-r--r-- | src/client/cl_main.c | 85 | ||||
-rw-r--r-- | src/client/cl_parse.c | 6 | ||||
-rw-r--r-- | src/client/client.h | 2 | ||||
-rw-r--r-- | src/client/snd_dma.c | 8 | ||||
-rw-r--r-- | src/client/snd_openal.c | 27 |
9 files changed, 166 insertions, 207 deletions
diff --git a/src/client/cl_cgame.c b/src/client/cl_cgame.c index 8bf10f6d..ef61834c 100644 --- a/src/client/cl_cgame.c +++ b/src/client/cl_cgame.c @@ -469,7 +469,7 @@ intptr_t CL_CgameSystemCalls( intptr_t *args ) { Cmd_RemoveCommand( VMA(1) ); return 0; case CG_SENDCLIENTCOMMAND: - CL_AddReliableCommand( VMA(1) ); + CL_AddReliableCommand(VMA(1), qfalse); return 0; case CG_UPDATESCREEN: // this is used during lengthy level loading, so pump message loop diff --git a/src/client/cl_curl.c b/src/client/cl_curl.c index 4c34667c..10d09bd5 100644 --- a/src/client/cl_curl.c +++ b/src/client/cl_curl.c @@ -292,7 +292,7 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) if(!(clc.sv_allowDownload & DLF_NO_DISCONNECT) && !clc.cURLDisconnected) { - CL_AddReliableCommand("disconnect"); + CL_AddReliableCommand("disconnect", qtrue); CL_WritePacket(); CL_WritePacket(); CL_WritePacket(); diff --git a/src/client/cl_input.c b/src/client/cl_input.c index d3c38868..49551662 100644 --- a/src/client/cl_input.c +++ b/src/client/cl_input.c @@ -824,7 +824,7 @@ void CL_WritePacket( void ) { // also use the message acknowledge key ^= clc.serverMessageSequence; // also use the last acknowledged server command in the key - key ^= Com_HashKey(clc.serverCommands[ clc.serverCommandSequence & (MAX_RELIABLE_COMMANDS-1) ], 32); + key ^= MSG_HashKey(clc.serverCommands[ clc.serverCommandSequence & (MAX_RELIABLE_COMMANDS-1) ], 32); // write all the commands, including the predicted command for ( i = 0 ; i < count ; i++ ) { diff --git a/src/client/cl_keys.c b/src/client/cl_keys.c index 10abefc2..4c36485b 100644 --- a/src/client/cl_keys.c +++ b/src/client/cl_keys.c @@ -1070,94 +1070,72 @@ void CL_InitKeyCommands( void ) { /* =================== -CL_AddKeyUpCommands +CL_ParseBinding + +Execute the commands in the bind string =================== */ -void CL_AddKeyUpCommands( int key, char *kb, unsigned time) { - int i; - char button[1024], *buttonPtr; - char cmd[1024]; - qboolean keyevent; +void CL_ParseBinding( int key, qboolean down, unsigned time ) +{ + char buf[ MAX_STRING_CHARS ], *p = buf, *end; - if ( !kb ) { + if( !keys[key].binding || !keys[key].binding[0] ) return; - } - keyevent = qfalse; - buttonPtr = button; - for ( i = 0; ; i++ ) { - if ( kb[i] == ';' || !kb[i] ) { - *buttonPtr = '\0'; - if ( button[0] == '+') { - // button commands add keynum and time as parms so that multiple - // sources can be discriminated and subframe corrected - Com_sprintf (cmd, sizeof(cmd), "-%s %i %i\n", button+1, key, time); - Cbuf_AddText (cmd); - keyevent = qtrue; - } else { - if (keyevent) { - // down-only command - Cbuf_AddText (button); - Cbuf_AddText ("\n"); - } - } - buttonPtr = button; - while ( (kb[i] <= ' ' || kb[i] == ';') && kb[i] != 0 ) { - i++; - } + Q_strncpyz( buf, keys[key].binding, sizeof( buf ) ); + + while( 1 ) + { + while( isspace( *p ) ) + p++; + end = strchr( p, ';' ); + if( end ) + *end = '\0'; + if( *p == '+' ) + { + // button commands add keynum and time as parameters + // so that multiple sources can be discriminated and + // subframe corrected + char cmd[1024]; + Com_sprintf( cmd, sizeof( cmd ), "%c%s %d %d\n", + ( down ) ? '+' : '-', p + 1, key, time ); + Cbuf_AddText( cmd ); } - *buttonPtr++ = kb[i]; - if ( !kb[i] ) { - break; + else if( down ) + { + // normal commands only execute on key press + Cbuf_AddText( p ); + Cbuf_AddText( "\n" ); } + if( !end ) + break; + p = end + 1; } } /* =================== -CL_KeyEvent +CL_KeyDownEvent -Called by the system for both key up and key down events +Called by CL_KeyEvent to handle a keypress =================== */ -void CL_KeyEvent (int key, qboolean down, unsigned time) { - char *kb; - char cmd[1024]; - - // update auto-repeat status and BUTTON_ANY status - keys[key].down = down; - - if (down) { - keys[key].repeats++; - if ( keys[key].repeats == 1) { - anykeydown++; - } - } else { - keys[key].repeats = 0; - anykeydown--; - if (anykeydown < 0) { - anykeydown = 0; - } - } +void CL_KeyDownEvent( int key, unsigned time ) +{ + keys[key].down = qtrue; + keys[key].repeats++; + if( keys[key].repeats == 1 ) + anykeydown++; - if (key == K_ENTER) + if( keys[K_ALT].down && key == K_ENTER ) { - if (down) - { - if (keys[K_ALT].down) - { - Cvar_SetValue( "r_fullscreen", - !Cvar_VariableIntegerValue( "r_fullscreen" ) ); - return; - } - } + Cvar_SetValue( "r_fullscreen", + !Cvar_VariableIntegerValue( "r_fullscreen" ) ); + return; } // console key is hardcoded, so the user can never unbind it - if (key == K_CONSOLE || - ( key == K_ESCAPE && keys[K_SHIFT].down ) ) { - if (!down) { - return; - } + if( key == K_CONSOLE || ( keys[K_SHIFT].down && key == K_ESCAPE ) ) + { Con_ToggleConsole_f (); Key_ClearStates (); return; @@ -1165,7 +1143,7 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) { // keys can still be used for bound actions - if ( down && ( key < 128 || key == K_MOUSE1 ) && + if ( ( key < 128 || key == K_MOUSE1 ) && ( clc.demoplaying || cls.state == CA_CINEMATIC ) && Key_GetCatcher( ) == 0 ) { if (Cvar_VariableValue ("com_cameraMode") == 0) { @@ -1174,9 +1152,8 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) { } } - // escape is always handled special - if ( key == K_ESCAPE && down ) { + if ( key == K_ESCAPE ) { // escape always gets out of CGAME stuff if (Key_GetCatcher( ) & KEYCATCH_CGAME) { Key_SetCatcher( Key_GetCatcher( ) & ~KEYCATCH_CGAME ); @@ -1196,89 +1173,79 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) { return; } - VM_Call( uivm, UI_KEY_EVENT, key, down ); + VM_Call( uivm, UI_KEY_EVENT, key, qtrue ); return; } - // - // key up events only perform actions if the game key binding is - // a button command (leading + sign). These will be processed even in - // console mode and menu mode, to keep the character from continuing - // an action started before a mode switch. - // - if (!down ) { - if ( cls.state != CA_DISCONNECTED ) { - kb = keys[key].binding; - - CL_AddKeyUpCommands( key, kb, time ); - } - - if ( Key_GetCatcher( ) & KEYCATCH_UI && uivm ) { - VM_Call( uivm, UI_KEY_EVENT, key, down ); - } else if ( Key_GetCatcher( ) & KEYCATCH_CGAME && cgvm ) { - VM_Call( cgvm, CG_KEY_EVENT, key, down ); - } - - return; - } - - // distribute the key down event to the apropriate handler if ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) { Console_Key( key ); } else if ( Key_GetCatcher( ) & KEYCATCH_UI ) { if ( uivm ) { - VM_Call( uivm, UI_KEY_EVENT, key, down ); + VM_Call( uivm, UI_KEY_EVENT, key, qtrue ); } } else if ( Key_GetCatcher( ) & KEYCATCH_CGAME ) { if ( cgvm ) { - VM_Call( cgvm, CG_KEY_EVENT, key, down ); + VM_Call( cgvm, CG_KEY_EVENT, key, qtrue ); } } else if ( cls.state == CA_DISCONNECTED ) { Console_Key( key ); } else { // send the bound action - kb = keys[key].binding; - if ( !kb ) { - if (key >= 200) { - Com_Printf ("%s is unbound, use controls menu to set.\n" - , Key_KeynumToString( key ) ); - } - } else if (kb[0] == '+') { - int i; - char button[1024], *buttonPtr; - buttonPtr = button; - for ( i = 0; ; i++ ) { - if ( kb[i] == ';' || !kb[i] ) { - *buttonPtr = '\0'; - if ( button[0] == '+') { - // button commands add keynum and time as parms so that multiple - // sources can be discriminated and subframe corrected - Com_sprintf (cmd, sizeof(cmd), "%s %i %i\n", button, key, time); - Cbuf_AddText (cmd); - } else { - // down-only command - Cbuf_AddText (button); - Cbuf_AddText ("\n"); - } - buttonPtr = button; - while ( (kb[i] <= ' ' || kb[i] == ';') && kb[i] != 0 ) { - i++; - } - } - *buttonPtr++ = kb[i]; - if ( !kb[i] ) { - break; - } - } - } else { - // down-only command - Cbuf_AddText (kb); - Cbuf_AddText ("\n"); - } + CL_ParseBinding( key, qtrue, time ); + } + return; +} + +/* +=================== +CL_KeyUpEvent + +Called by CL_KeyEvent to handle a keyrelease +=================== +*/ +void CL_KeyUpEvent( int key, unsigned time ) +{ + keys[key].repeats = 0; + keys[key].down = qfalse; + anykeydown--; + if (anykeydown < 0) { + anykeydown = 0; + } + + // don't process key-up events for the console key + if ( key == K_CONSOLE || ( key == K_ESCAPE && keys[K_SHIFT].down ) ) + return; + + // + // key up events only perform actions if the game key binding is + // a button command (leading + sign). These will be processed even in + // console mode and menu mode, to keep the character from continuing + // an action started before a mode switch. + // + if( cls.state != CA_DISCONNECTED ) + CL_ParseBinding( key, qfalse, time ); + + if ( Key_GetCatcher( ) & KEYCATCH_UI && uivm ) { + VM_Call( uivm, UI_KEY_EVENT, key, qfalse ); + } else if ( Key_GetCatcher( ) & KEYCATCH_CGAME && cgvm ) { + VM_Call( cgvm, CG_KEY_EVENT, key, qfalse ); } } +/* +=================== +CL_KeyEvent + +Called by the system for both key up and key down events +=================== +*/ +void CL_KeyEvent (int key, qboolean down, unsigned time) { + if( down ) + CL_KeyDownEvent( key, time ); + else + CL_KeyUpEvent( key, time ); +} /* =================== diff --git a/src/client/cl_main.c b/src/client/cl_main.c index 0aafa529..a8b59c27 100644 --- a/src/client/cl_main.c +++ b/src/client/cl_main.c @@ -191,7 +191,7 @@ void CL_UpdateVoipIgnore(const char *idstr, qboolean ignore) if ((id >= 0) && (id < MAX_CLIENTS)) { clc.voipIgnore[id] = ignore; CL_AddReliableCommand(va("voip %s %d", - ignore ? "ignore" : "unignore", id)); + ignore ? "ignore" : "unignore", id), qfalse); Com_Printf("VoIP: %s ignoring player #%d\n", ignore ? "Now" : "No longer", id); return; @@ -303,11 +303,11 @@ void CL_Voip_f( void ) } } else if (strcmp(cmd, "muteall") == 0) { Com_Printf("VoIP: muting incoming voice\n"); - CL_AddReliableCommand("voip muteall"); + CL_AddReliableCommand("voip muteall", qfalse); clc.voipMuteAll = qtrue; } else if (strcmp(cmd, "unmuteall") == 0) { Com_Printf("VoIP: unmuting incoming voice\n"); - CL_AddReliableCommand("voip unmuteall"); + CL_AddReliableCommand("voip unmuteall", qfalse); clc.voipMuteAll = qfalse; } else { Com_Printf("usage: voip [un]ignore <playerID#>\n" @@ -510,17 +510,25 @@ The given command will be transmitted to the server, and is gauranteed to not have future usercmd_t executed before it is executed ====================== */ -void CL_AddReliableCommand( const char *cmd ) { - int index; - +void CL_AddReliableCommand(const char *cmd, qboolean isDisconnectCmd) +{ + int unacknowledged = clc.reliableSequence - clc.reliableAcknowledge; + // if we would be losing an old command that hasn't been acknowledged, // we must drop the connection - if ( clc.reliableSequence - clc.reliableAcknowledge > MAX_RELIABLE_COMMANDS ) { - Com_Error( ERR_DROP, "Client command overflow" ); + // also leave one slot open for the disconnect command in this case. + + if ((isDisconnectCmd && unacknowledged > MAX_RELIABLE_COMMANDS) || + (!isDisconnectCmd && unacknowledged >= MAX_RELIABLE_COMMANDS)) + { + if(com_errorEntered) + return; + else + Com_Error(ERR_DROP, "Client command overflow"); } - clc.reliableSequence++; - index = clc.reliableSequence & ( MAX_RELIABLE_COMMANDS - 1 ); - Q_strncpyz( clc.reliableCommands[ index ], cmd, sizeof( clc.reliableCommands[ index ] ) ); + + Q_strncpyz(clc.reliableCommands[++clc.reliableSequence & (MAX_RELIABLE_COMMANDS - 1)], + cmd, sizeof(*clc.reliableCommands)); } /* @@ -1329,7 +1337,7 @@ void CL_Disconnect( qboolean showMainMenu ) { // send a disconnect message to the server // send it a few times in case one is dropped if ( cls.state >= CA_CONNECTED ) { - CL_AddReliableCommand( "disconnect" ); + CL_AddReliableCommand("disconnect", qtrue); CL_WritePacket(); CL_WritePacket(); CL_WritePacket(); @@ -1388,9 +1396,9 @@ void CL_ForwardCommandToServer( const char *string ) { } if ( Cmd_Argc() > 1 ) { - CL_AddReliableCommand( string ); + CL_AddReliableCommand(string, qfalse); } else { - CL_AddReliableCommand( cmd ); + CL_AddReliableCommand(cmd, qfalse); } } @@ -1457,45 +1465,10 @@ void CL_ForwardToServer_f( void ) { // don't forward the first argument if ( Cmd_Argc() > 1 ) { - CL_AddReliableCommand( Cmd_Args() ); - } -} - -/* -================== -CL_Setenv_f - -Mostly for controlling voodoo environment variables -================== -*/ -void CL_Setenv_f( void ) { - int argc = Cmd_Argc(); - - if ( argc > 2 ) { - char buffer[1024]; - int i; - - strcpy( buffer, Cmd_Argv(1) ); - strcat( buffer, "=" ); - - for ( i = 2; i < argc; i++ ) { - strcat( buffer, Cmd_Argv( i ) ); - strcat( buffer, " " ); - } - - putenv( buffer ); - } else if ( argc == 2 ) { - char *env = getenv( Cmd_Argv(1) ); - - if ( env ) { - Com_Printf( "%s=%s\n", Cmd_Argv(1), env ); - } else { - Com_Printf( "%s undefined\n", Cmd_Argv(1)); - } + CL_AddReliableCommand(Cmd_Args(), qfalse); } } - /* ================== CL_Disconnect_f @@ -1697,7 +1670,7 @@ void CL_SendPureChecksums( void ) { // if we are pure we need to send back a command with our referenced pk3 checksums Com_sprintf(cMsg, sizeof(cMsg), "cp %d %s", cl.serverId, FS_ReferencedPakPureChecksums()); - CL_AddReliableCommand( cMsg ); + CL_AddReliableCommand(cMsg, qfalse); } /* @@ -1706,7 +1679,7 @@ CL_ResetPureClientAtServer ================= */ void CL_ResetPureClientAtServer( void ) { - CL_AddReliableCommand( va("vdr") ); + CL_AddReliableCommand("vdr", qfalse); } /* @@ -1888,7 +1861,7 @@ void CL_DownloadsComplete( void ) { FS_Restart(clc.checksumFeed); // We possibly downloaded a pak, restart the file system to load it // inform the server so we get new gamestate info - CL_AddReliableCommand( "donedl" ); + CL_AddReliableCommand("donedl", qfalse); // by sending the donedl command we request a new gamestate // so we don't want to load stuff yet @@ -1958,7 +1931,7 @@ void CL_BeginDownload( const char *localName, const char *remoteName ) { // Stop any errant looping sounds that may be playing S_ClearLoopingSounds( qtrue ); - CL_AddReliableCommand( va("download %s", remoteName) ); + CL_AddReliableCommand( va("download %s", remoteName), qfalse ); } /* @@ -2809,7 +2782,7 @@ void CL_CheckUserinfo( void ) { if(cvar_modifiedFlags & CVAR_USERINFO) { cvar_modifiedFlags &= ~CVAR_USERINFO; - CL_AddReliableCommand( va("userinfo \"%s\"", Cvar_InfoString( CVAR_USERINFO ) ) ); + CL_AddReliableCommand(va("userinfo \"%s\"", Cvar_InfoString( CVAR_USERINFO ) ), qfalse); } } @@ -3455,7 +3428,6 @@ void CL_Init( void ) { Cmd_AddCommand ("globalservers", CL_GlobalServers_f); Cmd_AddCommand ("rcon", CL_Rcon_f); Cmd_SetCommandCompletionFunc( "rcon", CL_CompleteRcon ); - Cmd_AddCommand ("setenv", CL_Setenv_f ); Cmd_AddCommand ("ping", CL_Ping_f ); Cmd_AddCommand ("serverstatus", CL_ServerStatus_f ); Cmd_AddCommand ("showip", CL_ShowIP_f ); @@ -3522,7 +3494,6 @@ void CL_Shutdown( void ) { Cmd_RemoveCommand ("localservers"); Cmd_RemoveCommand ("globalservers"); Cmd_RemoveCommand ("rcon"); - Cmd_RemoveCommand ("setenv"); Cmd_RemoveCommand ("ping"); Cmd_RemoveCommand ("serverstatus"); Cmd_RemoveCommand ("showip"); diff --git a/src/client/cl_parse.c b/src/client/cl_parse.c index 96d4f799..08fab5a9 100644 --- a/src/client/cl_parse.c +++ b/src/client/cl_parse.c @@ -553,7 +553,7 @@ void CL_ParseDownload ( msg_t *msg ) { if (!*clc.downloadTempName) { Com_Printf("Server sending download, but no download was requested\n"); - CL_AddReliableCommand( "stopdl" ); + CL_AddReliableCommand("stopdl", qfalse); return; } @@ -595,7 +595,7 @@ void CL_ParseDownload ( msg_t *msg ) { if (!clc.download) { Com_Printf( "Could not create %s\n", clc.downloadTempName ); - CL_AddReliableCommand( "stopdl" ); + CL_AddReliableCommand("stopdl", qfalse); CL_NextDownload(); return; } @@ -604,7 +604,7 @@ void CL_ParseDownload ( msg_t *msg ) { if (size) FS_Write( data, size, clc.download ); - CL_AddReliableCommand( va("nextdl %d", clc.downloadBlock) ); + CL_AddReliableCommand(va("nextdl %d", clc.downloadBlock), qfalse); clc.downloadBlock++; clc.downloadCount += size; diff --git a/src/client/client.h b/src/client/client.h index a6d61950..4d5cd522 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -439,7 +439,7 @@ extern cvar_t *cl_voip; void CL_Init (void); void CL_FlushMemory(void); void CL_ShutdownAll(void); -void CL_AddReliableCommand( const char *cmd ); +void CL_AddReliableCommand(const char *cmd, qboolean isDisconnectCmd); void CL_StartHunkUsers( qboolean rendererOnly ); diff --git a/src/client/snd_dma.c b/src/client/snd_dma.c index c8df2daf..472af0d8 100644 --- a/src/client/snd_dma.c +++ b/src/client/snd_dma.c @@ -932,7 +932,7 @@ void S_ByteSwapRawSamples( int samples, int width, int s_channels, const byte *d /* ============ -S_RawSamples +S_Base_RawSamples Music streaming ============ @@ -953,10 +953,10 @@ void S_Base_RawSamples( int stream, int samples, int rate, int width, int s_chan } rawsamples = s_rawsamples[stream]; - intVolume = 256 * volume; + intVolume = 256 * volume * s_volume->value; if ( s_rawend[stream] < s_soundtime ) { - Com_DPrintf( "S_RawSamples: resetting minimum: %i < %i\n", s_rawend[stream], s_soundtime ); + Com_DPrintf( "S_Base_RawSamples: resetting minimum: %i < %i\n", s_rawend[stream], s_soundtime ); s_rawend[stream] = s_soundtime; } @@ -1034,7 +1034,7 @@ void S_Base_RawSamples( int stream, int samples, int rate, int width, int s_chan } if ( s_rawend[stream] > s_soundtime + MAX_RAW_SAMPLES ) { - Com_DPrintf( "S_RawSamples: overflowed %i > %i\n", s_rawend[stream], s_soundtime ); + Com_DPrintf( "S_Base_RawSamples: overflowed %i > %i\n", s_rawend[stream], s_soundtime ); } } diff --git a/src/client/snd_openal.c b/src/client/snd_openal.c index 1f91ae95..be064697 100644 --- a/src/client/snd_openal.c +++ b/src/client/snd_openal.c @@ -99,6 +99,22 @@ static const char *S_AL_ErrorMsg(ALenum error) } } +/* +================= +S_AL_ClearError +================= +*/ +static void S_AL_ClearError( qboolean quiet ) +{ + int error = qalGetError(); + + if( quiet ) + return; + if(error != AL_NO_ERROR) + Com_Printf(S_COLOR_YELLOW "WARNING: unhandled AL error: %s\n", + S_AL_ErrorMsg(error)); +} + //=========================================================================== @@ -219,7 +235,8 @@ static void S_AL_BufferUnload(sfxHandle_t sfx) if(!knownSfx[sfx].inMemory) return; - // Delete it + // Delete it + S_AL_ClearError( qfalse ); qalDeleteBuffers(1, &knownSfx[sfx].buffer); if((error = qalGetError()) != AL_NO_ERROR) Com_Printf( S_COLOR_RED "ERROR: Can't delete sound buffer for %s\n", @@ -303,6 +320,7 @@ static void S_AL_BufferLoad(sfxHandle_t sfx) format = S_AL_Format(info.width, info.channels); // Create a buffer + S_AL_ClearError( qfalse ); qalGenBuffers(1, &knownSfx[sfx].buffer); if((error = qalGetError()) != AL_NO_ERROR) { @@ -636,7 +654,8 @@ qboolean S_AL_SrcInit( void ) limit = MAX_SRC; else if(limit < 16) limit = 16; - + + S_AL_ClearError( qfalse ); // Allocate as many sources as possible for(i = 0; i < limit; i++) { @@ -1559,6 +1578,8 @@ void S_AL_MusicProcess(ALuint b) ALuint format; snd_stream_t *curstream; + S_AL_ClearError( qfalse ); + if(intro_stream) curstream = intro_stream; else @@ -1741,7 +1762,7 @@ static cvar_t *s_alCapture; #elif defined(MACOS_X) #define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL" #else -#define ALDRIVER_DEFAULT "libopenal.so.0" +#define ALDRIVER_DEFAULT "libopenal.so.1" #endif /* |