@ -39,11 +39,12 @@ namespace {
// Forward-declare menu handlers, used by the global menu structs below.
// Forward-declare menu handlers, used by the global menu structs below.
void GamemenuPrevious ( bool bActivate ) ;
void GamemenuPrevious ( bool bActivate ) ;
void GamemenuNewGame ( bool bActivate ) ;
void GamemenuNewGame ( bool bActivate ) ;
void GamemenuOptions ( bool bActivate ) ;
void GamemenuOptions ( bool bActivate ) ;
void GamemenuMusicVolume ( bool bActivate ) ;
void GamemenuMusicVolume ( bool bActivate ) ;
void GamemenuSoundVolume ( bool bActivate ) ;
void GamemenuSoundVolume ( bool bActivate ) ;
void GamemenuBrightness ( bool bActivate ) ;
void GamemenuAudioCuesVolume ( bool bActivate ) ;
void GamemenuSpeed ( bool bActivate ) ;
void GamemenuBrightness ( bool bActivate ) ;
void GamemenuSpeed ( bool bActivate ) ;
/** Contains the game menu items of the single player menu. */
/** Contains the game menu items of the single player menu. */
TMenuItem sgSingleMenu [ ] = {
TMenuItem sgSingleMenu [ ] = {
@ -67,27 +68,33 @@ TMenuItem sgMultiMenu[] = {
{ GMENU_ENABLED , nullptr , nullptr } ,
{ GMENU_ENABLED , nullptr , nullptr } ,
// clang-format on
// clang-format on
} ;
} ;
TMenuItem sgOptionsMenu [ ] = {
TMenuItem sgOptionsMenu [ ] = {
// clang-format off
// clang-format off
// dwFlags, pszStr, fnMenu
// dwFlags, pszStr, fnMenu
{ GMENU_ENABLED | GMENU_SLIDER , nullptr , & GamemenuMusicVolume } ,
{ GMENU_ENABLED | GMENU_SLIDER , nullptr , & GamemenuMusicVolume } ,
{ GMENU_ENABLED | GMENU_SLIDER , nullptr , & GamemenuSoundVolume } ,
{ GMENU_ENABLED | GMENU_SLIDER , nullptr , & GamemenuSoundVolume } ,
{ GMENU_ENABLED | GMENU_SLIDER , N_ ( " Gamma " ) , & GamemenuBrightness } ,
{ GMENU_ENABLED | GMENU_SLIDER , nullptr , & GamemenuAudioCuesVolume } ,
{ GMENU_ENABLED | GMENU_SLIDER , N_ ( " Speed " ) , & GamemenuSpeed } ,
{ GMENU_ENABLED | GMENU_SLIDER , N_ ( " Gamma " ) , & GamemenuBrightness } ,
{ GMENU_ENABLED , N_ ( " Previous Menu " ) , & GamemenuPrevious } ,
{ GMENU_ENABLED | GMENU_SLIDER , N_ ( " Speed " ) , & GamemenuSpeed } ,
{ GMENU_ENABLED , nullptr , nullptr } ,
{ GMENU_ENABLED , N_ ( " Previous Menu " ) , & GamemenuPrevious } ,
// clang-format on
{ GMENU_ENABLED , nullptr , nullptr } ,
} ;
// clang-format on
/** Specifies the menu names for music enabled and disabled. */
} ;
const char * const MusicToggleNames [ ] = {
/** Specifies the menu names for music enabled and disabled. */
N_ ( " Music " ) ,
const char * const MusicToggleNames [ ] = {
N_ ( " Music Disabled " ) ,
N_ ( " Music " ) ,
N_ ( " Music Disabled " ) ,
} ;
} ;
/** Specifies the menu names for sound enabled and disabled. */
/** Specifies the menu names for sound enabled and disabled. */
const char * const SoundToggleNames [ ] = {
const char * const SoundToggleNames [ ] = {
N_ ( " Sound " ) ,
N_ ( " Sound " ) ,
N_ ( " Sound Disabled " ) ,
N_ ( " Sound Disabled " ) ,
} ;
} ;
/** Specifies the menu names for navigation audio cues enabled and disabled. */
const char * const AudioCuesToggleNames [ ] = {
N_ ( " Audio Cues " ) ,
N_ ( " Audio Cues Disabled " ) ,
} ;
void GamemenuUpdateSingle ( )
void GamemenuUpdateSingle ( )
{
{
@ -144,52 +151,58 @@ void GamemenuGetMusic()
GamemenuSoundMusicToggle ( MusicToggleNames , sgOptionsMenu , sound_get_or_set_music_volume ( 1 ) ) ;
GamemenuSoundMusicToggle ( MusicToggleNames , sgOptionsMenu , sound_get_or_set_music_volume ( 1 ) ) ;
}
}
void GamemenuGetSound ( )
void GamemenuGetSound ( )
{
{
GamemenuSoundMusicToggle ( SoundToggleNames , & sgOptionsMenu [ 1 ] , sound_get_or_set_sound_volume ( 1 ) ) ;
GamemenuSoundMusicToggle ( SoundToggleNames , & sgOptionsMenu [ 1 ] , sound_get_or_set_sound_volume ( 1 ) ) ;
}
}
void GamemenuGetBrightness ( )
void GamemenuGetAudioCues ( )
{
{
gmenu_slider_steps ( & sgOptionsMenu [ 2 ] , 21 ) ;
GamemenuSoundMusicToggle ( AudioCuesToggleNames , & sgOptionsMenu [ 2 ] , sound_get_or_set_audio_cues_volume ( 1 ) ) ;
gmenu_slider_set ( & sgOptionsMenu [ 2 ] , 0 , 100 , UpdateBrightness ( - 1 ) ) ;
}
}
void GamemenuGetBrightness ( )
void GamemenuGetSpeed ( )
{
{
gmenu_slider_steps ( & sgOptionsMenu [ 3 ] , 21 ) ;
if ( gbIsMultiplayer ) {
gmenu_slider_set ( & sgOptionsMenu [ 3 ] , 0 , 100 , UpdateBrightness ( - 1 ) ) ;
sgOptionsMenu [ 3 ] . removeFlags ( GMENU_ENABLED | GMENU_SLIDER ) ;
}
if ( sgGameInitInfo . nTickRate > = 50 )
sgOptionsMenu [ 3 ] . pszStr = _ ( " Speed: Fastest " ) . data ( ) ;
void GamemenuGetSpeed ( )
else if ( sgGameInitInfo . nTickRate > = 40 )
{
sgOptionsMenu [ 3 ] . pszStr = _ ( " Speed: Faster " ) . data ( ) ;
if ( gbIsMultiplayer ) {
else if ( sgGameInitInfo . nTickRate > = 30 )
sgOptionsMenu [ 4 ] . removeFlags ( GMENU_ENABLED | GMENU_SLIDER ) ;
sgOptionsMenu [ 3 ] . pszStr = _ ( " Speed: Fast " ) . data ( ) ;
if ( sgGameInitInfo . nTickRate > = 50 )
else if ( sgGameInitInfo . nTickRate = = 20 )
sgOptionsMenu [ 4 ] . pszStr = _ ( " Speed: Fastest " ) . data ( ) ;
sgOptionsMenu [ 3 ] . pszStr = _ ( " Speed: Normal " ) . data ( ) ;
else if ( sgGameInitInfo . nTickRate > = 40 )
return ;
sgOptionsMenu [ 4 ] . pszStr = _ ( " Speed: Faster " ) . data ( ) ;
}
else if ( sgGameInitInfo . nTickRate > = 30 )
sgOptionsMenu [ 4 ] . pszStr = _ ( " Speed: Fast " ) . data ( ) ;
sgOptionsMenu [ 3 ] . addFlags ( GMENU_ENABLED | GMENU_SLIDER ) ;
else if ( sgGameInitInfo . nTickRate = = 20 )
sgOptionsMenu [ 4 ] . pszStr = _ ( " Speed: Normal " ) . data ( ) ;
sgOptionsMenu [ 3 ] . pszStr = _ ( " Speed " ) . data ( ) ;
return ;
gmenu_slider_steps ( & sgOptionsMenu [ 3 ] , 46 ) ;
}
gmenu_slider_set ( & sgOptionsMenu [ 3 ] , 20 , 50 , sgGameInitInfo . nTickRate ) ;
}
sgOptionsMenu [ 4 ] . addFlags ( GMENU_ENABLED | GMENU_SLIDER ) ;
int GamemenuSliderBrightness ( )
sgOptionsMenu [ 4 ] . pszStr = _ ( " Speed " ) . data ( ) ;
{
gmenu_slider_steps ( & sgOptionsMenu [ 4 ] , 46 ) ;
return gmenu_slider_get ( & sgOptionsMenu [ 2 ] , 0 , 100 ) ;
gmenu_slider_set ( & sgOptionsMenu [ 4 ] , 20 , 50 , sgGameInitInfo . nTickRate ) ;
}
}
void GamemenuOptions ( bool /*bActivate*/ )
int GamemenuSliderBrightness ( )
{
{
GamemenuGetMusic ( ) ;
return gmenu_slider_get ( & sgOptionsMenu [ 3 ] , 0 , 100 ) ;
GamemenuGetSound ( ) ;
}
GamemenuGetBrightness ( ) ;
GamemenuGetSpeed ( ) ;
void GamemenuOptions ( bool /*bActivate*/ )
gmenu_set_items ( sgOptionsMenu , nullptr ) ;
{
}
GamemenuGetMusic ( ) ;
GamemenuGetSound ( ) ;
GamemenuGetAudioCues ( ) ;
GamemenuGetBrightness ( ) ;
GamemenuGetSpeed ( ) ;
gmenu_set_items ( sgOptionsMenu , nullptr ) ;
}
void GamemenuMusicVolume ( bool bActivate )
void GamemenuMusicVolume ( bool bActivate )
{
{
@ -220,10 +233,10 @@ void GamemenuMusicVolume(bool bActivate)
GamemenuGetMusic ( ) ;
GamemenuGetMusic ( ) ;
}
}
void GamemenuSoundVolume ( bool bActivate )
void GamemenuSoundVolume ( bool bActivate )
{
{
if ( bActivate ) {
if ( bActivate ) {
if ( gbSoundOn ) {
if ( gbSoundOn ) {
gbSoundOn = false ;
gbSoundOn = false ;
sound_stop ( ) ;
sound_stop ( ) ;
sound_get_or_set_sound_volume ( VOLUME_MIN ) ;
sound_get_or_set_sound_volume ( VOLUME_MIN ) ;
@ -243,35 +256,49 @@ void GamemenuSoundVolume(bool bActivate)
gbSoundOn = true ;
gbSoundOn = true ;
}
}
}
}
PlaySFX ( SfxID : : MenuMove ) ;
PlaySFX ( SfxID : : MenuMove ) ;
GamemenuGetSound ( ) ;
GamemenuGetSound ( ) ;
}
}
void GamemenuBrightness ( bool bActivate )
void GamemenuAudioCuesVolume ( bool bActivate )
{
{
int brightness ;
if ( bActivate ) {
if ( bActivate ) {
const int volume = sound_get_or_set_audio_cues_volume ( 1 ) = = VOLUME_MIN ? VOLUME_MAX : VOLUME_MIN ;
sound_get_or_set_audio_cues_volume ( volume ) ;
} else {
const int volume = GamemenuSliderMusicSound ( & sgOptionsMenu [ 2 ] ) ;
sound_get_or_set_audio_cues_volume ( volume ) ;
}
PlaySFX ( SfxID : : MenuMove ) ;
GamemenuGetAudioCues ( ) ;
}
void GamemenuBrightness ( bool bActivate )
{
int brightness ;
if ( bActivate ) {
brightness = UpdateBrightness ( - 1 ) ;
brightness = UpdateBrightness ( - 1 ) ;
brightness = ( brightness = = 0 ) ? 100 : 0 ;
brightness = ( brightness = = 0 ) ? 100 : 0 ;
} else {
} else {
brightness = GamemenuSliderBrightness ( ) ;
brightness = GamemenuSliderBrightness ( ) ;
}
}
UpdateBrightness ( brightness ) ;
UpdateBrightness ( brightness ) ;
GamemenuGetBrightness ( ) ;
GamemenuGetBrightness ( ) ;
}
}
void GamemenuSpeed ( bool bActivate )
void GamemenuSpeed ( bool bActivate )
{
{
if ( bActivate ) {
if ( bActivate ) {
if ( sgGameInitInfo . nTickRate ! = 20 )
if ( sgGameInitInfo . nTickRate ! = 20 )
sgGameInitInfo . nTickRate = 20 ;
sgGameInitInfo . nTickRate = 20 ;
else
else
sgGameInitInfo . nTickRate = 50 ;
sgGameInitInfo . nTickRate = 50 ;
gmenu_slider_set ( & sgOptionsMenu [ 3 ] , 20 , 50 , sgGameInitInfo . nTickRate ) ;
gmenu_slider_set ( & sgOptionsMenu [ 4 ] , 20 , 50 , sgGameInitInfo . nTickRate ) ;
} else {
} else {
sgGameInitInfo . nTickRate = gmenu_slider_get ( & sgOptionsMenu [ 3 ] , 20 , 50 ) ;
sgGameInitInfo . nTickRate = gmenu_slider_get ( & sgOptionsMenu [ 4 ] , 20 , 50 ) ;
}
}
GetOptions ( ) . Gameplay . tickRate . SetValue ( sgGameInitInfo . nTickRate ) ;
GetOptions ( ) . Gameplay . tickRate . SetValue ( sgGameInitInfo . nTickRate ) ;
gnTickDelay = 1000 / sgGameInitInfo . nTickRate ;
gnTickDelay = 1000 / sgGameInitInfo . nTickRate ;