2015-08-30 06:30:29 +00:00
//------------------------------------------------------------------------------
//
// OptionsDlg.cs
//
//------------------------------------------------------------------------------
$max_screenerror = 25 ;
$min_TSScreenError = 2 ;
$max_TSScreenError = 20 ;
$min_TSDetailAdjust = 0.6 ;
$max_TSDetailAdjust = 1.0 ;
//------------------------------------------------------------------------------
function OptionsDlg :: onWake ( % this )
{
OP_VideoPane . setVisible ( false );
OP_GraphicsPane . setVisible ( false );
OP_TexturesPane . setVisible ( false );
OP_SoundPane . setVisible ( false );
OP_VoicePane . setVisible ( false );
OP_ControlsPane . setVisible ( false );
OP_NetworkPane . setVisible ( false );
OP_GamePane . setVisible ( false );
OP_VideoTab . setValue ( false );
OP_GraphicsTab . setValue ( false );
OP_TexturesTab . setValue ( false );
OP_SoundTab . setValue ( false );
OP_VoiceTab . setValue ( false );
OP_ControlsTab . setValue ( false );
OP_NetworkTab . setValue ( false );
OP_GameTab . setValue ( false );
// Initialize the Video Pane controls:
// First the Video Driver menu:
% buffer = getDisplayDeviceList ();
% count = getFieldCount ( % buffer );
for ( % i = 0 ; % i < % count ; % i ++ )
OP_VideoDriverMenu . add ( getField ( % buffer , % i ), % i );
// Select the current device:
OP_FullScreenTgl . setValue ( $pref :: Video :: fullScreen );
% selId = OP_VideoDriverMenu . findText ( $pref :: Video :: displayDevice );
if ( % selId == - 1 )
% selId = 0 ; // How did THAT happen?
OP_VideoDriverMenu . setSelected ( % selId );
OP_VideoDriverMenu . onSelect ( % selId , " " );
OP_FullScreenTgl . onAction ();
OP_ApplyBtn . setActive ( false );
// Initialize the Graphics Options controls:
OptionsDlg :: deviceDependent ( % this );
// Radeon cards don't switch color depth good until they release their beta drivers which fix this problem.
if ( $RadeonRenderer == true )
OP_BPPMenu . setActive ( false );
OP_GammaSlider . setValue ( $pref :: OpenGL :: gammaCorrection );
OP_GammaSlider . setActive ( $Video :: setGammaCorrectionSupported );
OP_TerrainSlider . setValue ( $max_screenerror - $pref :: Terrain :: screenError );
OP_ShapeSlider . setValue ( ( $max_TSScreenError - $pref :: TS :: screenError ) / ( $max_TSScreenError - $min_TSScreenError ) );
OP_ShadowSlider . setValue ( $pref :: Shadows );
OP_InteriorDetailSlider . setValue ( $pref :: Interior :: detailAdjust );
OP_VisibleDistanceSlider . setValue ( $pref :: VisibleDistanceMod );
OP_ParticleDensitySlider . setValue ( 4.0 - $pref :: ParticleDensity );
OP_DynamicLightSlider . setValue ( 100 - $pref :: Interior :: DynamicLightsClipPix );
updateDynamicLightSliderState ();
OP_SkyDetailMenu . init ();
if ( ! $pref :: SkyOn )
% selId = 5 ;
else if ( $pref :: numCloudLayers >= 0 && $pref :: numCloudLayers < 4 )
% selId = 4 - $pref :: numCloudLayers ;
else
% selId = 1 ;
OP_SkyDetailMenu . setSelected ( % selId );
OP_SkyDetailMenu . setText ( OP_SkyDetailMenu . getTextById ( % selId ) );
OP_PlayerRenderMenu . init ();
% selId = $pref :: Player :: renderMyPlayer | ( $pref :: Player :: renderMyItems << 1 );
OP_PlayerRenderMenu . setSelected ( % selId );
OP_VertexLightTgl . setValue ( $pref :: Interior :: VertexLighting );
// Initialize the Textures Options controls:
OP_TerrainTexSlider . setValue ( 6 - $pref :: Terrain :: texDetail );
// We're using the noDrawArraysAlpha variable here because we've already
// gone gold (hard to add a new profiling variable). But the Voodoo2/3/3500
// cards that have the 256x256 texture limitation (in OpenGL) also have the
// noDrawArraysAlpha hack on...so that works out nice
% mipRange = $pref :: OpenGL :: noDrawArraysAlpha ? 4.0 : 5.0 ;
OP_ShapeTexSlider . setValue ( ( 5 - $pref :: OpenGL :: mipReduction ) / % mipRange );
OP_BuildingTexSlider . setValue ( ( 5 - $pref :: OpenGL :: interiorMipReduction ) / % mipRange );
OP_SkyTexSlider . setValue ( ( 5 - $pref :: OpenGL :: skyMipReduction ) / % mipRange );
if ( ! isDemo () )
OP_HiResSkinTgl . setValue ( $pref :: use512PlayerSkins );
// Initialize the Sound Options controls:
// provider menu
% count = alxGetContexti ( ALC_PROVIDER_COUNT );
for ( % i = 0 ; % i < % count ; % i ++ )
OP_AudioProviderMenu . add ( alxGetContextstr ( ALC_PROVIDER_NAME , % i ), % i );
% selId = alxGetContexti ( ALC_PROVIDER );
OP_AudioProviderMenu . setSelected ( % selId );
OP_AudioResetProvider . setActive ( false );
// environment provider: disable and uncheck if not an environment provider
% envProvider = audioIsEnvironmentProvider ( alxGetContextstr ( ALC_PROVIDER_NAME , % selId ));
if ( !% envProvider )
OP_AudioEnvironmentTgl . setValue ( false );
OP_AudioEnvironmentTgl . setActive ( % envProvider );
// speaker menu
% count = alxGetContexti ( ALC_SPEAKER_COUNT );
for ( % i = 0 ; % i < % count ; % i ++ )
OP_AudioSpeakerMenu . add ( alxGetContextstr ( ALC_SPEAKER_NAME , % i ), % i );
% selId = alxGetContexti ( ALC_SPEAKER );
OP_AudioSpeakerMenu . setSelected ( % selId );
OP_AudioSpeakerMenu . onSelect ( % selId , " " );
OP_AudioFrequencyMenu . init ();
OP_AudioBitRateMenu . init ();
OP_AudioChannelsMenu . init ();
// don't allow changing of of mixer settings while in a game...
% active = ! isObject ( ServerConnection );
OP_AudioFrequencyMenu . setActive ( % active );
// Changing these audio settings doesn't help Linux performance
if ( $platform $ = " linux " )
{
OP_AudioBitRateMenu . setActive ( false );
OP_AudioChannelsMenu . setActive ( false );
}
else
{
OP_AudioBitRateMenu . setActive ( % active );
OP_AudioChannelsMenu . setActive ( % active );
}
// only allow for disable
if ( !% active )
OP_AudioEnvironmentTgl . setActive ( % active );
OP_AudioProviderMenu . setActive ( % active );
OP_AudioSpeakerMenu . setActive ( % active );
OP_MasterVolumeSlider . setValue ( $pref :: Audio :: masterVolume );
OP_EffectsVolumeSlider . setValue ( $pref :: Audio :: effectsVolume );
OP_VoiceBindVolumeSlider . setValue ( $pref :: Audio :: radioVolume );
OP_GuiVolumeSlider . setValue ( $pref :: Audio :: guiVolume );
OP_MusicTgl . onAction ();
OP_MusicVolumeSlider . setValue ( $pref :: Audio :: musicVolume );
// Initialize the Voice Settings controls:
OP_MicrophoneEnabledTgl . onAction ();
OP_MicrophoneVolumeSlider . setValue ( $pref :: Audio :: voiceVolume );
OP_InputBoostSlider . setValue ( $pref :: Audio :: captureGainScale );
OP_VoiceListenMenu . init ();
OP_VoiceSendMenu . init ();
OP_VoiceCodecInfo . init ();
updateInputBoost ();
// Initialize the Control Options controls:
OP_ControlGroupMenu . init ();
if ( isJoystickDetected () )
{
OP_JoystickTgl . setValue ( $pref :: Input :: JoystickEnabled );
OP_JoystickTgl . setActive ( true );
OP_ConfigureJoystickBtn . setActive ( $pref :: Input :: JoystickEnabled );
}
else
{
OP_JoystickTgl . setValue ( false );
OP_JoystickTgl . setActive ( false );
$pref :: Input :: JoystickEnabled = false ;
OP_ConfigureJoystickBtn . setActive ( false );
}
// Initialize the Network Options controls:
OP_NetworkDisplayHud . init ();
if ( ! OP_NetworkPresetsMenu . size () )
OP_NetworkPresetsMenu . init ();
OP_PacketRateSlider . setValue ( $pref :: Net :: PacketRateToClient );
OP_PacketSizeSlider . setValue ( $pref :: Net :: PacketSize );
OP_UpdateRateSlider . setValue ( $pref :: Net :: PacketRateToServer );
if ( ! OP_MasterServerMenu . size () )
OP_MasterServerMenu . init ();
% selId = OP_MasterServerMenu . findText ( $pref :: Net :: DisplayOnMaster );
if ( % selId == - 1 )
% selId = 1 ;
OP_MasterServerMenu . setSelected ( % selId );
if ( ! OP_RegionMenu . size () )
OP_RegionMenu . init ();
OP_RegionMenu . setSelected ( $pref :: Net :: RegionMask );
// Initialize the Game Options controls:
OP_ZoomSpeedSlider . setValue ( 500 - $pref :: Player :: zoomSpeed );
OP_LaunchScreenMenu . init ();
% selId = OP_LaunchScreenMenu . findText ( $pref :: Shell :: LaunchGui );
if ( % selId == - 1 )
% selId = 1 ;
OP_LaunchScreenMenu . setText ( OP_LaunchScreenMenu . getTextById ( % selId ) );
OP_LaunchScreenMenu . setSelected ( % selId );
// Hide controls that are not relevant to the demo:
if ( isDemo () )
{
OP_MasterServerTxt . setVisible ( false );
OP_MasterServerMenu . setVisible ( false );
OP_CheckEmailTgl . setVisible ( false );
OP_ChatDisconnectTgl . setVisible ( false );
OP_EditChatMenuBtn . setVisible ( false );
OP_LaunchScreenTxt . setVisible ( false );
OP_LaunchScreenMenu . setVisible ( false );
}
% this . setPane ( % this . pane );
}
//------------------------------------------------------------------------------
function OptionsDlg :: deviceDependent ( % this )
{
if ( $SwapIntervalSupported )
{
OP_VSyncTgl . setValue ( $pref :: Video :: disableVerticalSync );
OP_VSyncTgl . setActive ( true );
}
else
{
OP_VSyncTgl . setValue ( false );
OP_VSyncTgl . setActive ( false );
}
if ( isDemo () )
{
OP_TexQualityMenu . setText ( " Palletized " );
OP_TexQualityMenu . setActive ( false );
}
else
{
OP_TexQualityMenu . init ();
if ( $pref :: OpenGL :: forcePalettedTexture )
{
$pref :: OpenGL :: force16bittexture = false ;
% selId = 1 ;
}
else if ( $pref :: OpenGL :: force16bittexture )
% selId = 2 ;
else
% selId = 3 ;
OP_TexQualityMenu . setSelected ( % selId );
}
OP_CompressMenu . init ();
if ( $TextureCompressionSupported && ! $pref :: OpenGL :: disableARBTextureCompression )
{
OP_CompressLabel . setVisible ( true );
OP_CompressLabel_Disabled . setVisible ( false );
OP_CompressMenu . setActive ( true );
if ( ! $pref :: OpenGL :: allowCompression )
OP_CompressMenu . setSelected ( 1 );
else if ( $pref :: OpenGL :: compressionHint $ = " GL_NICEST " )
OP_CompressMenu . setSelected ( 3 );
else
OP_CompressMenu . setSelected ( 2 );
}
else
{
OP_CompressLabel_Disabled . setVisible ( true );
OP_CompressLabel . setVisible ( false );
OP_CompressMenu . setActive ( false );
OP_CompressMenu . setText ( " None " );
}
if ( $FogCoordSupported )
{
OP_IntTexturedFogTgl . setValue ( $pref :: Interior :: TexturedFog );
OP_IntTexturedFogTgl . setActive ( true );
}
else
{
OP_IntTexturedFogTgl . setValue ( true );
OP_IntTexturedFogTgl . setActive ( false );
}
OP_AnisotropySlider . setValue ( $pref :: OpenGL :: anisotropy );
OP_AnisotropySlider . setActive ( $AnisotropySupported );
if ( $AnisotropySupported )
{
OP_AnisotropyLabel . setVisible ( true );
OP_AnisotropyLabel_Disabled . setVisible ( false );
}
else
{
OP_AnisotropyLabel_Disabled . setVisible ( true );
OP_AnisotropyLabel . setVisible ( false );
}
OP_EnvMapTgl . setValue ( $pref :: environmentMaps );
OP_EnvMapTgl . setActive ( $pref :: OpenGL :: allowTexGen );
}
//------------------------------------------------------------------------------
function OptionsDlg :: onSleep ( % this )
{
OP_VideoDriverMenu . clear ();
OP_ResMenu . clear ();
OP_BPPMenu . clear ();
OP_AudioProviderMenu . clear ();
OP_AudioSpeakerMenu . clear ();
OP_NetworkDisplayHud . uninit ();
if ( % this . resetAudio )
{
echo ( " Resetting the audio driver... " );
audioSetDriver ( " none " );
audioSetDriver ( $pref :: Audio :: activeDriver );
% this . resetAudio = " " ;
// Play the shell hum: (all sources are gone)
if ( $HudHandle [ shellScreen ] $ = " " )
alxStop ( $HudHandle [ shellScreen ]);
$HudHandle [ shellScreen ] = alxPlay ( ShellScreenHumSound , 0 , 0 , 0 );
}
if ( isObject ( ServerConnection ) && isTextureFlushRequired () )
MessageBoxYesNo ( " WARNING " , " You have made changes that require Tribes 2 to flush the texture cache. "
@ " Doing this while the game is running can take a long time. "
@ " Do you wish to continue? " ,
" OptionsDlg.saveSettings(); " , " returnFromSettings(); " );
else
% this . saveSettings ();
}
//------------------------------------------------------------------------------
function isTextureFlushRequired ()
{
if ( $pref :: Interior :: VertexLighting != OP_VertexLightTgl . getValue () )
return ( true );
// We're using the noDrawArraysAlpha variable here because we've already
// gone gold (hard to add a new profiling variable). But the Voodoo2/3/3500
// cards that have the 256x256 texture limitation (in OpenGL) also have the
// noDrawArraysAlpha hack on...so that works out nice
% mipRange = $pref :: OpenGL :: noDrawArraysAlpha ? 4 : 5 ;
if ( $pref :: OpenGL :: mipReduction != 5 - mFloor ( OP_ShapeTexSlider . getValue () * % mipRange ) )
return ( true );
if ( $pref :: OpenGL :: interiorMipReduction != 5 - mFloor ( OP_BuildingTexSlider . getValue () * % mipRange ) )
return ( true );
if ( $pref :: OpenGL :: skyMipReduction != 5 - mFloor ( OP_SkyTexSlider . getValue () * % mipRange ) )
return ( true );
if ( $AnisotropySupported && $pref :: OpenGL :: anisotropy != OP_AnisotropySlider . getValue () )
return ( true );
if ( ! isDemo () )
{
% id = OP_TexQualityMenu . getSelected ();
if ( $pref :: OpenGL :: forcePalettedTexture )
{
if ( % id != 1 )
return ( true );
}
else if ( $pref :: OpenGL :: force16bittexture )
{
if ( % id != 2 )
return ( true );
}
else if ( % id != 3 )
return ( true );
}
if ( $TextureCompressionSupported && ! $pref :: OpenGL :: disableARBTextureCompression )
{
% id = OP_CompressMenu . getSelected ();
if ( $pref :: OpenGL :: allowCompression )
{
if ( $pref :: OpenGL :: compressionHint $ = " GL_FASTEST " )
{
if ( % id != 2 )
return ( true );
}
else if ( $pref :: OpenGL :: compressionHint $ = " GL_NICEST " )
{
if ( % id != 3 )
return ( true );
}
else if ( % id == 1 )
return ( true );
}
else if ( % id > 1 )
return ( true );
}
return ( false );
}
//------------------------------------------------------------------------------
function returnFromSettings ()
{
// to unpause singlePlayerGame when returning from options
if ( isObject ( Game ) )
Game . OptionsDlgSleep ();
}
//------------------------------------------------------------------------------
function OptionsDlg :: saveSettings ( % this )
{
// Save off any prefs that don't auto-update:
% flushTextures = false ;
if ( $SwapIntervalSupported && OP_VSyncTgl . getValue () != $pref :: Video :: disableVerticalSync )
{
$pref :: Video :: disableVerticalSync = OP_VSyncTgl . getValue ();
setVerticalSync ( ! $pref :: Video :: disableVerticalSync );
}
% temp = OP_SkyDetailMenu . getSelected ();
if ( % temp == 5 )
$pref :: SkyOn = false ;
else
{
$pref :: SkyOn = true ;
$pref :: numCloudLayers = ( 4 - % temp );
}
if ( $FogCoordSupported )
$pref :: Interior :: TexturedFog = OP_IntTexturedFogTgl . getValue ();
if ( $pref :: Interior :: VertexLighting != OP_VertexLightTgl . getValue () )
{
$pref :: Interior :: VertexLighting = OP_VertexLightTgl . getValue ();
% flushTextures = true ;
}
% temp = OP_PlayerRenderMenu . getSelected ();
$pref :: Player :: renderMyPlayer = % temp & 1 ;
$pref :: Player :: renderMyItems = % temp & 2 ;
if ( ! isDemo () )
{
switch ( OP_TexQualityMenu . getSelected () )
{
case 1 : // 8-bit
if ( ! $pref :: OpenGL :: forcePalettedTexture || $pref :: OpenGL :: force16bittexture )
{
$pref :: OpenGL :: forcePalettedTexture = true ;
$pref :: OpenGL :: force16bittexture = false ;
% flushTextures = true ;
}
case 2 : // 16-bit
if ( $pref :: OpenGL :: forcePalettedTexture || ! $pref :: OpenGL :: force16bittexture )
{
$pref :: OpenGL :: forcePalettedTexture = false ;
$pref :: OpenGL :: force16bittexture = true ;
% flushTextures = true ;
}
case 3 : // 32-bit
if ( $pref :: OpenGL :: forcePalettedTexture || $pref :: OpenGL :: force16bittexture )
{
$pref :: OpenGL :: forcePalettedTexture = false ;
$pref :: OpenGL :: force16bittexture = false ;
% flushTextures = true ;
}
}
OP_TexQualityMenu . clear ();
}
$pref :: Terrain :: texDetail = 6 - mFloor ( OP_TerrainTexSlider . getValue () );
// We're using the noDrawArraysAlpha variable here because we've already
// gone gold (hard to add a new profiling variable). But the Voodoo2/3/3500
// cards that have the 256x256 texture limitation (in OpenGL) also have the
// noDrawArraysAlpha hack on...so that works out nice
% mipRange = $pref :: OpenGL :: noDrawArraysAlpha ? 4 : 5 ;
% temp = 5 - mFloor ( OP_ShapeTexSlider . getValue () * % mipRange );
if ( $pref :: OpenGL :: mipReduction != % temp )
{
$pref :: OpenGL :: mipReduction = % temp ;
setOpenGLMipReduction ( $pref :: OpenGL :: mipReduction );
% flushTextures = true ;
}
% temp = 5 - mFloor ( OP_BuildingTexSlider . getValue () * % mipRange );
if ( $pref :: OpenGL :: interiorMipReduction != % temp )
{
$pref :: OpenGL :: interiorMipReduction = % temp ;
setOpenGLInteriorMipReduction ( $pref :: OpenGL :: interiorMipReduction );
% flushTextures = true ;
}
% temp = 5 - mFloor ( OP_SkyTexSlider . getValue () * % mipRange );
if ( $pref :: OpenGL :: skyMipReduction != % temp )
{
$pref :: OpenGL :: skyMipReduction = % temp ;
setOpenGLSkyMipReduction ( $pref :: OpenGL :: skyMipReduction );
% flushTextures = true ;
}
if ( $TextureCompressionSupported && ! $pref :: OpenGL :: disableARBTextureCompression )
{
% temp = OP_CompressMenu . getSelected ();
if ( $pref :: OpenGL :: allowCompression )
{
switch ( % temp )
{
case 2 :
if ( $pref :: OpenGL :: compressionHint ! $ = " GL_FASTEST " )
{
$pref :: OpenGL :: compressionHint = " GL_FASTEST " ;
setOpenGLTextureCompressionHint ( $pref :: OpenGL :: compressionHint );
% flushTextures = true ;
}
case 3 :
if ( $pref :: OpenGL :: compressionHint ! $ = " GL_NICEST " )
{
$pref :: OpenGL :: compressionHint = " GL_NICEST " ;
setOpenGLTextureCompressionHint ( $pref :: OpenGL :: compressionHint );
% flushTextures = true ;
}
default : // None
$pref :: OpenGL :: allowCompression = false ;
% flushTextures = true ;
}
}
else if ( % temp > 1 )
{
$pref :: OpenGL :: allowCompression = true ;
if ( % temp == 3 )
$pref :: OpenGL :: compressionHint = " GL_NICEST " ;
else
$pref :: OpenGL :: compressionHint = " GL_FASTEST " ;
setOpenGLTextureCompressionHint ( $pref :: OpenGL :: compressionHint );
% flushTextures = true ;
}
}
OP_CompressMenu . clear ();
if ( $AnisotropySupported )
{
% temp = OP_AnisotropySlider . getValue ();
if ( $pref :: OpenGL :: anisotropy != % temp )
{
$pref :: OpenGL :: anisotropy = % temp ;
setOpenGLAnisotropy ( $pref :: OpenGL :: anisotropy );
% flushTextures = true ;
}
}
if ( ! isDemo () )
{
if ( OP_HiResSkinTgl . getValue () != $pref :: use512PlayerSkins )
{
$pref :: use512PlayerSkins = OP_HiResSkinTgl . getValue ();
if ( Canvas . getContent () == GameGui . getId () && GM_WarriorPane . isVisible () )
GMW_PlayerModel . update ();
}
}
$pref :: Terrain :: screenError = $max_screenerror - mFloor ( OP_TerrainSlider . getValue () );
$pref :: TS :: screenError = $max_TSScreenError - mFloor ( OP_ShapeSlider . getValue () * ( $max_TSScreenError - $min_TSScreenError ) );
$pref :: TS :: detailAdjust = $min_TSDetailAdjust + OP_ShapeSlider . getValue () * ( $max_TSDetailAdjust - $min_TSDetailAdjust );
$pref :: Shadows = OP_ShadowSlider . getValue ();
$pref :: ParticleDensity = 4.0 - OP_ParticleDensitySlider . getValue ();
% val = 100 - OP_DynamicLightSlider . getValue ();
$pref :: Interior :: DynamicLightsClipPix = $pref :: Terrain :: DynamicLightsClipPix = % val ;
$pref :: Interior :: DynamicLightsFadePix = $pref :: Terrain :: DynamicLightsFadePix = 2 * % val ;
setShadowDetailLevel ( $pref :: Shadows );
$pref :: Interior :: detailAdjust = OP_InteriorDetailSlider . getValue ();
$pref :: VisibleDistanceMod = OP_VisibleDistanceSlider . getValue ();
$pref :: Audio :: musicVolume = OP_MusicVolumeSlider . getValue ();
$pref :: Audio :: masterVolume = OP_MasterVolumeSlider . getValue ();
$pref :: Audio :: effectsVolume = OP_EffectsVolumeSlider . getValue ();
alxSetChannelVolume ( $EffectAudioType , $pref :: Audio :: effectsVolume );
$pref :: Audio :: voiceVolume = OP_MicrophoneVolumeSlider . getValue ();
alxSetChannelVolume ( $VoiceAudioType , $pref :: Audio :: voiceVolume );
$pref :: Audio :: radioVolume = OP_VoiceBindVolumeSlider . getValue ();
alxSetChannelVolume ( $ChatAudioType , $pref :: Audio :: radioVolume );
$pref :: Audio :: guiVolume = OP_GuiVolumeSlider . getValue ();
alxSetChannelVolume ( $GuiAudioType , $pref :: Audio :: guiVolume );
$pref :: Audio :: captureGainScale = OP_InputBoostSlider . getValue ();
if ( ! $missionRunning )
MusicPlayer . stop ();
if ( $pref :: Audio :: enableVoiceCapture )
{
% reinit = false ;
% selId = OP_VoiceListenMenu . getSelected ();
if ( $pref :: Audio :: decodingMask != % selId )
{
$pref :: Audio :: decodingMask = % selId ;
% reinit = true ;
}
% selId = OP_VoiceSendMenu . getSelected ();
if ( $pref :: Audio :: encodingLevel != % selId )
{
$pref :: Audio :: encodingLevel = % selId ;
% reinit = true ;
}
if ( % reinit )
{
alxCaptureDestroy ();
alxCaptureInit ();
// If in a game, let the server know about the altered settings:
if ( isObject ( ServerConnection ) )
commandToServer ( 'SetVoiceInfo' , $pref :: Audio :: voiceChannels , $pref :: Audio :: decodingMask , $pref :: Audio :: encodingLevel );
}
}
updateNetworkSettings ();
$pref :: Player :: zoomSpeed = 500 - mFloor ( OP_ZoomSpeedSlider . getValue () );
setZoomSpeed ( $pref :: Player :: zoomSpeed );
$pref :: Shell :: LaunchGui = OP_LaunchScreenMenu . getText ();
export ( " $pref ::* " , " prefs/ClientPrefs.cs " , false );
saveActiveMapFile ();
if ( % flushTextures )
{
// Give the Options Dialog a chance to go away:
OptionsDlg . schedule ( 0 , doTextureFlush );
}
returnFromSettings ();
}
//------------------------------------------------------------------------------
function OptionsDlg :: doTextureFlush ( % this )
{
MessagePopup ( " PLEASE WAIT " , " Flushing texture cache... \n This may take a while " );
Canvas . repaint ();
flushTextureCache ();
CloseMessagePopup ();
}
//------------------------------------------------------------------------------
function OptionsDlg :: setPane ( % this , % pane )
{
if (( % this . pane $ = " Sound " ) && ! $missionRunning )
MusicPlayer . stop ();
if ( % this . pane ! $ = " None " )
{
% paneCtrl = " OP_ " @ % this . pane @ " Pane " ;
% paneCtrl . setVisible ( false );
% tabCtrl = " OP_ " @ % this . pane @ " Tab " ;
% tabCtrl . setValue ( false );
}
% paneCtrl = " OP_ " @ % pane @ " Pane " ;
% paneCtrl . setVisible ( true );
% tabCtrl = " OP_ " @ % pane @ " Tab " ;
% tabCtrl . setValue ( true );
% this . pane = % pane ;
}
//------------------------------------------------------------------------------
function OptionsDlg :: applyGraphicChanges ( % this )
{
% newDriver = OP_VideoDriverMenu . getText ();
% newRes = OP_ResMenu . getText ();
% newBpp = OP_BPPMenu . getText ();
% newFullScreen = OP_FullScreenTgl . getValue ();
if ( % newDriver ! $ = $pref :: Video :: displayDevice )
{
setDisplayDevice ( % newDriver , firstWord ( % newRes ), getWord ( % newRes , 1 ), % newBpp , % newFullScreen );
OptionsDlg :: deviceDependent ( % this );
}
else
setScreenMode ( firstWord ( % newRes ), getWord ( % newRes , 1 ), % newBpp , % newFullScreen );
OP_ApplyBtn . updateState ();
}
//------------------------------------------------------------------------------
function OP_VideoDriverMenu :: onSelect ( % this , % id , % text )
{
// Attempt to keep the same res and bpp settings:
if ( OP_ResMenu . size () > 0 )
% prevRes = OP_ResMenu . getText ();
else
% prevRes = getWords ( $pref :: Video :: resolution , 0 , 1 );
// Check if this device is full-screen only:
if ( isDeviceFullScreenOnly ( % this . getText () ) )
{
OP_FullScreenTgl . setValue ( true );
OP_FullScreenTgl . setActive ( false );
OP_FullScreenTgl . onAction ();
}
else
OP_FullScreenTgl . setActive ( true );
if ( OP_FullScreenTgl . getValue () )
{
if ( OP_BPPMenu . size () > 0 )
% prevBPP = OP_BPPMenu . getText ();
else
% prevBPP = getWord ( $pref :: Video :: resolution , 2 );
}
// Fill the resolution and bit depth lists:
OP_ResMenu . init ( % this . getText (), OP_FullScreenTgl . getValue () );
OP_BPPMenu . init ( % this . getText () );
// Try to select the previous settings:
% selId = OP_ResMenu . findText ( % prevRes );
if ( % selId == - 1 )
% selId = 0 ;
OP_ResMenu . setSelected ( % selId );
if ( OP_FullScreenTgl . getValue () )
{
% selId = OP_BPPMenu . findText ( % prevBPP );
if ( % selId == - 1 )
% selId = 0 ;
OP_BPPMenu . setSelected ( % selId );
OP_BPPMenu . setText ( OP_BPPMenu . getTextById ( % selId ) );
}
else
OP_BPPMenu . setText ( " Default " );
OP_ApplyBtn . updateState ();
}
//------------------------------------------------------------------------------
function OP_ResMenu :: init ( % this , % device , % fullScreen )
{
% this . clear ();
% resList = getResolutionList ( % device );
% resCount = getFieldCount ( % resList );
% deskRes = getDesktopResolution ();
% count = 0 ;
for ( % i = 0 ; % i < % resCount ; % i ++ )
{
% res = getWords ( getField ( % resList , % i ), 0 , 1 );
if ( !% fullScreen )
{
if ( firstWord ( % res ) >= firstWord ( % deskRes ) )
continue ;
if ( getWord ( % res , 1 ) >= getWord ( % deskRes , 1 ) )
continue ;
}
// Only add to list if it isn't there already:
if ( % this . findText ( % res ) == - 1 )
{
% this . add ( % res , % count );
% count ++ ;
}
}
}
//------------------------------------------------------------------------------
function OP_ResMenu :: onSelect ( % this , % id , % text )
{
OP_ApplyBtn . updateState ();
}
//------------------------------------------------------------------------------
function OP_BPPMenu :: init ( % this , % device )
{
% this . clear ();
if ( % device $ = " Voodoo2 " )
% this . add ( " 16 " , 0 );
else
{
% resList = getResolutionList ( % device );
% resCount = getFieldCount ( % resList );
% count = 0 ;
for ( % i = 0 ; % i < % resCount ; % i ++ )
{
% bpp = getWord ( getField ( % resList , % i ), 2 );
// Only add to list if it isn't there already:
if ( % this . findText ( % bpp ) == - 1 )
{
% this . add ( % bpp , % count );
% count ++ ;
}
}
}
}
//------------------------------------------------------------------------------
function OP_BPPMenu :: onSelect ( % this , % id , % text )
{
OP_ApplyBtn . updateState ();
}
//------------------------------------------------------------------------------
function OP_FullScreenTgl :: onAction ( % this )
{
// Attempt to maintain current settings:
% selId = OP_ResMenu . getSelected ();
if ( % selId == - 1 )
% selId = 0 ;
% prevRes = OP_ResMenu . getTextById ( % selId );
OP_ResMenu . init ( OP_VideoDriverMenu . getText (), % this . getValue () );
% selId = OP_ResMenu . findText ( % prevRes );
if ( % selId == - 1 )
% selId = 0 ;
OP_ResMenu . setSelected ( % selId );
if ( % this . getValue () )
{
% selId = OP_BPPMenu . findText ( getWord ( $pref :: Video :: resolution , 2 ) );
if ( % selId == - 1 )
% selId = 0 ;
OP_BPPMenu . setSelected ( % selId );
OP_BPPMenu . setText ( OP_BPPMenu . getTextById ( % selId ) );
OP_BPPMenu . setActive ( true );
}
else
{
OP_BPPMenu . setText ( " Default " );
OP_BPPMenu . setActive ( false );
}
OP_ApplyBtn . updateState ();
}
//------------------------------------------------------------------------------
function OP_ApplyBtn :: updateState ( % this )
{
% active = false ;
if ( OP_VideoDriverMenu . getText () ! $ = $pref :: Video :: displayDevice )
% active = true ;
else if ( OP_ResMenu . getText () ! $ = getWords ( $pref :: Video :: resolution , 0 , 1 ) )
% active = true ;
else if ( OP_FullScreenTgl . getValue () != $pref :: Video :: fullScreen )
% active = true ;
else if ( OP_FullScreenTgl . getValue () )
{
if ( OP_BPPMenu . getText () ! $ = getWord ( $pref :: Video :: resolution , 2 ) )
% active = true ;
}
% this . setActive ( % active );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Graphics Settings:
//
function updateGammaCorrection ()
{
$pref :: OpenGL :: gammaCorrection = OP_GammaSlider . getValue ();
videoSetGammaCorrection ( $pref :: OpenGL :: gammaCorrection );
}
//------------------------------------------------------------------------------
function updateTerrainDetail ()
{
$pref :: Terrain :: screenError = $max_screenerror - mFloor ( OP_TerrainSlider . getValue ());
if ( OP_TerrainSlider . getValue () != $max_screenerror - $pref :: Terrain :: screenError )
OP_TerrainSlider . setValue ( $max_screenerror - $pref :: Terrain :: screenError );
}
//------------------------------------------------------------------------------
function updateDynamicLightSliderState ()
{
% on = $pref :: Interior :: DynamicLights || $pref :: Terrain :: dynamicLights ;
OP_DynamicLightText . setVisible ( % on );
OP_DynamicLightText_Disabled . setVisible ( !% on );
OP_DynamicLightSlider . setActive ( % on );
}
//------------------------------------------------------------------------------
function OP_SkyDetailMenu :: init ( % this )
{
% this . clear ();
% this . add ( " Full Sky " , 1 );
% this . add ( " Two Cloud Layers " , 2 );
% this . add ( " One Cloud Layer " , 3 );
% this . add ( " Sky Box Only " , 4 );
% this . add ( " No Sky " , 5 );
}
//------------------------------------------------------------------------------
function OP_PlayerRenderMenu :: init ( % this )
{
% this . clear ();
% this . add ( " Player and Items " , 3 );
% this . add ( " Player only " , 1 );
% this . add ( " Items only " , 2 );
% this . add ( " Neither Player nor Items " , 0 );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Texture Settings:
//
function OP_CompressMenu :: init ( % this )
{
% this . clear ();
% this . add ( " None " , 1 );
% this . add ( " Fastest " , 2 );
% this . add ( " Nicest " , 3 );
}
//------------------------------------------------------------------------------
function OP_TexQualityMenu :: init ( % this )
{
% this . clear ();
if ( $PalettedTextureSupported )
% this . add ( " Palletized " , 1 );
% this . add ( " 16 bit " , 2 );
% this . add ( " 32 bit " , 3 );
}
//------------------------------------------------------------------------------
function OP_TexQualityMenu :: onSelect ( % this , % id , % text )
{
if ( % id == 1 )
{
// Disable these with palletized textures by default:
OP_EnvMapTgl . setValue ( false );
//OP_EnvMapTgl.setActive( false );
OP_IntEnvMapTgl . setValue ( false );
//OP_IntEnvMapTgl.setActive( false );
}
// else
// {
// OP_EnvMapTgl.setActive( true );
// OP_IntEnvMapTgl.setActive( true );
// }
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Audio Settings:
//
function setAudioProvider ( % idx )
{
alxContexti ( ALC_PROVIDER , % idx );
$pref :: Audio :: provider = alxGetContextstr ( ALC_PROVIDER_NAME , % idx );
% active = audioIsEnvironmentProvider ( $pref :: Audio :: provider );
// unset tgl if cannot be environment provider
if ( !% active )
OP_AudioEnvironmentTgl . setValue ( false );
OP_AudioEnvironmentTgl . setActive ( % active );
audioUpdateProvider ( $pref :: Audio :: provider );
OP_AudioProviderMenu . setSelected ( % idx );
}
//------------------------------------------------------------------------------
function OP_AudioEnvironmentTgl :: onAction ( % this )
{
alxEnableEnvironmental ( % this . getValue ());
}
//------------------------------------------------------------------------------
function OP_AudioProviderMenu :: onSelect ( % this , % id , % text )
{
if ( % id != $Audio :: originalProvider )
{
if ( !% this . seenWarning )
{
MessageBoxOK ( " Warning " , " Changing sound drivers may result in incompatibilities and game oddities. If you experience such oddities, hit \" Reset \" to restore defaults. " , " " );
% this . seenWarning = true ;
}
OP_AudioResetProvider . setActive ( true );
}
setAudioProvider ( % id );
}
//------------------------------------------------------------------------------
function OP_AudioResetProvider :: onAction ( % this )
{
setAudioProvider ( $Audio :: originalProvider );
% this . setActive ( false );
}
//------------------------------------------------------------------------------
function OP_AudioSpeakerMenu :: onSelect ( % this , % id , % text )
{
alxContexti ( ALC_SPEAKER , % id );
$pref :: Audio :: speakerType = alxGetContextstr ( ALC_SPEAKER_NAME , % id );
}
//------------------------------------------------------------------------------
function OP_AudioFrequencyMenu :: init ( % this )
{
% this . clear ();
% this . add ( " 11 KHz " , 0 );
% this . add ( " 22 KHz " , 1 );
% this . add ( " 44 KHz " , 2 );
switch ( $pref :: Audio :: frequency )
{
case 11025 : % this . setSelected ( 0 );
case 22050 : % this . setSelected ( 1 );
default : % this . setSelected ( 2 );
}
}
//------------------------------------------------------------------------------
function OP_AudioFrequencyMenu :: onSelect ( % this , % id , % text )
{
switch ( % id )
{
case 0 : % newVal = 11025 ;
case 1 : % newVal = 22050 ;
default : % newVal = 44100 ;
}
if ( $pref :: Audio :: frequency != % newVal )
{
$pref :: Audio :: frequency = % newVal ;
OptionsDlg . resetAudio = true ;
}
}
//------------------------------------------------------------------------------
function OP_AudioBitRateMenu :: init ( % this )
{
% this . clear ();
% this . add ( " 8 bit " , 0 );
% this . add ( " 16 bit " , 1 );
if ( $pref :: Audio :: sampleBits == 8 )
% this . setSelected ( 0 );
else
% this . setSelected ( 1 );
}
//------------------------------------------------------------------------------
function OP_AudioBitRateMenu :: onSelect ( % this , % id , % text )
{
% newVal = % id == 0 ? 8 : 16 ;
if ( $pref :: Audio :: sampleBits != % newVal )
{
$pref :: Audio :: sampleBits = % newVal ;
OptionsDlg . resetAudio = true ;
}
}
//------------------------------------------------------------------------------
function OP_AudioChannelsMenu :: init ( % this )
{
% this . clear ();
% this . add ( " One " , 0 );
% this . add ( " Two " , 1 );
if ( $pref :: Audio :: channels == 1 )
% this . setSelected ( 0 );
else
% this . setSelected ( 1 );
}
//------------------------------------------------------------------------------
function OP_AudioChannelsMenu :: onSelect ( % this , % id , % text )
{
% newVal = % id == 0 ? 1 : 2 ;
if ( $pref :: Audio :: channels != % newVal )
{
$pref :: Audio :: channels = % newVal ;
OptionsDlg . resetAudio = true ;
}
}
//------------------------------------------------------------------------------
function OP_MusicTgl :: onAction ( % this )
{
% on = % this . getValue ();
OP_MusicVolumeLabel . setVisible ( % on );
OP_MusicVolumeLabel_Disabled . setVisible ( !% on );
OP_MusicVolumeSlider . setActive ( % on );
$pref :: Audio :: musicEnabled = % on ;
if ( % on )
MusicPlayer . play ();
else
MusicPlayer . stop ();
}
//------------------------------------------------------------------------------
function updateMusicVolume ()
{
% volume = OP_MusicVolumeSlider . getValue ();
alxSetChannelVolume ( $MusicAudioType , % volume );
}
//------------------------------------------------------------------------------
function updateGuiVolume ()
{
% volume = OP_GuiVolumeSlider . getValue ();
alxSetChannelVolume ( $GuiAudioType , % volume );
}
//------------------------------------------------------------------------------
function updateMasterVolume ()
{
% volume = OP_MasterVolumeSlider . getValue ();
alxListenerf ( AL_GAIN_LINEAR , % volume );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Voice Settings:
//
function OP_MicrophoneEnabledTgl :: onAction ( % this )
{
% on = % this . getValue ();
OP_RecordTestBtn . setActive ( % on );
OP_MicVolumeLabel . setVisible ( % on );
OP_MicVolumeLabel_Disabled . setVisible ( !% on );
OP_MicrophoneVolumeSlider . setActive ( % on );
OP_InputBoostLabel . setVisible ( % on );
OP_InputBoostLabel_Disabled . setVisible ( !% on );
OP_InputBoostSlider . setActive ( % on );
OP_InputBoostPercentTxt . setVisible ( % on );
OP_VoiceListenLabel . setVisible ( % on );
OP_VoiceListenLabel_Disabled . setVisible ( !% on );
OP_VoiceListenMenu . setActive ( % on );
OP_VoiceSendLabel . setVisible ( % on );
OP_VoiceSendLabel_Disabled . setVisible ( !% on );
OP_VoiceSendMenu . setActive ( % on );
if ( % on != alxIsEnabled ( " capture " ))
{
if ( % on )
alxCaptureInit ();
else
alxCaptureDestroy ();
}
}
//------------------------------------------------------------------------------
function updateInputBoost ()
{
% val = OP_InputBoostSlider . getValue ();
alxSetCaptureGainScale ( % val );
% val = mFloor ( % val * 100 );
OP_InputBoostPercentTxt . setValue ( % val @ " % " );
}
//------------------------------------------------------------------------------
function OP_RecordTestBtn :: onAction ( % this )
{
alxCaptureStart ( true );
}
//------------------------------------------------------------------------------
function localCaptureStart ( % method )
{
if ( % method $ = " record " )
{
OP_RecordTestBtn . setActive ( false );
OP_RecordTestBtn . setValue ( " >> Recording << " );
}
else
{
OP_RecordTestBtn . setActive ( false );
OP_RecordTestBtn . setValue ( " >> Playing << " );
}
}
//------------------------------------------------------------------------------
function localCaptureStop ( % method )
{
if ( % method $ = " play " )
{
OP_RecordTestBtn . setActive ( true );
OP_RecordTestBtn . setValue ( " Test Record " );
}
}
//------------------------------------------------------------------------------
function OP_VoiceListenMenu :: init ( % this )
{
% this . clear ();
% this . add ( " <NONE> " , 0 );
if ( $platform ! $ = " linux " ) {
% this . add ( " .v12 " , 1 );
% this . add ( " .v12 - .v24 " , 3 );
% this . add ( " .v12 - .v29 " , 7 );
}
if ( $platform $ = " linux " ) {
% this . add ( " GSM " , 8 );
}
switch ( $pref :: Audio :: decodingMask )
{
case 0 or 3 or 7 or 8 :
% this . setSelected ( $pref :: Audio :: decodingMask );
default :
% this . setSelected ( 1 );
}
}
//------------------------------------------------------------------------------
function OP_VoiceSendMenu :: init ( % this )
{
% this . clear ();
if ( $platform ! $ = " linux " ) {
% this . add ( " .v12 " , 0 );
% this . add ( " .v24 " , 1 );
% this . add ( " .v29 " , 2 );
}
if ( $platform $ = " linux " ) {
% this . add ( " GSM " , 3 );
}
% this . setSelected ( $pref :: Audio :: encodingLevel );
}
function OP_VoiceCodecInfo :: init ( % this )
{
% headerStyle = " <font: " @ $ShellLabelFont @ " : " @ $ShellFontSize @ " ><color:00DC00> " ;
if ( $platform $ = " linux " ) {
% displayText = " <spush> " @ % headerStyle @ " Voice Codec Information:<spop> " NL
" \n " @
" GSM: fixed bitrate codec (6.6 kbits/sec linux only) " NL
" \n " @
" <bitmap:bullet_2><lmargin:24> " @
" Setting your codec levels too high can have adverse " @
" affects on network performance. " @
" <lmargin:0> " ;
} else {
% displayText = " <spush> " @ % headerStyle @ " Voice Codec Information:<spop> " NL
" \n " @
" .v12: variable bitrate codec (~1.2 kbits/sec win only) " NL
" .v24: fixed bitrate codec (2.4 kbits/sec win only) " NL
" .v29: fixed bitrate codec (2.9 kbits/sec win only) " NL
" \n " @
" <bitmap:bullet_2><lmargin:24> " @
" Setting your codec levels too high can have adverse " @
" affects on network performance. " @
" <lmargin:0> " ;
}
% this . setText ( % displayText );
% this . setActive ( false );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Driver Info dialog:
//
function DriverInfoDlg :: onWake ( % this )
{
% headerStyle = " <font: " @ $ShellLabelFont @ " : " @ $ShellFontSize @ " ><color:00DC00> " ;
% infoString = getVideoDriverInfo ();
% displayText = " <spush> " @ % headerStyle @ " VENDOR:<spop> " NL
" " @ getField ( % infoString , 0 ) NL
" <spush> " @ % headerStyle @ " RENDERER:<spop> " NL
" " @ getField ( % infoString , 1 ) NL
" <spush> " @ % headerStyle @ " VERSION<spop> " @ getField ( % infoString , 2 ) NL
" \n " @
" <spush> " @ % headerStyle @ " SUPPORTED OPENGL EXTENSIONS:<spop><lmargin:5><just:center> " NL
getField ( % infoString , 3 );
DriverInfoText . setText ( % displayText );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Control remapper section:
//
$RemapCount = 0 ;
$RemapName [ $RemapCount ] = " Forward " ;
$RemapCmd [ $RemapCount ] = " moveforward " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Backward " ;
$RemapCmd [ $RemapCount ] = " movebackward " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Strafe Left " ;
$RemapCmd [ $RemapCount ] = " moveleft " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Strafe Right " ;
$RemapCmd [ $RemapCount ] = " moveright " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Turn Left " ;
$RemapCmd [ $RemapCount ] = " turnLeft " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Turn Right " ;
$RemapCmd [ $RemapCount ] = " turnRight " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Look Up " ;
$RemapCmd [ $RemapCount ] = " panUp " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Look Down " ;
$RemapCmd [ $RemapCount ] = " panDown " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Jump " ;
$RemapCmd [ $RemapCount ] = " jump " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Jet Pack " ;
$RemapCmd [ $RemapCount ] = " mouseJet " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Fire Weapon " ;
$RemapCmd [ $RemapCount ] = " mouseFire " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Zoom " ;
$RemapCmd [ $RemapCount ] = " toggleZoom " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Cycle Zoom Level " ;
$RemapCmd [ $RemapCount ] = " setZoomFOV " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot One " ;
$RemapCmd [ $RemapCount ] = " useFirstWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot Two " ;
$RemapCmd [ $RemapCount ] = " useSecondWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot Three " ;
$RemapCmd [ $RemapCount ] = " useThirdWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot Four " ;
$RemapCmd [ $RemapCount ] = " useFourthWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot Five " ;
$RemapCmd [ $RemapCount ] = " useFifthWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Weapon Slot Six " ;
$RemapCmd [ $RemapCount ] = " useSixthWeaponSlot " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Blaster " ;
$RemapCmd [ $RemapCount ] = " useBlaster " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Plasma Rifle " ;
$RemapCmd [ $RemapCount ] = " usePlasma " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Chaingun " ;
$RemapCmd [ $RemapCount ] = " useChaingun " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Spinfusor " ;
$RemapCmd [ $RemapCount ] = " useDisc " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Grenade Launcher " ;
$RemapCmd [ $RemapCount ] = " useGrenadeLauncher " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Laser Rifle " ;
$RemapCmd [ $RemapCount ] = " useSniperRifle " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " ELF Projector " ;
$RemapCmd [ $RemapCount ] = " useELFGun " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Fusion Mortar " ;
$RemapCmd [ $RemapCount ] = " useMortar " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Missile Launcher " ;
$RemapCmd [ $RemapCount ] = " useMissileLauncher " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Shocklance " ;
$RemapCmd [ $RemapCount ] = " useShockLance " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Targeting Laser " ;
$RemapCmd [ $RemapCount ] = " useTargetingLaser " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Previous Weapon " ;
$RemapCmd [ $RemapCount ] = " prevWeapon " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Next Weapon " ;
$RemapCmd [ $RemapCount ] = " nextWeapon " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Throw Grenade " ;
$RemapCmd [ $RemapCount ] = " throwGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Place Mine " ;
$RemapCmd [ $RemapCount ] = " placeMine " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Use Pack " ;
$RemapCmd [ $RemapCount ] = " useBackpack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Use Health Kit " ;
$RemapCmd [ $RemapCount ] = " useRepairKit " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Deploy Beacon " ;
$RemapCmd [ $RemapCount ] = " placeBeacon " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Inventory " ;
$RemapCmd [ $RemapCount ] = " toggleInventoryHud " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 1 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite1 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 2 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite2 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 3 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite3 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 4 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite4 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 5 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite5 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 6 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite6 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 7 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite7 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 8 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite8 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 9 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite9 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 10 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite10 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 11 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite11 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 12 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite12 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 13 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite13 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 14 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite14 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 15 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite15 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 16 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite16 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 17 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite17 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 18 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite18 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 19 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite19 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Favorite 20 " ;
$RemapCmd [ $RemapCount ] = " selectFavorite20 " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Energy Pack " ;
$RemapCmd [ $RemapCount ] = " quickPackEnergyPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Repair Pack " ;
$RemapCmd [ $RemapCount ] = " quickPackRepairPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Shield Pack " ;
$RemapCmd [ $RemapCount ] = " quickPackShieldPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Cloaking Pack " ;
$RemapCmd [ $RemapCount ] = " quickPackCloakPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Sensor Jammer " ;
$RemapCmd [ $RemapCount ] = " quickPackJammerPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Ammo Pack " ;
$RemapCmd [ $RemapCount ] = " quickPackAmmoPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Satchel Charge " ;
$RemapCmd [ $RemapCount ] = " quickPackSatchelCharge " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Inv Station " ;
$RemapCmd [ $RemapCount ] = " quickPackDeployableStation " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Spider Turret " ;
$RemapCmd [ $RemapCount ] = " quickPackIndoorTurret " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Landspike Turret " ;
$RemapCmd [ $RemapCount ] = " quickPackOutdoorTurret " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Motion Sensor " ;
$RemapCmd [ $RemapCount ] = " quickPackMotionSensor " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Deploy Pulse " ;
$RemapCmd [ $RemapCount ] = " quickPackPulse " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Plasma Barrel " ;
$RemapCmd [ $RemapCount ] = " quickPackPlasmaBarrel " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Missile Barrel " ;
$RemapCmd [ $RemapCount ] = " quickPackMissileBarrel " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select AA Barrel " ;
$RemapCmd [ $RemapCount ] = " quickPackAABarrel " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Mortar Barrel " ;
$RemapCmd [ $RemapCount ] = " quickPackMortarBarrel " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Elf Barrel " ;
$RemapCmd [ $RemapCount ] = " quickPackElfBarrel " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Grenade " ;
$RemapCmd [ $RemapCount ] = " quickPackGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Flash Grenade " ;
$RemapCmd [ $RemapCount ] = " quickPackFlashGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Concussion " ;
$RemapCmd [ $RemapCount ] = " quickPackConcussionGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Camera " ;
$RemapCmd [ $RemapCount ] = " quickPackCameraGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Select Flare Grenade " ;
$RemapCmd [ $RemapCount ] = " quickPackFlareGrenade " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Command Circuit " ;
$RemapCmd [ $RemapCount ] = " toggleCommanderMap " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Task List " ;
$RemapCmd [ $RemapCount ] = " toggleTaskListDlg " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Accept Task " ;
$RemapCmd [ $RemapCount ] = " fnAcceptTask " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Decline Task " ;
$RemapCmd [ $RemapCount ] = " fnDeclineTask " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Task Completed " ;
$RemapCmd [ $RemapCount ] = " fnTaskCompleted " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Reset Task List " ;
$RemapCmd [ $RemapCount ] = " fnResetTaskList " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Vote Yes " ;
$RemapCmd [ $RemapCount ] = " voteYes " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Vote No " ;
$RemapCmd [ $RemapCount ] = " voteNo " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Voice Chat Menu " ;
$RemapCmd [ $RemapCount ] = " activateChatMenuHud " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Global Chat " ;
$RemapCmd [ $RemapCount ] = " ToggleMessageHud " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Team Chat " ;
$RemapCmd [ $RemapCount ] = " TeamMessageHud " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Resize Chat Hud " ;
$RemapCmd [ $RemapCount ] = " resizeChatHud " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Microphone " ;
$RemapCmd [ $RemapCount ] = " voiceCapture " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Help Text " ;
$RemapCmd [ $RemapCount ] = " toggleHelpGui " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Score Screen " ;
$RemapCmd [ $RemapCount ] = " toggleScoreScreen " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Free Look " ;
$RemapCmd [ $RemapCount ] = " toggleFreeLook " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Exterior View " ;
$RemapCmd [ $RemapCount ] = " toggleFirstPerson " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Drop Weapon " ;
$RemapCmd [ $RemapCount ] = " throwWeapon " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Drop Pack " ;
$RemapCmd [ $RemapCount ] = " throwPack " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Drop Flag " ;
$RemapCmd [ $RemapCount ] = " throwFlag " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Suicide " ;
$RemapCmd [ $RemapCount ] = " suicide " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Personal Wypts " ;
$RemapCmd [ $RemapCount ] = " toggleHudWaypoints " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Mission Wypts " ;
$RemapCmd [ $RemapCount ] = " toggleHudMarkers " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Beacons " ;
$RemapCmd [ $RemapCount ] = " toggleHudTargets " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Commands " ;
$RemapCmd [ $RemapCount ] = " toggleHudCommands " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Interact / Use " ;
$RemapCmd [ $RemapCount ] = " InteractWithObject " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Increase Frequency " ;
$RemapCmd [ $RemapCount ] = " IncreaseRadioFrequency " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Decrease Frequency " ;
$RemapCmd [ $RemapCount ] = " DecreaseRadioFrequency " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Increase Voice " ;
$RemapCmd [ $RemapCount ] = " IncreaseVoiceRange " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Decrease Voice " ;
$RemapCmd [ $RemapCount ] = " DecreaseVoiceRange " ;
$RemapCount ++ ;
if ( ! isDemo () )
{
$RemapName [ $RemapCount ] = " Start Demo Record " ;
$RemapCmd [ $RemapCount ] = " startRecordingDemo " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Stop Demo Record " ;
$RemapCmd [ $RemapCount ] = " stopRecordingDemo " ;
$RemapCount ++ ;
}
$RemapName [ $RemapCount ] = " Chat Page Up " ;
$RemapCmd [ $RemapCount ] = " pageMessageHudUp " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Chat Page Down " ;
$RemapCmd [ $RemapCount ] = " pageMessageHudDown " ;
$RemapCount ++ ;
$RemapName [ $RemapCount ] = " Toggle Net Meter " ;
$RemapCmd [ $RemapCount ] = " toggleNetDisplayHud " ;
$RemapCount ++ ;
$ObsRemapCount = 0 ;
$ObsRemapName [ $ObsRemapCount ] = " Move Up " ;
$ObsRemapCmd [ $ObsRemapCount ] = " moveup " ;
$ObsRemapCount ++ ;
$ObsRemapName [ $ObsRemapCount ] = " Move Down " ;
$ObsRemapCmd [ $ObsRemapCount ] = " movedown " ;
$ObsRemapCount ++ ;
$ObsRemapName [ $ObsRemapCount ] = " Toggle Observer Mode " ;
$ObsRemapCmd [ $ObsRemapCount ] = " jump " ;
$ObsRemapCount ++ ;
$ObsRemapName [ $ObsRemapCount ] = " Spawn/Previous " ;
$ObsRemapCmd [ $ObsRemapCount ] = " mouseFire " ;
$ObsRemapCount ++ ;
$ObsRemapName [ $ObsRemapCount ] = " Cycle Camera/Next " ;
$ObsRemapCmd [ $ObsRemapCount ] = " mouseJet " ;
$ObsRemapCount ++ ;
//------------------------------------------------------------------------------
function restoreDefaultMappings ()
{
moveMap . delete ();
exec ( " scripts/controlDefaults.cs " );
$pref :: Input :: ActiveConfig = " MyConfig " ;
OP_RemapList . fillList ();
}
//------------------------------------------------------------------------------
function isMapFile ( % file )
{
% fObject = new FileObject ();
if ( !% fObject . openForRead ( % file ) )
return ( false );
while ( !% fObject . isEOF () )
{
% line = % fObject . readLine ();
if ( % line $ = " // Tribes 2 Input Map File " )
{
% fObject . close ();
return ( true );
}
}
% fObject . close ();
return ( false );
}
//------------------------------------------------------------------------------
function isValidMapFileSaveName ( % file )
{
if ( isDemo ())
% basePath = " demo_base/ " ;
else
% basePath = " base/ " ;
if ( ! isWriteableFileName ( % basePath @ % file ) )
return ( false );
if ( isFile ( % file ) )
return ( isMapFile ( % file ) );
return ( true );
}
//------------------------------------------------------------------------------
function loadMapFile ( % filename )
{
exec ( " prefs/ " @ % filename @ " .cs " );
$pref :: Input :: ActiveConfig = % filename ;
OP_RemapList . fillList ();
}
//------------------------------------------------------------------------------
function saveActiveMapFile ()
{
if ( isValidMapFileSaveName ( " prefs/ " @ $pref :: Input :: ActiveConfig @ " .cs " ) )
saveMapFile ( $pref :: Input :: ActiveConfig );
else
ShellGetSaveFilename ( " SAVE CONTROL CONFIG " , " prefs/*.cs " , " isMapFile " , " saveMapFile " , " " );
}
//------------------------------------------------------------------------------
function saveMapFile ( % filename )
{
if ( strcspn ( % filename , " \\ /?* \" \ '<>| " ) < strlen ( % filename ) )
{
MessageBoxOK ( " SAVE FAILED " , " Filenames may not contain any of the following characters: " NL " \\ / ? * < > \" \ ' | " ,
" ShellGetSaveFilename( \" SAVE CONTROL CONFIG \" , \" prefs/*.cs \" , \" isMapFile \" , \" saveMapFile \" , $pref ::Input::ActiveConfig ); " );
return ;
}
if ( isDemo ())
% basePath = " demo_base/ " ;
else
% basePath = " base/ " ;
% mapFile = " prefs/ " @ % filename @ " .cs " ;
if ( ! isWriteableFileName ( % basePath @ % mapFile ) )
{
MessageBoxOK ( " SAVE FAILED " , " That is not a writeable file name. Please choose another file name. " ,
" ShellGetSaveFilename( \" SAVE CONTROL CONFIG \" , \" prefs/*.cs \" , \" isMapFile \" , \" saveMapFile \" , $pref ::Input::ActiveConfig ); " );
return ;
}
if ( isFile ( % mapFile ) && ! isMapFile ( % mapFile ) )
{
MessageBoxOK ( " SAVE FAILED " , " A file of that name already exists and is not an input configuration file. Please choose another file name. " ,
" ShellGetSaveFilename( \" SAVE CONTROL CONFIG \" , \" prefs/*.cs \" , \" isMapFile \" , \" saveMapFile \" , $pref ::Input::ActiveConfig ); " );
return ;
}
moveMap . save ( % mapFile );
// Append the observer action map:
observerMap . save ( % mapFile , true );
// Write out the console toggle key:
% fObject = new FileObject ();
if ( % fObject . openForAppend ( % mapFile ) )
{
% bind = GlobalActionMap . getBinding ( " toggleConsole " );
if ( % bind ! $ = " " )
{
% fObject . writeLine ( " GlobalActionMap.bind(keyboard, \" " @ getField ( % bind , 1 ) @ " \" , toggleConsole); " );
% fObject . close ();
}
}
% fObject . delete ();
$pref :: Input :: ActiveConfig = % filename ;
}
//------------------------------------------------------------------------------
function getMapDisplayName ( % device , % action )
{
if ( % device $ = " keyboard " )
return ( % action );
else if ( strstr ( % device , " mouse " ) != - 1 )
{
// Substitute "mouse" for "button" in the action string:
% pos = strstr ( % action , " button " );
if ( % pos != - 1 )
{
% mods = getSubStr ( % action , 0 , % pos );
% object = getSubStr ( % action , % pos , 1000 );
% instance = getSubStr ( % object , strlen ( " button " ), 1000 );
return ( % mods @ " mouse " @ ( % instance + 1 ) );
}
else
error ( " Mouse input object other than button passed to getDisplayMapName! " );
}
else if ( strstr ( % device , " joystick " ) != - 1 )
{
// Substitute "joystick" for "button" in the action string:
% pos = strstr ( % action , " button " );
if ( % pos != - 1 )
{
% mods = getSubStr ( % action , 0 , % pos );
% object = getSubStr ( % action , % pos , 1000 );
% instance = getSubStr ( % object , strlen ( " button " ), 1000 );
return ( % mods @ " joystick " @ ( % instance + 1 ) );
}
else
{
% pos = strstr ( % action , " pov " );
if ( % pos != - 1 )
{
% wordCount = getWordCount ( % action );
% mods = % wordCount > 1 ? getWords ( % action , 0 , % wordCount - 2 ) @ " " : " " ;
% object = getWord ( % action , % wordCount - 1 );
switch $ ( % object )
{
case " upov " : % object = " POV1 up " ;
case " dpov " : % object = " POV1 down " ;
case " lpov " : % object = " POV1 left " ;
case " rpov " : % object = " POV1 right " ;
case " upov2 " : % object = " POV2 up " ;
case " dpov2 " : % object = " POV2 down " ;
case " lpov2 " : % object = " POV2 left " ;
case " rpov2 " : % object = " POV2 right " ;
default : % object = " ?? " ;
}
return ( % mods @ % object );
}
else
error ( " Unsupported Joystick input object passed to getDisplayMapName! " );
}
}
return ( " ?? " );
}
//------------------------------------------------------------------------------
function buildFullMapString ( % index )
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " :
% actionMap = observerMap ;
% name = $ObsRemapName [ % index ];
% cmd = $ObsRemapCmd [ % index ];
case " Main " :
% actionMap = moveMap ;
% name = $RemapName [ % index ];
% cmd = $RemapCmd [ % index ];
default :
% actionMap = RTSMap ;
% name = $RTSRemapName [ % index ];
% cmd = $RTSRemapCmd [ % index ];
}
% temp = % actionMap . getBinding ( % cmd );
% device = getField ( % temp , 0 );
% object = getField ( % temp , 1 );
if ( % device ! $ = " " && % object ! $ = " " )
% mapString = getMapDisplayName ( % device , % object );
else
% mapString = " " ;
return ( % name TAB % mapString );
}
//------------------------------------------------------------------------------
function OP_ControlGroupMenu :: init ( % this )
{
% selId = % this . getSelected ();
% this . clear ();
% this . add ( " Main " , 0 );
% this . add ( " Observer " , 1 );
% this . add ( " RTS " , 2 );
% this . setSelected ( % selId );
% this . onSelect ( % selId , % this . getTextById ( % selId ) );
}
//------------------------------------------------------------------------------
function OP_ControlGroupMenu :: onSelect ( % this , % id , % text )
{
OP_ControlsPane . group = % text ;
OP_RemapList . fillList ();
}
//------------------------------------------------------------------------------
function OP_RemapList :: fillList ( % this )
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " : % count = $ObsRemapCount ;
case " RTS " : % count = $RTSRemapCount ;
default : % count = $RemapCount ;
}
% this . clear ();
for ( % i = 0 ; % i < % count ; % i ++ )
% this . addRow ( % i , buildFullMapString ( % i ) );
// Set the console key:
% bind = GlobalActionMap . getBinding ( " toggleConsole " );
OP_ConsoleKeyBtn . setValue ( getField ( % bind , 1 ) );
}
//------------------------------------------------------------------------------
function OP_RemapList :: onDeleteKey ( % this , % rowId )
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " :
% actionMap = observerMap ;
% cmd = $ObsRemapCmd [ % rowId ];
case " Main " :
% actionMap = moveMap ;
% cmd = $RemapCmd [ % rowId ];
default :
% actionMap = RTSMap ;
% cmd = $RTSRemapCmd [ % rowId ];
}
clearMapping ( % actionMap , % cmd );
% this . setRowById ( % rowId , buildFullMapString ( % rowId ) );
}
//------------------------------------------------------------------------------
function OP_RemapList :: doRemap ( % this )
{
% selId = % this . getSelectedId ();
switch $ ( OP_ControlsPane . group )
{
case " Observer " : % name = $ObsRemapName [ % selId ];
case " RTS " : % name = $RTSRemapName [ % selId ];
default : % name = $RemapName [ % selId ];
}
RemapFrame . setTitle ( " REMAP \" " @ % name @ " \" " );
RemapInputCtrl . mode = " move " ;
RemapInputCtrl . index = % selId ;
Canvas . pushDialog ( RemapDlg );
}
//------------------------------------------------------------------------------
function OP_ConsoleKeyBtn :: doRemap ( % this )
{
RemapFrame . setTitle ( " REMAP \" Toggle Console \" " );
RemapInputCtrl . mode = " consoleKey " ;
RemapInputCtrl . index = 0 ;
Canvas . pushDialog ( RemapDlg );
}
//------------------------------------------------------------------------------
function RemapDlg :: onWake ( % this )
{
$enableDirectInput = " 1 " ;
activateDirectInput ();
if ( RemapInputCtrl . mode $ = " consoleKey " )
RemapText . setText ( " <just:center>Press a key to assign it to this action " NL " or Esc to cancel... " );
else
RemapText . setText ( " <just:center>Press a key or button to assign it to this action " NL " or Esc to cancel... " );
}
//------------------------------------------------------------------------------
function RemapDlg :: onSleep ( % this )
{
$enableDirectInput = " 1 " ;
deactivateDirectInput ();
}
//------------------------------------------------------------------------------
function findRemapCmdIndex ( % command )
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " :
for ( % i = 0 ; % i < $ObsRemapCount ; % i ++ )
{
if ( % command $ = $ObsRemapCmd [ % i ] )
return ( % i );
}
case " RTS " :
for ( % i = 0 ; % i < $RTSRemapCount ; % i ++ )
{
if ( % command $ = $RTSRemapCmd [ % i ] )
return ( % i );
}
default :
for ( % i = 0 ; % i < $RemapCount ; % i ++ )
{
if ( % command $ = $RemapCmd [ % i ] )
return ( % i );
}
}
return ( - 1 );
}
//------------------------------------------------------------------------------
function clearMapping ( % actionMap , % cmd )
{
% fullMapString = % actionMap . getBinding ( % cmd );
% mapCount = getRecordCount ( % fullMapString );
for ( % i = 0 ; % i < % mapCount ; % i ++ )
{
% temp = getRecord ( % fullMapString , % i );
% actionMap . unbind ( getField ( % temp , 0 ), getField ( % temp , 1 ) );
}
}
//------------------------------------------------------------------------------
function redoMapping ( % actionMap , % device , % action , % cmd , % oldIndex , % newIndex )
{
//%actionMap.bind( %device, %action, $RemapCmd[%newIndex] );
% actionMap . bind ( % device , % action , % cmd );
OP_RemapList . setRowById ( % oldIndex , buildFullMapString ( % oldIndex ) );
OP_RemapList . setRowById ( % newIndex , buildFullMapString ( % newIndex ) );
}
//------------------------------------------------------------------------------
function redoConsoleMapping ( % action , % oldIndex )
{
moveMap . unbind ( " keyboard " , % action );
GlobalActionMap . bind ( " keyboard " , % action , " toggleConsole " );
OP_ConsoleKeyBtn . setValue ( % action );
OP_RemapList . setRowById ( % oldIndex , buildFullMapString ( % oldIndex ) );
}
//------------------------------------------------------------------------------
function RemapInputCtrl :: onInputEvent ( % this , % device , % action )
{
//error( "** onInputEvent called - device = " @ %device @ ", action = " @ %action @ " **" );
Canvas . popDialog ( RemapDlg );
// Test for the reserved keystrokes:
if ( % device $ = " keyboard " )
{
// Cancel...
if ( % action $ = " escape " )
{
// Do nothing...
return ;
}
}
if ( % this . mode $ = " consoleKey " )
{
if ( % device ! $ = " keyboard " )
{
MessageBoxOK ( " REMAP FAILED " , " This command can only be bound to keys on the keyboard! " );
return ;
}
% prevMap = GlobalActionMap . getCommand ( % device , % action );
if ( % prevMap ! $ = " " )
{
MessageBoxOK ( " REMAP FAILED " , " \" " @ getMapDisplayName ( % device , % action ) @ " \" is already bound to a non-remappable command! " );
return ;
}
% mvMap = moveMap . getCommand ( % device , % action );
if ( % mvMap $ = " " )
{
GlobalActionMap . bind ( % device , % action , " toggleConsole " );
OP_ConsoleKeyBtn . setValue ( % action );
}
else
{
% mapName = getMapDisplayName ( % device , % action );
% mvMapIndex = findRemapCmdIndex ( % mvMap );
if ( % mvMapIndex == - 1 )
MessageBoxOK ( " REMAP FAILED " , " \" " @ % mapName @ " \" is already bound to a non-remappable command! " );
else
MessageBoxYesNo ( " WARNING " , " \" " @ % mapName @ " \" is already bound to \" "
@ $RemapName [ % mvMapIndex ] @ " \" ! "
NL " Do you want to undo this mapping? " ,
" redoConsoleMapping( \" " @ % action @ " \" , " @ % mvMapIndex @ " ); " , " " );
return ;
}
}
else
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " :
% actionMap = observerMap ;
% cmd = $ObsRemapCmd [ % this . index ];
% name = $ObsRemapName [ % this . index ];
case " RTS " :
% actionMap = RTSMap ;
% cmd = $RTSRemapCmd [ % this . index ];
% name = $RTSRemapName [ % this . index ];
default :
% actionMap = moveMap ;
% cmd = $RemapCmd [ % this . index ];
% name = $RemapName [ % this . index ];
}
// First check to see if the given action is already mapped:
% prevMap = % actionMap . getCommand ( % device , % action );
if ( % prevMap ! $ = % cmd )
{
if ( % prevMap $ = " " )
{
% actionMap . bind ( % device , % action , % cmd );
OP_RemapList . setRowById ( % this . index , buildFullMapString ( % this . index ) );
}
else
{
% mapName = getMapDisplayName ( % device , % action );
% prevMapIndex = findRemapCmdIndex ( % prevMap );
if ( % prevMapIndex == - 1 )
MessageBoxOK ( " REMAP FAILED " , " \" " @ % mapName @ " \" is already bound to a non-remappable command! " );
else
{
switch $ ( OP_ControlsPane . group )
{
case " Observer " :
% prevCmdName = $ObsRemapName [ % prevMapIndex ];
case " RTS " :
% prevCmdName = $RTSRemapName [ % prevMapIndex ];
default :
% prevCmdName = $RemapName [ % prevMapIndex ];
}
MessageBoxYesNo ( " WARNING " ,
" \" " @ % mapName @ " \" is already bound to \" "
@ % prevCmdName @ " \" ! \n Do you want to undo this mapping? " ,
" redoMapping( " @ % actionMap @ " , " @ % device @ " , \" " @ % action @ " \" , \" " @ % cmd @ " \" , " @ % prevMapIndex @ " , " @ % this . index @ " ); " , " " );
}
return ;
}
}
}
}
//------------------------------------------------------------------------------
function OP_JoystickTgl :: onAction ( % this )
{
% on = % this . getValue ();
if ( % on )
enableJoystick ();
else
disableJoystick ();
OP_ConfigureJoystickBtn . setActive ( % on );
}
//------------------------------------------------------------------------------
function MouseConfigDlg :: onWake ( % this )
{
MouseXSlider . setValue ( moveMap . getScale ( mouse , xaxis ) / 2 );
MouseYSlider . setValue ( moveMap . getScale ( mouse , yaxis ) / 2 );
InvertMouseTgl . setValue ( moveMap . isInverted ( mouse , yaxis ) );
MouseZActionMenu . clear ();
MouseZActionMenu . add ( " Nothing " , 1 );
MouseZActionMenu . add ( " Cycle Weapon " , 2 );
MouseZActionMenu . add ( " Next Weapon Only " , 3 );
// MouseZActionMenu.add( "Cycle Zoom Level", 4 );
% bind = moveMap . getCommand ( " mouse " , " zaxis " );
% selId = 1 ;
switch $ ( % bind )
{
case " cycleWeaponAxis " :
% selId = 2 ;
case " cycleNextWeaponOnly " :
% selId = 3 ;
}
MouseZActionMenu . setSelected ( % selId );
}
//------------------------------------------------------------------------------
function MouseConfigDlg :: onOK ( % this )
{
% xSens = MouseXSlider . getValue () * 2 ;
% ySens = MouseYSlider . getValue () * 2 ;
moveMap . bind ( mouse , xaxis , " S " , % xSens , " yaw " );
% yFlags = InvertMouseTgl . getValue () ? " SI " : " S " ;
moveMap . bind ( mouse , yaxis , % yFlags , % ySens , " pitch " );
switch ( MouseZActionMenu . getSelected () )
{
case 2 :
moveMap . bind ( mouse , zaxis , cycleWeaponAxis );
case 3 :
moveMap . bind ( mouse , zaxis , cycleNextWeaponOnly );
default :
moveMap . unbind ( mouse , zaxis );
}
Canvas . popDialog ( MouseConfigDlg );
}
//------------------------------------------------------------------------------
function MouseXSlider :: sync ( % this )
{
% thisValue = % this . getValue ();
MouseXText . setValue ( " ( " @ getSubStr ( % thisValue , 0 , 4 ) @ " ) " );
if ( $pref :: Input :: LinkMouseSensitivity )
{
if ( MouseYSlider . getValue () != % thisValue )
MouseYSlider . setValue ( % thisValue );
}
}
//------------------------------------------------------------------------------
function MouseYSlider :: sync ( % this )
{
% thisValue = % this . getValue ();
MouseYText . setValue ( " ( " @ getSubStr ( % thisValue , 0 , 4 ) @ " ) " );
if ( $pref :: Input :: LinkMouseSensitivity )
{
if ( MouseXSlider . getValue () != % thisValue )
MouseXSlider . setValue ( % thisValue );
}
}
//------------------------------------------------------------------------------
// Joystick Config dialog:
//------------------------------------------------------------------------------
$JoyRemapCount = 0 ;
$JoyRemapName [ $JoyRemapCount ] = " Look Up/Down " ;
$JoyRemapCmd [ $JoyRemapCount ] = " joyPitch " ;
$JoyRemapCount ++ ;
$JoyRemapName [ $JoyRemapCount ] = " Turn Left/Right " ;
$JoyRemapCmd [ $JoyRemapCount ] = " joyYaw " ;
$JoyRemapCount ++ ;
$JoyRemapName [ $JoyRemapCount ] = " Move Forward/Backward " ;
$JoyRemapCmd [ $JoyRemapCount ] = " joystickMoveY " ;
$JoyRemapCount ++ ;
$JoyRemapName [ $JoyRemapCount ] = " Strafe Left/Right " ;
$JoyRemapCmd [ $JoyRemapCount ] = " joystickMoveX " ;
$JoyRemapCount ++ ;
$JoyRemapName [ $JoyRemapCount ] = " Cycle Weapon " ;
$JoyRemapCmd [ $JoyRemapCount ] = " cycleWeaponAxis " ;
$JoyRemapCount ++ ;
//------------------------------------------------------------------------------
function JoystickConfigDlg :: onWake ( % this )
{
// Add all of the axis tabs:
% temp = getJoystickAxes ( 0 );
% tryCount = getField ( % temp , 0 );
$JoyAxisCount = 0 ;
for ( % i = 0 ; % i < % tryCount ; % i ++ )
{
% type = getField ( % temp , % i + 1 );
switch $ ( % type )
{
case " X " : % tabName = " X Axis " ; % tabType = " xaxis " ;
case " Y " : % tabName = " Y Axis " ; % tabType = " yaxis " ;
case " Z " : % tabName = " Z Axis " ; % tabType = " zaxis " ;
case " R " : % tabName = " R Axis " ; % tabType = " rxaxis " ;
case " U " : % tabName = " U Axis " ; % tabType = " ryaxis " ;
case " V " : % tabName = " V Axis " ; % tabType = " rzaxis " ;
case " S " : % tabName = " Slider " ; % tabType = " slider " ;
case " L " : % tabName = " Slider 2 " ; % tabType = " slider2 " ;
default : % tabName = " " ;
}
if ( % tabName ! $ = " " )
{
$JoyAxisTab [ $JoyAxisCount ] = new ShellTabButton () {
profile = " ShellTabProfile " ;
horizSizing = " right " ;
vertSizing = " bottom " ;
position = " 29 " SPC ( 52 + ( % i * 30 ) );
extent = " 100 38 " ;
minExtent = " 48 38 " ;
visible = " 1 " ;
command = " JoystickConfigDlg.setPane( " @ % i @ " ); " ;
helpTag = " 0 " ;
text = % tabName ;
type = % tabType ;
};
$JoyAxisCount ++ ;
JoystickConfigFrame . add ( $JoyAxisTab [ % i ] );
}
}
// Fill the action menu:
JoyAxisActionMenu . clear ();
for ( % i = 0 ; % i < $JoyRemapCount ; % i ++ )
JoyAxisActionMenu . add ( $JoyRemapName [ % i ], % i );
JoyAxisActionMenu . add ( " Nothing " , 255 );
// Select the first axis:
% this . setPane ( % this . pane );
}
//------------------------------------------------------------------------------
function JoystickConfigDlg :: onSleep ( % this )
{
// Save the current pane's settings:
bindJoystickAxis ( % this . pane , JoyAxisActionMenu . getSelected () );
for ( % i = 0 ; % i < $JoyAxisCount ; % i ++ )
{
JoystickConfigFrame . remove ( $JoyAxisTab [ % i ] );
$JoyAxisTab [ % i ] . delete ();
}
}
//------------------------------------------------------------------------------
function JoystickConfigDlg :: setPane ( % this , % pane )
{
if ( % this . pane != % pane )
{
// Save the previous axes' settings:
bindJoystickAxis ( % this . pane , JoyAxisActionMenu . getSelected () );
% this . pane = % pane ;
}
for ( % i = 0 ; % i < $joyAxisCount ; % i ++ )
$JoyAxisTab [ % i ] . setValue ( % i == % pane );
// Update the config controls:
% axisType = $JoyAxisTab [ % pane ] . type ;
% bind = moveMap . getCommand ( " joystick " , % axisType );
if ( % bind ! $ = " " )
{
for ( % i = 0 ; % i < $JoyRemapCount ; % i ++ )
{
if ( $JoyRemapCmd [ % i ] $ = % bind )
{
JoyAxisActionMenu . setSelected ( % i );
JoyAxisActionMenu . setText ( $JoyRemapName [ % i ] );
JoyAxisActionMenu . onSelect ( % i , " " );
break ;
}
}
if ( % i == $JoyRemapCount )
{
JoyAxisActionMenu . setSelected ( 255 ); // 255 is the code for "Nothing"
JoyAxisActionMenu . onSelect ( 255 , " " );
}
% scale = moveMap . getScale ( " joystick " , % axisType );
JoyAxisSlider . setValue ( % scale / 100 );
% deadZone = moveMap . getDeadZone ( " joystick " , % axisType );
if ( % deadZone $ = " 0 0 " )
DeadZoneSlider . setValue ( 0.0 );
else
DeadZoneSlider . setValue ( abs ( firstWord ( % deadZone ) ) / % scale );
InvertJoyAxisTgl . setValue ( moveMap . isInverted ( " joystick " , % axisType ) );
//JoyAxisRelativeTgl.setValue( moveMap.isRelativeAxis( "joystick", %axisType ) );
}
else
{
JoyAxisActionMenu . setSelected ( 255 ); // 255 is the code for "Nothing"
JoyAxisActionMenu . onSelect ( 255 , " " );
JoyAxisSlider . setValue ( 0.5 );
DeadZoneSlider . setValue ( 0.0 );
InvertJoyAxisTgl . setValue ( false );
//JoyAxisRelativeTgl.setValue( %axisType $= "slider" );
}
}
//------------------------------------------------------------------------------
function JoyAxisActionMenu :: onSelect ( % this , % id , % text )
{
% on = ( % id < $JoyRemapCount );
JoyAxisSlider . setActive ( % on );
JoySensText . setVisible ( % on );
DeadZoneSlider . setActive ( % on );
DeadZoneText . setVisible ( % on );
InvertJoyAxisTgl . setActive ( % on );
//JoyAxisRelativeTgl.setActive( %on );
}
//------------------------------------------------------------------------------
function JoySensText :: update ( % this )
{
% this . setValue ( " ( " @ getSubStr ( JoyAxisSlider . getValue (), 0 , 4 ) @ " ) " );
}
//------------------------------------------------------------------------------
function DeadZoneText :: update ( % this )
{
% val = DeadZoneSlider . getValue ();
% percent = % val * 100 ;
% temp = strstr ( % percent , " . " );
if ( % temp != - 1 )
% percent = getSubStr ( % percent , 0 , % temp );
% this . setValue ( " ( " @ % percent @ " %) " );
}
//------------------------------------------------------------------------------
function bindJoystickAxis ( % axisIndex , % cmdIndex )
{
% cmd = $JoyRemapCmd [ % cmdIndex ];
% axis = $JoyAxisTab [ % axisIndex ] . type ;
if ( % cmdIndex > $JoyRemapCount )
{
// Make sure the axis is unbound:
moveMap . unbind ( " joystick " , % axis );
return ;
}
% sens = JoyAxisSlider . getValue () * 100 ;
% delta = DeadZoneSlider . getValue () * % sens ;
% flags = " S " ;
if ( InvertJoyAxisTgl . getValue () )
% flags = % flags @ " I " ;
// if ( JoyAxisRelativeTgl.getValue() )
// %flags = %flags @ "L";
if ( % delta > 0 )
{
% deadZone = " - " @ % delta SPC % delta ;
moveMap . bind ( " joystick " , % axis , % flags @ " D " , % deadZone , % sens , % cmd );
}
else
moveMap . bind ( " joystick " , % axis , % flags , % sens , % cmd );
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Network Settings:
//
function updateNetworkSettings ()
{
$pref :: Net :: PacketRateToClient = mFloor ( OP_PacketRateSlider . getValue () );
$pref :: Net :: PacketSize = mFloor ( OP_PacketSizeSlider . getValue () );
$pref :: Net :: PacketRateToServer = mFloor ( OP_UpdateRateSlider . getValue () );
// check the max rate:
if ( isObject ( ServerConnection ) )
ServerConnection . checkMaxRate ();
if ( isObject ( ClientGroup ) )
{
% count = ClientGroup . getCount ();
for ( % i = 0 ; % i < % count ; % i ++ )
{
% cl = ClientGroup . getObject ( % i );
% cl . checkMaxRate ();
}
}
}
function OP_NetworkDisplayHud :: init ( % this )
{
% this . getPrefs ();
% this . textHeight = 14 ;
% this . textOffset = 2 ;
if ( !% this . infoCallback )
{
% this . textProfile = 0 ;
return ;
}
// profile for the text fields
% this . textProfile = new GuiControlProfile ()
{
fontType = $ShellButtonFont ;
fontSize = $ShellButtonFontSize ;
autoSizeWidth = true ;
autoSizeHeight = true ;
fontColors [ 6 ] = " 128 128 128 " ;
};
% yOffset = % this . textOffset ;
for ( % i = 0 ; % i < 6 ; % i ++ )
{
// set the text color
% this . textProfile . fontColors [ % i ] = % this . fieldColors [ % i ];
// create the text field
% this . textField [ % i ] = new GuiTextCtrl ()
{
profile = % this . textProfile ;
horizSizing = " right " ;
vertSizing = " bottom " ;
position = " 20 " @ % yOffset ;
extent = " 190 " @ % this . textHeight ;
visible = " 1 " ;
};
// create the toggle field
% this . toggleField [ % i ] = new GuiTextCtrl ()
{
profile = ShellActiveTextProfile ;
horizSizing = " right " ;
vertSizing = " bottom " ;
position = " 5 " @ % yOffset ;
extent = " 15 " @ % this . textHeight ;
visible = " 1 " ;
};
// create a mouse object
% this . mouseField [ % i ] = new GuiMouseEventCtrl ( NetworkDisplayMouseCtrl )
{
profile = GuiDefaultProfile ;
horizSizing = " right " ;
vertSizing = " bottom " ;
position = " 10 " @ % yOffset ;
extent = " 200 " @ % this . textHeight ;
visible = " 1 " ;
fieldIndex = % i ;
};
OP_NetworkDisplayTextFrame . add ( % this . textField [ % i ]);
OP_NetworkDisplayTextFrame . add ( % this . toggleField [ % i ]);
OP_NetworkDisplayTextFrame . add ( % this . mouseField [ % i ]);
% yOffset += ( % this . textHeight + % this . textOffset );
}
% this . infoUpdate ( 0 , 0 , 0 , 0 , 0 , 0 );
}
function NetworkDisplayMouseCtrl :: onMouseDown ( % this )
{
% b = OP_NetworkDisplayHud . renderField [ % this . fieldIndex ];
OP_NetworkDisplayHud . renderField [ % this . fieldIndex ] = !% b ;
OP_NetworkDisplayHud . updateToggles ();
}
function OP_NetworkDisplayHud :: uninit ( % this )
{
if ( !% this . infoCallback )
return ;
if ( isObject ( % this . textProfile ))
% this . textProfile . delete ();
for ( % i = 0 ; % i < 6 ; % i ++ )
{
if ( isObject ( % this . textField [ % i ]))
% this . textField [ % i ] . delete ();
if ( isObject ( % this . toggleField [ % i ]))
% this . toggleField [ % i ] . delete ();
if ( isObject ( % this . mouseField [ % i ]))
% this . mouseField [ % i ] . delete ();
}
}
function OP_NetworkDisplayHud :: updateToggles ( % this )
{
// update the toggles
$pref :: Net :: graphFields = 0 ;
for ( % i = 0 ; % i < 6 ; % i ++ )
{
$pref :: Net :: graphFields |= % this . renderField [ % i ] << % i ;
% this . toggleField [ % i ] . setText ( % this . renderField [ % i ] ? " + " : " - " );
}
}
function OP_NetworkDisplayHud :: infoUpdate ( % this , % ping , % packetLoss , % sendPackets , % sendBytes , % receivePackets , % receiveBytes )
{
% this . updateToggles ();
// set the text
% this . textField [ 0 ] . setText ( " \ c0Ping: " @ mFormatFloat ( % ping , " %4.0f " ) @ " ms " );
% this . textField [ 1 ] . setText ( " \ c1Packet Loss: " @ mFormatFloat ( % packetLoss , " %3.0f " ) @ " % " );
% this . textField [ 2 ] . setText ( " \ c2Send Packets: " @ mFormatFloat ( % sendPackets , " %2.1f " ) @ " pps " );
% this . textField [ 3 ] . setText ( " \ c3Send Bytes: " @ mFormatFloat ( % sendBytes , " %5.0f " ) @ " bps " );
% this . textField [ 4 ] . setText ( " \ c4Receive Packets: " @ mFormatFloat ( % receivePackets , " %2.1f " ) @ " pps " );
% this . textField [ 5 ] . setText ( " \ c5Receive Bytes: " @ mFormatFloat ( % receiveBytes , " %5.0f " ) @ " bps " );
}
// "<name><packet rate><update rate><packet size>"
// [1,32] [8,32] [100,450]
$NetworkPresetCount = 0 ;
$NetworkPreset [ $NetworkPresetCount ] = " 28.8 Modem \t 12 \t 16 \t 200 " ; $NetworkPresetCount ++ ;
$NetworkPreset [ $NetworkPresetCount ] = " 56K Modem \t 16 \t 20 \t 240 " ; $NetworkPresetCount ++ ;
$NetworkPreset [ $NetworkPresetCount ] = " DSL \t 20 \t 24 \t 350 " ; $NetworkPresetCount ++ ;
$NetworkPreset [ $NetworkPresetCount ] = " Cable \t 24 \t 24 \t 400 " ; $NetworkPresetCount ++ ;
$NetworkPreset [ $NetworkPresetCount ] = " T1/LAN \t 32 \t 32 \t 450 " ; $NetworkPresetCount ++ ;
function OP_NetworkPresetsMenu :: init ( % this )
{
% this . clear ();
for ( % i = 0 ; % i < $NetworkPresetCount ; % i ++ )
% this . add ( getField ( $NetworkPreset [ % i ], 0 ), % i );
// don't update settings on init (only update when values change)
% this . updateSettings = false ;
% this . setSelected ( $pref :: Net :: Preset );
% this . updateSettings = true ;
}
function OP_NetworkPresetsMenu :: onSelect ( % this , % id , % text )
{
OP_PacketRateSlider . setValue ( getField ( $NetworkPreset [ % id ], 1 ) );
OP_UpdateRateSlider . setValue ( getField ( $NetworkPreset [ % id ], 2 ) );
OP_PacketSizeSlider . setValue ( getField ( $NetworkPreset [ % id ], 3 ) );
if ( % this . updateSettings )
updateNetworkSettings ();
$pref :: Net :: Preset = % id ;
}
//------------------------------------------------------------------------------
function OP_MasterServerMenu :: init ( % this )
{
% this . clear ();
// You can change these strings, but NOT THE IDS!
% this . add ( " Always " , 1 );
% this . add ( " When Not Full " , 2 );
% this . add ( " Never " , 3 );
}
//------------------------------------------------------------------------------
function OP_MasterServerMenu :: onSelect ( % this , % id , % text )
{
switch ( % id )
{
case 2 :
$pref :: Net :: DisplayOnMaster = " NotFull " ;
case 3 :
$pref :: Net :: DisplayOnMaster = " Never " ;
default :
$pref :: Net :: DisplayOnMaster = " Always " ;
}
}
//------------------------------------------------------------------------------
function OP_RegionMenu :: init ( % this )
{
% this . clear ();
% this . add ( " North America East " , 1 );
% this . add ( " North America West " , 2 );
% this . add ( " South America " , 4 );
% this . add ( " Australia " , 8 );
% this . add ( " Asia " , 16 );
% this . add ( " Europe " , 32 );
}
//------------------------------------------------------------------------------
function OP_RegionMenu :: onSelect ( % this , % id , % text )
{
$pref :: Net :: RegionMask = % id ;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Game Settings:
//
function OP_LaunchScreenMenu :: init ( % this )
{
% this . clear ();
% this . add ( " Game " , 1 );
% this . add ( " Email " , 4 );
% this . add ( " Chat " , 5 );
% this . add ( " Browser " , 6 );
% this . add ( " Mod Browser " , 7 );
}
//------------------------------------------------------------------------------
function toggleInvertYAxis ()
{
// Catch the case where this is toggled in-game while in a vehicle:
if ( isObject ( passengerKeys ) )
{
% bind = passengerKeys . getBinding ( pitch );
if ( % bind ! $ = " " )
{
% device = getField ( % bind , 0 );
% action = getField ( % bind , 1 );
% flags = $pref :: Vehicle :: InvertYAxis ? " SDI " : " SD " ;
% deadZone = passengerKeys . getDeadZone ( % device , % action );
% scale = passengerKeys . getScale ( % device , % action );
passengerKeys . bind ( % device , % action , % flags , % deadZone , % scale , pitch );
}
}
}
//------------------------------------------------------------------------------
function toggleImmersion ()
{
MessageBoxOK ( " Force Feedback " , " This will take effect the next time you start Tribes 2. " );
}
//------------------------------------------------------------------------------
function toggleVehicleTeleportPref ()
{
// If we are in a game, let the server know we've changed;
if ( isObject ( ServerConnection ) )
commandToServer ( 'EnableVehicleTeleport' , $pref :: Vehicle :: pilotTeleport );
}