2019-06-25 02:34:29 +02:00
# define DIRECTINPUT_VERSION 0x0800
# include <dinput.h>
2019-05-30 21:24:47 +02:00
# include "common.h"
# include "patcher.h"
2019-06-25 02:34:29 +02:00
# include "win.h"
2019-05-30 21:24:47 +02:00
# include "Frontend.h"
2019-06-25 02:34:29 +02:00
# include "Font.h"
# include "Pad.h"
# include "Text.h"
# include "main.h"
# include "Timer.h"
# include "Game.h"
# include "DMAudio.h"
# include "FileMgr.h"
# include "Streaming.h"
# include "TxdStore.h"
# include "General.h"
2020-01-14 00:13:42 +01:00
# include "GenericGameStorage.h"
2019-06-25 02:34:29 +02:00
# include "Script.h"
# include "Camera.h"
2019-06-25 14:25:39 +02:00
# include "MenuScreens.h"
2019-07-03 17:26:15 +02:00
# include "ControllerConfig.h"
# include "Vehicle.h"
# include "MBlur.h"
# include "PlayerSkin.h"
2019-07-10 09:57:08 +02:00
# include "PlayerInfo.h"
# include "World.h"
2019-07-14 12:46:36 +02:00
# include "Renderer.h"
2019-11-09 16:17:54 +01:00
# include "CdStream.h"
2019-05-30 21:24:47 +02:00
2020-03-17 19:03:13 +01:00
# define DONT_USE_SUSPICIOUS_FUNCS 1
# define TIDY_UP_PBP // ProcessButtonPresses
# define MAX_VISIBLE_LIST_ROW 30
2020-04-04 13:39:58 +02:00
# define SCROLLBAR_MAX_HEIGHT 263.0f // actually it's 273. but calculating it from scrollbar drawing code gives 287. i don't know
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
BottomBarOption bbNames [ 8 ] ;
int bbTabCount = 0 ;
bool bottomBarActive = false ;
bool reverseAlpha = false ;
int pendingScreen = - 1 ;
int pendingOption = - 1 ;
int curBottomBarOption = - 1 ;
int hoveredBottomBarOption = - 1 ;
# endif
2019-07-10 13:42:48 +02:00
2019-07-14 12:46:36 +02:00
int32 & CMenuManager : : OS_Language = * ( int32 * ) 0x5F2F78 ; // 9
2019-06-15 01:34:19 +02:00
int8 & CMenuManager : : m_PrefsUseVibration = * ( int8 * ) 0x95CD92 ;
int8 & CMenuManager : : m_DisplayControllerOnFoot = * ( int8 * ) 0x95CD8D ;
2019-07-14 12:46:36 +02:00
int8 & CMenuManager : : m_PrefsVsync = * ( int8 * ) 0x5F2E58 ; // 1
int8 & CMenuManager : : m_PrefsVsyncDisp = * ( int8 * ) 0x5F2E5C ; // 1
int8 & CMenuManager : : m_PrefsFrameLimiter = * ( int8 * ) 0x5F2E60 ; // 1
int8 & CMenuManager : : m_PrefsShowSubtitles = * ( int8 * ) 0x5F2E54 ; // 1
2019-06-15 01:34:19 +02:00
int8 & CMenuManager : : m_PrefsSpeakers = * ( int8 * ) 0x95CD7E ;
2019-07-14 12:46:36 +02:00
int32 & CMenuManager : : m_ControlMethod = * ( int32 * ) 0x8F5F7C ;
int8 & CMenuManager : : m_PrefsDMA = * ( int8 * ) 0x5F2F74 ; // 1
int32 & CMenuManager : : m_PrefsLanguage = * ( int32 * ) 0x941238 ;
2019-06-15 01:34:19 +02:00
2019-07-14 12:46:36 +02:00
bool & CMenuManager : : m_PrefsAllowNastyGame = * ( bool * ) 0x5F2E64 ; // true
2019-06-17 00:16:38 +02:00
bool & CMenuManager : : m_bStartUpFrontEndRequested = * ( bool * ) 0x95CCF4 ;
2019-06-25 02:34:29 +02:00
bool & CMenuManager : : m_bShutDownFrontEndRequested = * ( bool * ) 0x95CD6A ;
2019-06-15 01:34:19 +02:00
int8 & CMenuManager : : m_PrefsUseWideScreen = * ( int8 * ) 0x95CD23 ;
int8 & CMenuManager : : m_PrefsRadioStation = * ( int8 * ) 0x95CDA4 ;
2019-07-14 12:46:36 +02:00
int32 & CMenuManager : : m_PrefsBrightness = * ( int32 * ) 0x5F2E50 ; // 256
2019-06-17 00:16:38 +02:00
float & CMenuManager : : m_PrefsLOD = * ( float * ) 0x8F42C4 ;
2019-06-15 01:34:19 +02:00
int8 & CMenuManager : : m_bFrontEnd_ReloadObrTxtGxt = * ( int8 * ) 0x628CFC ;
2019-07-14 12:46:36 +02:00
int32 & CMenuManager : : m_PrefsMusicVolume = * ( int32 * ) 0x5F2E4C ; // 102
int32 & CMenuManager : : m_PrefsSfxVolume = * ( int32 * ) 0x5F2E48 ; // 102
2019-05-31 11:44:43 +02:00
2019-07-14 12:46:36 +02:00
char * CMenuManager : : m_PrefsSkinFile = ( char * ) 0x5F2E74 ; //[256] "$$\"\""
2019-07-10 09:57:08 +02:00
2019-07-14 12:46:36 +02:00
int32 & CMenuManager : : m_KeyPressedCode = * ( int32 * ) 0x5F2E70 ; // -1
2019-07-03 17:26:15 +02:00
2020-01-07 15:23:09 +01:00
float & CMenuManager : : menuXYpadding = * ( float * ) 0x5F355C ; // don't know the original name. MENUACTION_X_MARGIN, never changes
float & CMenuManager : : actionTextScaleX = * ( float * ) 0x5F2E40 ;
float & CMenuManager : : actionTextScaleY = * ( float * ) 0x5F2E44 ;
2020-03-17 19:03:13 +01:00
int32 & CMenuManager : : sthWithButtons = * ( int32 * ) 0x8E2880 ;
int32 & CMenuManager : : sthWithButtons2 = * ( int32 * ) 0x942F88 ;
2019-11-09 16:17:54 +01:00
2019-05-30 21:24:47 +02:00
CMenuManager & FrontEndMenuManager = * ( CMenuManager * ) 0x8F59D8 ;
2019-07-03 17:26:15 +02:00
// Move this somewhere else.
2019-07-14 12:46:36 +02:00
float & CRenderer : : ms_lodDistScale = * ( float * ) 0x5F726C ; // 1.2
2019-07-03 17:26:15 +02:00
// Stuff not in CMenuManager:
2019-11-09 16:17:54 +01:00
uint32 & TimeToStopPadShaking = * ( uint32 * ) 0x628CF8 ;
2019-07-14 12:46:36 +02:00
char * & pEditString = * ( char * * ) 0x628D00 ;
2019-07-10 13:42:48 +02:00
int32 * & pControlEdit = * ( int32 * * ) 0x628D08 ;
2019-07-10 22:57:19 +02:00
bool & DisplayComboButtonErrMsg = * ( bool * ) 0x628D14 ;
int32 & MouseButtonJustClicked = * ( int32 * ) 0x628D0C ;
int32 & JoyButtonJustClicked = * ( int32 * ) 0x628D10 ;
2020-03-17 19:03:13 +01:00
bool & holdingScrollBar = * ( bool * ) 0x628D59 ;
2019-07-10 22:57:19 +02:00
//int32 *pControlTemp = 0;
2019-07-03 17:26:15 +02:00
2020-03-31 12:30:13 +02:00
# ifndef MASTER
bool CMenuManager : : m_PrefsMarketing = false ;
bool CMenuManager : : m_PrefsDisableTutorials = false ;
# endif // !MASTER
2019-11-09 16:17:54 +01:00
// 0x5F311C
const char * FrontendFilenames [ ] [ 2 ] = {
{ " fe2_mainpanel_ul " , " " } ,
{ " fe2_mainpanel_ur " , " " } ,
{ " fe2_mainpanel_dl " , " " } ,
{ " fe2_mainpanel_dr " , " " } ,
{ " fe2_mainpanel_dr2 " , " " } ,
{ " fe2_tabactive " , " " } ,
{ " fe_iconbrief " , " " } ,
{ " fe_iconstats " , " " } ,
{ " fe_iconcontrols " , " " } ,
{ " fe_iconsave " , " " } ,
{ " fe_iconaudio " , " " } ,
{ " fe_icondisplay " , " " } ,
{ " fe_iconlanguage " , " " } ,
{ " fe_controller " , " " } ,
{ " fe_controllersh " , " " } ,
{ " fe_arrows1 " , " " } ,
{ " fe_arrows2 " , " " } ,
{ " fe_arrows3 " , " " } ,
{ " fe_arrows4 " , " " } ,
{ " fe_radio1 " , " " } , // HEAD_RADIO
{ " fe_radio2 " , " " } , // DOUBLE_CLEF
{ " fe_radio3 " , " " } , // JAH_RADIO
{ " fe_radio4 " , " " } , // RISE_FM
{ " fe_radio5 " , " " } , // LIPS_106
{ " fe_radio6 " , " " } , // GAME_FM
{ " fe_radio7 " , " " } , // MSX_FM
{ " fe_radio8 " , " " } , // FLASHBACK
{ " fe_radio9 " , " " } , // CHATTERBOX
2019-06-25 02:34:29 +02:00
} ;
2019-11-09 16:17:54 +01:00
// 0x5F3344
const char * MenuFilenames [ ] [ 2 ] = {
{ " connection24 " , " " } ,
{ " findgame24 " , " " } ,
{ " hostgame24 " , " " } ,
{ " mainmenu24 " , " " } ,
{ " Playersetup24 " , " " } ,
{ " singleplayer24 " , " " } ,
{ " multiplayer24 " , " " } ,
{ " dmalogo128 " , " dmalogo128m " } ,
{ " gtaLogo128 " , " gtaLogo128 " } ,
{ " rockstarLogo128 " , " rockstarlogo128m " } ,
{ " gamespy256 " , " gamespy256a " } ,
{ " mouse " , " mousetimera " } ,
{ " mousetimer " , " mousetimera " } ,
{ " mp3logo " , " mp3logoA " } ,
{ " downOFF " , " buttonA " } ,
{ " downON " , " buttonA " } ,
{ " upOff " , " buttonA " } ,
{ " upON " , " buttonA " } ,
{ " gta3logo256 " , " gta3logo256m " } ,
{ nil , nil }
2019-06-25 02:34:29 +02:00
} ;
2019-11-09 16:17:54 +01:00
# ifdef ASPECT_RATIO_SCALE
2020-01-07 15:23:09 +01:00
// All of the defines below replace the StretchX function. Otherwise use SCREEN_SCALE_X.
2019-11-09 16:17:54 +01:00
# define MENU_X_LEFT_ALIGNED(x) ScaleAndCenterX(x)
2020-04-04 13:39:58 +02:00
# define MENU_X_RIGHT_ALIGNED(x) ScaleAndCenterX(DEFAULT_SCREEN_WIDTH - (x))
2019-11-09 16:17:54 +01:00
# define MENU_X(x) SCREEN_SCALE_X(x)
# define MENU_Y(y) SCREEN_SCALE_Y(y)
float
ScaleAndCenterX ( float x )
{
if ( SCREEN_WIDTH = = DEFAULT_SCREEN_WIDTH )
return x ;
else {
if ( x > DEFAULT_SCREEN_WIDTH / 2 ) {
return SCREEN_WIDTH / 2 + SCREEN_SCALE_X ( x - DEFAULT_SCREEN_WIDTH / 2 ) ;
} else {
return SCREEN_WIDTH / 2 - SCREEN_SCALE_X ( DEFAULT_SCREEN_WIDTH / 2 - x ) ;
}
}
}
2019-06-25 02:34:29 +02:00
# else
2019-11-09 16:17:54 +01:00
# define MENU_X_LEFT_ALIGNED(x) StretchX(x)
2020-01-07 15:23:09 +01:00
# define MENU_X_RIGHT_ALIGNED(x) SCREEN_STRETCH_FROM_RIGHT(x)
2019-11-09 16:17:54 +01:00
# define MENU_X(x) StretchX(x)
# define MENU_Y(y) StretchY(y)
# endif
2020-03-17 19:03:13 +01:00
# define isPlainTextScreen(screen) (screen == MENUPAGE_BRIEFS || screen == MENUPAGE_STATS)
2020-03-25 15:13:06 +01:00
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
# define ChangeScreen(screen, option, updateDelay, withReverseAlpha) \
do { \
if ( reverseAlpha ) { \
m_nPrevScreen = m_nCurrScreen ; \
m_nCurrScreen = pendingScreen ; \
m_nCurrOption = pendingOption ; \
reverseAlpha = false ; \
if ( updateDelay ) \
m_nScreenChangeDelayTimer = CTimer : : GetTimeInMillisecondsPauseMode ( ) ; \
} \
if ( withReverseAlpha ) { \
pendingOption = option ; \
pendingScreen = screen ; \
reverseAlpha = true ; \
} else { \
m_nPrevScreen = m_nCurrScreen ; \
m_nCurrScreen = screen ; \
m_nCurrOption = option ; \
if ( updateDelay ) \
m_nScreenChangeDelayTimer = CTimer : : GetTimeInMillisecondsPauseMode ( ) ; \
} \
m_nMenuFadeAlpha = 255 ; \
} while ( 0 )
# else
# define ChangeScreen(screen, option, updateDelay, clearAlpha) \
do { \
m_nPrevScreen = m_nCurrScreen ; \
m_nCurrScreen = screen ; \
m_nCurrOption = option ; \
if ( updateDelay ) \
m_nScreenChangeDelayTimer = CTimer : : GetTimeInMillisecondsPauseMode ( ) ; \
if ( clearAlpha ) \
m_nMenuFadeAlpha = 0 ; \
} while ( 0 )
# endif
# define ProcessSlider(value, increaseAction, decreaseAction, hoverStartX, hoverEndX) \
do { \
2020-04-04 13:39:58 +02:00
lastBarX = DisplaySlider ( SCREEN_STRETCH_FROM_RIGHT ( MENUSLIDER_X + columnWidth ) , MENU_Y ( bitAboveNextItemY ) , MENU_Y ( smallestSliderBar ) , MENU_Y ( usableLineHeight ) , MENU_X ( MENUSLIDER_UNK ) , value ) ; \
2020-03-17 19:03:13 +01:00
if ( i ! = m_nCurrOption | | ! itemsAreSelectable ) \
break ; \
\
if ( CheckHover ( hoverStartX , lastBarX - MENU_X ( 10.0f ) , MENU_Y ( nextYToUse ) , MENU_Y ( 28.0f + nextYToUse ) ) ) \
m_nHoverOption = decreaseAction ; \
\
if ( ! CheckHover ( MENU_X ( 10.0f ) + lastBarX , hoverEndX , MENU_Y ( nextYToUse ) , MENU_Y ( 28.0f + nextYToUse ) ) ) \
break ; \
\
m_nHoverOption = increaseAction ; \
if ( m_nMousePosX < SCREEN_STRETCH_FROM_RIGHT ( MENUSLIDER_X + columnWidth ) ) \
m_nHoverOption = HOVEROPTION_NOT_HOVERING ; \
} while ( 0 )
2020-03-25 15:13:06 +01:00
// --- Functions not in the game/inlined starts
2020-03-17 19:03:13 +01:00
2020-03-25 15:13:06 +01:00
inline void
CMenuManager : : ScrollUpListByOne ( )
{
if ( m_nSelectedListRow = = m_nFirstVisibleRowOnList ) {
if ( m_nFirstVisibleRowOnList > 0 ) {
m_nSelectedListRow - - ;
m_nFirstVisibleRowOnList - - ;
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin - = SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ;
2020-03-25 15:13:06 +01:00
}
} else {
m_nSelectedListRow - - ;
}
}
2020-03-17 19:03:13 +01:00
2020-03-25 15:13:06 +01:00
inline void
CMenuManager : : ScrollDownListByOne ( )
{
if ( m_nSelectedListRow = = m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1 ) {
if ( m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW ) {
m_nSelectedListRow + + ;
m_nFirstVisibleRowOnList + + ;
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin + = SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ;
2020-03-25 15:13:06 +01:00
}
} else {
if ( m_nSelectedListRow < m_nTotalListRow - 1 ) {
m_nSelectedListRow + + ;
}
}
}
2020-03-17 19:03:13 +01:00
2020-03-25 15:13:06 +01:00
inline void
CMenuManager : : PageUpList ( bool playSoundOnSuccess )
{
if ( m_nTotalListRow > MAX_VISIBLE_LIST_ROW ) {
if ( m_nFirstVisibleRowOnList > 0 ) {
if ( playSoundOnSuccess )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_nFirstVisibleRowOnList = max ( 0 , m_nFirstVisibleRowOnList - MAX_VISIBLE_LIST_ROW ) ;
m_nSelectedListRow = min ( m_nSelectedListRow , m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW - 1 ) ;
} else {
m_nFirstVisibleRowOnList = 0 ;
m_nSelectedListRow = 0 ;
}
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin = ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ) * m_nFirstVisibleRowOnList ;
2020-03-25 15:13:06 +01:00
}
}
inline void
CMenuManager : : PageDownList ( bool playSoundOnSuccess )
{
if ( m_nTotalListRow > MAX_VISIBLE_LIST_ROW ) {
if ( m_nFirstVisibleRowOnList < m_nTotalListRow - MAX_VISIBLE_LIST_ROW ) {
if ( playSoundOnSuccess )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_nFirstVisibleRowOnList = min ( m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW , m_nTotalListRow - MAX_VISIBLE_LIST_ROW ) ;
m_nSelectedListRow = max ( m_nSelectedListRow , m_nFirstVisibleRowOnList ) ;
} else {
m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW ;
m_nSelectedListRow = m_nTotalListRow - 1 ;
}
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin = ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ) * m_nFirstVisibleRowOnList ;
2020-03-25 15:13:06 +01:00
}
}
inline void
CMenuManager : : ThingsToDoBeforeLeavingPage ( )
{
if ( ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) & & strcmp ( m_aSkinName , m_PrefsSkinFile ) ! = 0 ) {
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
} else if ( m_nCurrScreen = = MENUPAGE_SOUND_SETTINGS ) {
if ( m_nPrefsAudio3DProviderIndex ! = - 1 )
m_nPrefsAudio3DProviderIndex = DMAudio . GetCurrent3DProviderIndex ( ) ;
# ifdef TIDY_UP_PBP
DMAudio . StopFrontEndTrack ( ) ;
OutputDebugString ( " FRONTEND AUDIO TRACK STOPPED " ) ;
# endif
} else if ( m_nCurrScreen = = MENUPAGE_GRAPHICS_SETTINGS ) {
m_nDisplayVideoMode = m_nPrefsVideoMode ;
}
if ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) {
CPlayerSkin : : EndFrontendSkinEdit ( ) ;
}
if ( ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) | | ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) ) {
m_nTotalListRow = 0 ;
}
}
// ------ Functions not in the game/inlined ends
2020-03-17 19:03:13 +01:00
2019-11-09 16:17:54 +01:00
void
CMenuManager : : BuildStatLine ( char * text , void * stat , uint8 aFloat , void * stat2 )
2019-06-25 02:34:29 +02:00
{
2019-07-10 09:57:08 +02:00
if ( ! text )
return ;
2019-06-25 02:34:29 +02:00
2019-07-10 13:42:48 +02:00
if ( stat2 ) {
2019-07-10 09:57:08 +02:00
if ( aFloat )
2019-11-09 16:17:54 +01:00
sprintf ( gString2 , " %.2f %s %.2f " , * ( float * ) stat , UnicodeToAscii ( TheText . Get ( " FEST_OO " ) ) , * ( float * ) stat2 ) ;
2019-07-10 09:57:08 +02:00
else
2019-07-10 13:42:48 +02:00
sprintf ( gString2 , " %d %s %d " , * ( int * ) stat , UnicodeToAscii ( TheText . Get ( " FEST_OO " ) ) , * ( int * ) stat2 ) ;
2019-11-09 16:17:54 +01:00
} else if ( stat ) {
2019-07-10 13:42:48 +02:00
if ( aFloat )
2019-11-09 16:17:54 +01:00
sprintf ( gString2 , " %.2f " , * ( float * ) stat ) ;
2019-07-10 13:42:48 +02:00
else
sprintf ( gString2 , " %d " , * ( int * ) stat ) ;
2019-11-09 16:17:54 +01:00
} else
2019-07-10 13:42:48 +02:00
gString2 [ 0 ] = ' \0 ' ;
2019-07-10 09:57:08 +02:00
2019-07-10 13:42:48 +02:00
UnicodeStrcpy ( gUString , TheText . Get ( text ) ) ;
AsciiToUnicode ( gString2 , gUString2 ) ;
2019-06-25 02:34:29 +02:00
}
2019-07-14 12:46:36 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : CentreMousePointer ( ) { EAXJMP ( 0x48ACE0 ) ; }
# else
void CMenuManager : : CentreMousePointer ( )
{
tagPOINT Point ;
2019-07-03 17:26:15 +02:00
if ( SCREEN_WIDTH * 0.5f = = 0.0f & & 0.0f = = SCREEN_HEIGHT * 0.5f ) {
2019-06-25 02:34:29 +02:00
Point . x = SCREEN_WIDTH / 2 ;
Point . y = SCREEN_HEIGHT / 2 ;
ClientToScreen ( PSGLOBAL ( window ) , & Point ) ;
SetCursorPos ( Point . x , Point . y ) ;
PSGLOBAL ( lastMousePos . x ) = SCREEN_WIDTH / 2 ;
PSGLOBAL ( lastMousePos . y ) = SCREEN_HEIGHT / 2 ;
}
}
# endif
# if 1
2019-07-10 09:57:08 +02:00
WRAPPER int CMenuManager : : CheckCodesForControls ( int32 ) { EAXJMP ( 0x48A950 ) ; }
2019-06-25 02:34:29 +02:00
# else
2019-07-10 09:57:08 +02:00
void CMenuManager : : CheckCodesForControls ( int , int )
2019-06-25 02:34:29 +02:00
{
2019-07-10 09:57:08 +02:00
DisplayComboButtonErrMsg = 0 ;
2019-06-25 02:34:29 +02:00
}
# endif
2019-07-14 12:46:36 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER bool CMenuManager : : CheckHover ( int , int , int , int ) { EAXJMP ( 0x48ACA0 ) ; }
# else
bool CMenuManager : : CheckHover ( int x1 , int x2 , int y1 , int y2 )
{
2019-06-25 08:19:47 +02:00
return m_nMousePosX > x1 & & m_nMousePosX < x2 & &
m_nMousePosY > y1 & & m_nMousePosY < y2 ;
2019-06-25 02:34:29 +02:00
}
# endif
2019-07-03 17:26:15 +02:00
void CMenuManager : : CheckSliderMovement ( int value )
{
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ) {
case MENUACTION_BRIGHTNESS :
2020-03-17 19:03:13 +01:00
m_PrefsBrightness + = value * ( 512 / 16 ) ;
2019-07-14 12:46:36 +02:00
m_PrefsBrightness = clamp ( m_PrefsBrightness , 0 , 511 ) ;
2019-07-03 17:26:15 +02:00
break ;
case MENUACTION_DRAWDIST :
2020-03-17 19:03:13 +01:00
if ( value > 0 )
m_PrefsLOD + = ( ( 1.8f - 0.8f ) / 16.0f ) ;
else
m_PrefsLOD - = ( ( 1.8f - 0.8f ) / 16.0f ) ;
2019-07-14 12:46:36 +02:00
m_PrefsLOD = clamp ( m_PrefsLOD , 0.8f , 1.8f ) ;
CRenderer : : ms_lodDistScale = m_PrefsLOD ;
2019-07-03 17:26:15 +02:00
break ;
case MENUACTION_MUSICVOLUME :
2019-07-14 12:46:36 +02:00
m_PrefsMusicVolume + = value * ( 128 / 16 ) ;
m_PrefsMusicVolume = clamp ( m_PrefsMusicVolume , 0 , 127 ) ;
DMAudio . SetMusicMasterVolume ( m_PrefsMusicVolume ) ;
2019-07-03 17:26:15 +02:00
break ;
case MENUACTION_SFXVOLUME :
2019-07-14 12:46:36 +02:00
m_PrefsSfxVolume + = value * ( 128 / 16 ) ;
m_PrefsSfxVolume = clamp ( m_PrefsSfxVolume , 0 , 127 ) ;
DMAudio . SetEffectsMasterVolume ( m_PrefsSfxVolume ) ;
2019-07-03 17:26:15 +02:00
break ;
case MENUACTION_MOUSESENS :
2019-07-14 12:46:36 +02:00
TheCamera . m_fMouseAccelHorzntl + = value * 1.0f / 200.0f / 15.0f ; // ???
TheCamera . m_fMouseAccelHorzntl = clamp ( TheCamera . m_fMouseAccelHorzntl , 1.0f / 3200.0f , 1.0f / 200.0f ) ;
TheCamera . m_fMouseAccelVertical = TheCamera . m_fMouseAccelHorzntl ;
2019-07-03 17:26:15 +02:00
break ;
2019-07-14 12:46:36 +02:00
default :
return ;
2019-07-10 13:42:48 +02:00
}
2019-07-14 12:46:36 +02:00
SaveSettings ( ) ;
2019-07-03 17:26:15 +02:00
}
2019-06-25 02:34:29 +02:00
# if 1
WRAPPER int CMenuManager : : CostructStatLine ( int ) { EAXJMP ( 0x482800 ) ; }
# else
int CMenuManager : : CostructStatLine ( int )
{
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : DisplayHelperText ( ) { EAXJMP ( 0x48B490 ) ; }
# else
void CMenuManager : : DisplayHelperText ( )
{
2019-07-03 17:26:15 +02:00
static int32 AlphaText = 255 ;
static int32 Time = 0 ;
if ( m_nHelperTextMsgId & & m_nHelperTextMsgId ! = 1 ) {
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - Time > 10 ) {
Time = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
m_nHelperTextAlpha - = 2 ;
if ( AlphaText < 1 )
ResetHelperText ( ) ;
AlphaText = m_nHelperTextAlpha > 255 ? 255 : m_nHelperTextAlpha ;
}
}
wchar * HelperTextToPrint = nil ;
// TODO: name this cases?
2019-06-25 02:34:29 +02:00
switch ( m_nHelperTextMsgId ) {
case 0 :
2019-07-03 17:26:15 +02:00
HelperTextToPrint = TheText . Get ( " FET_MIG " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 1 :
2019-07-03 17:26:15 +02:00
HelperTextToPrint = TheText . Get ( " FET_APP " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 2 :
2019-07-03 17:26:15 +02:00
HelperTextToPrint = TheText . Get ( " FET_HRD " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 3 :
2019-07-03 17:26:15 +02:00
HelperTextToPrint = TheText . Get ( " FET_RSO " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 4 :
2019-07-03 17:26:15 +02:00
HelperTextToPrint = TheText . Get ( " FET_RSC " ) ;
2019-06-25 02:34:29 +02:00
break ;
default :
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
CFont : : SetAlignment ( ALIGN_CENTER ) ;
CFont : : SetScale ( SCREEN_SCALE_X ( 0.4f ) , SCREEN_SCALE_Y ( 0.6f ) ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
2019-07-03 17:26:15 +02:00
CFont : : SetDropColor ( CRGBA ( 0 , 0 , 0 , AlphaText ) ) ;
2019-06-25 14:25:39 +02:00
CFont : : SetDropShadowPosition ( MENUDROP_COLOR_SIZE ) ;
2019-07-03 17:26:15 +02:00
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , AlphaText ) ) ;
2019-06-25 02:34:29 +02:00
2019-07-03 17:26:15 +02:00
CFont : : PrintString ( SCREEN_WIDTH / 2 , SCREEN_SCALE_FROM_BOTTOM ( 120.0f ) , HelperTextToPrint ) ;
2019-06-25 02:34:29 +02:00
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2020-01-07 15:23:09 +01:00
WRAPPER int CMenuManager : : DisplaySlider ( float , float , float , float , float , float ) { EAXJMP ( 0x488420 ) ; }
2019-06-25 02:34:29 +02:00
# else
2020-01-07 15:23:09 +01:00
int CMenuManager : : DisplaySlider ( float x , float y , float leftSize , float rightSize , float rectSize , float progress )
2019-06-25 02:34:29 +02:00
{
CRGBA color ;
float sizeRange ;
float input = 0.0f ;
2019-06-25 08:19:47 +02:00
for ( int i = 0 ; i < 16 ; i + + ) {
input = i * rectSize / 16.0f + x ;
2019-06-25 02:34:29 +02:00
2019-06-25 08:19:47 +02:00
if ( i / 16.0f + 1 / 32.0f < progress )
2019-06-25 02:34:29 +02:00
color = CRGBA ( 255 , 217 , 106 , FadeIn ( 255 ) ) ;
else
color = CRGBA ( 185 , 120 , 0 , FadeIn ( 255 ) ) ;
2019-06-25 08:19:47 +02:00
sizeRange = max ( leftSize , rightSize ) ;
2019-06-25 02:34:29 +02:00
2019-06-25 08:19:47 +02:00
float _x = i * rectSize / 16.0f + x ;
float _y = y + sizeRange - ( ( 16 - i ) * leftSize + i * rightSize ) / 16.0f ;
float _w = SCREEN_SCALE_X ( 10.0f ) + i * rectSize / 16.0f + x ;
2019-06-25 02:34:29 +02:00
float _h = y + sizeRange ;
float _s = SCREEN_SCALE_X ( 2.0f ) ;
CSprite2d : : DrawRect ( CRect ( _x + _s , _y + _s , _w + _s , _h + _s ) , CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ; // Shadow
2019-06-25 08:19:47 +02:00
CSprite2d : : DrawRect ( CRect ( i * rectSize / 16.0f + x , y + sizeRange - ( ( 16 - i ) * leftSize + i * rightSize ) / 16.0f , SCREEN_SCALE_X ( 10.0f ) + i * rectSize / 16.0f + x , y + sizeRange ) , color ) ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
return input ;
}
# endif
2020-01-07 15:23:09 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : DoSettingsBeforeStartingAGame ( ) { EAXJMP ( 0x48AB40 ) ; }
# else
2019-07-03 17:26:15 +02:00
void CMenuManager : : DoSettingsBeforeStartingAGame ( )
2019-06-25 02:34:29 +02:00
{
2020-04-02 12:48:01 +02:00
CCamera : : m_bUseMouse3rdPerson = m_ControlMethod = = CONTROL_STANDARD ;
2019-07-03 17:26:15 +02:00
if ( m_PrefsVsyncDisp ! = m_PrefsVsync )
m_PrefsVsync = m_PrefsVsyncDisp ;
2019-07-02 13:59:19 +02:00
2020-01-07 15:23:09 +01:00
DMAudio . Service ( ) ;
2019-07-03 17:26:15 +02:00
m_bStartGameLoading = true ;
ShutdownJustMenu ( ) ;
UnloadTextures ( ) ;
DMAudio . SetEffectsFadeVol ( 0 ) ;
DMAudio . SetMusicFadeVol ( 0 ) ;
DMAudio . ResetTimers ( CTimer : : GetTimeInMilliseconds ( ) ) ;
2019-06-25 02:34:29 +02:00
}
# endif
2020-01-07 15:23:09 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : Draw ( ) { EAXJMP ( 0x47AE00 ) ; }
# else
void CMenuManager : : Draw ( )
{
CFont : : SetBackgroundOff ( ) ;
CFont : : SetPropOn ( ) ;
CFont : : SetCentreOff ( ) ;
CFont : : SetJustifyOn ( ) ;
CFont : : SetBackGroundOnlyTextOn ( ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetWrapx ( MENU_X_RIGHT_ALIGNED ( MENUACTION_X_MARGIN ) ) ;
2020-04-04 13:39:58 +02:00
CFont : : SetRightJustifyWrap ( SCREEN_SCALE_X ( MENUACTION_WIDTH ) ) ;
2019-06-25 02:34:29 +02:00
switch ( m_nCurrScreen ) {
2019-11-09 16:17:54 +01:00
case MENUPAGE_STATS :
PrintStats ( ) ;
break ;
case MENUPAGE_BRIEFS :
PrintBriefs ( ) ;
break ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
// Header height isn't accounted, we will add that later.
float nextYToUse = 40.0f ;
// Page name
# ifdef PS2_SAVE_DIALOG
if ( ! m_bRenderGameInMenu )
# endif
if ( aScreens [ m_nCurrScreen ] . m_ScreenName [ 0 ] ! = ' \0 ' ) {
2020-03-17 19:03:13 +01:00
2019-06-25 02:34:29 +02:00
CFont : : SetRightJustifyOn ( ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , 255 ) ) ;
CFont : : SetScale ( MENU_X ( MENUHEADER_WIDTH ) , MENU_Y ( 1.3f ) ) ;
CFont : : PrintString ( MENU_X_RIGHT_ALIGNED ( 50.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 75.0f ) , TheText . Get ( aScreens [ m_nCurrScreen ] . m_ScreenName ) ) ;
# else
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetScale ( MENU_X ( MENUHEADER_WIDTH ) , MENU_Y ( MENUHEADER_HEIGHT ) ) ;
2019-06-25 14:25:39 +02:00
CFont : : PrintString ( SCREEN_SCALE_FROM_RIGHT ( MENUHEADER_POS_X ) , SCREEN_SCALE_FROM_BOTTOM ( MENUHEADER_POS_Y ) , TheText . Get ( aScreens [ m_nCurrScreen ] . m_ScreenName ) ) ;
2020-03-17 19:03:13 +01:00
# endif
2020-01-07 15:23:09 +01:00
// Weird place to put that.
nextYToUse + = 24.0f + 10.0f ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
CFont : : SetFontStyle ( FONT_BANK ) ;
2020-04-04 13:39:58 +02:00
CFont : : SetScale ( MENU_X ( MENUACTION_SCALE_MULT * actionTextScaleX ) , MENU_Y ( MENUACTION_SCALE_MULT * actionTextScaleY ) ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetRightJustifyOff ( ) ; // AG used SetAlignment(ALIGN_LEFT);
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
// Label
2019-06-25 02:34:29 +02:00
wchar * str ;
2019-06-25 14:25:39 +02:00
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_Action = = MENUACTION_LABEL ) {
2019-06-25 02:34:29 +02:00
switch ( m_nCurrScreen ) {
2019-06-25 14:25:39 +02:00
case MENUPAGE_LOAD_SLOT_CONFIRM :
2019-06-25 02:34:29 +02:00
if ( m_bGameNotLoaded )
str = TheText . Get ( " FES_LCG " ) ;
else
str = TheText . Get ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_EntryName ) ;
break ;
2019-06-25 14:25:39 +02:00
case MENUPAGE_SAVE_OVERWRITE_CONFIRM :
2020-02-13 00:33:21 +01:00
if ( Slots [ m_nCurrSaveSlot + 1 ] = = SLOT_EMPTY )
2019-06-25 02:34:29 +02:00
str = TheText . Get ( " FESZ_QZ " ) ;
else
str = TheText . Get ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_EntryName ) ;
break ;
2019-06-25 14:25:39 +02:00
case MENUPAGE_EXIT :
2019-06-25 02:34:29 +02:00
if ( m_bGameNotLoaded )
str = TheText . Get ( " FEQ_SRW " ) ;
else
str = TheText . Get ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_EntryName ) ;
break ;
default :
str = TheText . Get ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_EntryName ) ;
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
# ifdef FIX_BUGS
// Label is wrapped from right by StretchX(40)px, but wrapped from left by 40px. And this is only place R* didn't use StretchX in menu.
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( MENUACTION_X_MARGIN ) , MENU_Y ( menuXYpadding ) , str ) ;
# else
CFont : : PrintString ( MENUACTION_X_MARGIN , menuXYpadding , str ) ;
# endif
2019-11-09 16:17:54 +01:00
}
CFont : : SetCentreSize ( SCREEN_WIDTH ) ;
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
bool itemsAreSelectable = ! bottomBarActive ;
# else
2020-01-07 15:23:09 +01:00
bool itemsAreSelectable = true ;
2020-03-17 19:03:13 +01:00
# endif
2020-01-07 15:23:09 +01:00
int lineHeight ;
int headerHeight ;
int columnWidth ;
2019-11-09 16:17:54 +01:00
switch ( m_nCurrScreen ) {
case MENUPAGE_STATS :
case MENUPAGE_BRIEFS :
2020-01-07 15:23:09 +01:00
columnWidth = 320 ;
headerHeight = 240 ;
lineHeight = 24 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetCentreOn ( ) ;
break ;
case MENUPAGE_SOUND_SETTINGS :
case MENUPAGE_GRAPHICS_SETTINGS :
case MENUPAGE_MULTIPLAYER_CREATE :
case MENUPAGE_SKIN_SELECT_OLD :
case MENUPAGE_CONTROLLER_PC_OLD1 :
case MENUPAGE_CONTROLLER_PC_OLD2 :
case MENUPAGE_CONTROLLER_PC_OLD3 :
case MENUPAGE_CONTROLLER_PC_OLD4 :
case MENUPAGE_CONTROLLER_DEBUG :
case MENUPAGE_MOUSE_CONTROLS :
2020-01-07 15:23:09 +01:00
columnWidth = 50 ;
headerHeight = 0 ;
lineHeight = 20 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.55f ) , MENU_Y ( actionTextScaleY = 0.8f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetRightJustifyOff ( ) ;
break ;
case MENUPAGE_CHOOSE_LOAD_SLOT :
case MENUPAGE_CHOOSE_DELETE_SLOT :
case MENUPAGE_CHOOSE_SAVE_SLOT :
2020-01-07 15:23:09 +01:00
columnWidth = 120 ;
headerHeight = 38 ;
lineHeight = 20 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_BANK ) ;
2020-04-04 13:39:58 +02:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = SMALLTEXT_X_SCALE ) , MENU_Y ( actionTextScaleY = SMALLTEXT_Y_SCALE ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetRightJustifyOff ( ) ;
break ;
case MENUPAGE_NEW_GAME_RELOAD :
case MENUPAGE_LOAD_SLOT_CONFIRM :
case MENUPAGE_DELETE_SLOT_CONFIRM :
case MENUPAGE_SAVE_OVERWRITE_CONFIRM :
case MENUPAGE_EXIT :
2020-01-07 15:23:09 +01:00
columnWidth = 320 ;
headerHeight = 60 ;
lineHeight = 24 ;
2020-01-10 23:48:05 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetCentreOn ( ) ;
break ;
case MENUPAGE_START_MENU :
2020-01-07 15:23:09 +01:00
columnWidth = 320 ;
headerHeight = 140 ;
lineHeight = 24 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetCentreOn ( ) ;
break ;
case MENUPAGE_PAUSE_MENU :
2020-01-07 15:23:09 +01:00
columnWidth = 320 ;
headerHeight = 117 ;
lineHeight = 24 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetCentreOn ( ) ;
break ;
2020-01-10 23:48:05 +01:00
# ifdef PS2_SAVE_DIALOG
case MENUPAGE_SAVE :
columnWidth = 180 ;
headerHeight = 60 ;
lineHeight = 24 ;
CFont : : SetFontStyle ( FONT_BANK ) ;
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
break ;
# endif
2019-11-09 16:17:54 +01:00
default :
2020-01-07 15:23:09 +01:00
columnWidth = 320 ;
headerHeight = 40 ;
lineHeight = 24 ;
2019-11-09 16:17:54 +01:00
CFont : : SetFontStyle ( FONT_HEADING ) ;
2020-01-07 15:23:09 +01:00
CFont : : SetScale ( MENU_X ( actionTextScaleX = 0.75f ) , MENU_Y ( actionTextScaleY = 0.9f ) ) ;
2019-11-09 16:17:54 +01:00
CFont : : SetCentreOn ( ) ;
break ;
}
switch ( m_nCurrScreen ) {
case MENUPAGE_CONTROLLER_PC_OLD1 :
case MENUPAGE_CONTROLLER_PC_OLD2 :
case MENUPAGE_CONTROLLER_PC_OLD3 :
case MENUPAGE_CONTROLLER_PC_OLD4 :
case MENUPAGE_CONTROLLER_DEBUG :
2020-03-17 19:03:13 +01:00
if ( m_bWaitingForNewKeyBind )
2020-01-07 15:23:09 +01:00
itemsAreSelectable = false ;
2019-11-09 16:17:54 +01:00
2020-01-07 15:23:09 +01:00
CMenuManager : : DrawControllerScreenExtraText ( nextYToUse - 8.0f , 350 , lineHeight ) ;
2019-11-09 16:17:54 +01:00
break ;
default :
break ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
float usableLineHeight = lineHeight * 0.9f ; // also height of biggest bar in slider
2020-04-04 13:39:58 +02:00
float smallestSliderBar = lineHeight * 0.1f ;
2020-01-07 15:23:09 +01:00
bool foundTheHoveringItem = false ;
2020-02-27 17:07:36 +01:00
wchar unicodeTemp [ 64 ] ;
2019-07-14 12:46:36 +02:00
for ( int i = 0 ; i < NUM_MENUROWS ; + + i ) {
2020-01-07 15:23:09 +01:00
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_Action ! = MENUACTION_LABEL & & aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_EntryName [ 0 ] ! = ' \0 ' ) {
2020-02-27 17:07:36 +01:00
wchar * rightText = nil ;
wchar * leftText ;
2019-06-25 02:34:29 +02:00
2019-06-25 14:25:39 +02:00
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_SaveSlot > = SAVESLOT_1 & & aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_SaveSlot < = SAVESLOT_8 ) {
2019-11-09 16:17:54 +01:00
CFont : : SetRightJustifyOff ( ) ;
2020-02-27 17:07:36 +01:00
leftText = GetNameOfSavedGame ( i - 1 ) ;
2019-06-25 02:34:29 +02:00
2020-01-31 16:16:32 +01:00
if ( Slots [ i ] ! = SLOT_EMPTY )
2020-02-27 17:07:36 +01:00
rightText = GetSavedGameDateAndTime ( i - 1 ) ;
2019-11-09 16:17:54 +01:00
2020-02-27 17:07:36 +01:00
if ( leftText [ 0 ] = = ' \0 ' ) {
2019-06-25 02:34:29 +02:00
sprintf ( gString , " FEM_SL%d " , i ) ;
2020-02-27 17:07:36 +01:00
leftText = TheText . Get ( gString ) ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
} else {
2020-02-27 17:07:36 +01:00
leftText = TheText . Get ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_EntryName ) ;
2019-06-25 02:34:29 +02:00
}
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_Action ) {
2020-01-07 15:23:09 +01:00
case MENUACTION_CHANGEMENU : {
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_TargetMenu ) {
case MENUPAGE_MULTIPLAYER_MAP :
switch ( sthWithButtons ) {
case 0 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA0 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 1 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA1 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 2 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA2 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 3 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA3 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 4 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA4 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 5 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA5 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 6 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA6 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 7 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_MA7 " ) ;
2020-01-07 15:23:09 +01:00
break ;
default :
break ;
}
break ;
case MENUPAGE_MULTIPLAYER_MODE :
switch ( sthWithButtons2 ) {
case 0 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY0 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 1 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY1 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 2 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY2 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 3 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY3 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 4 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY4 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 5 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY5 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 6 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY6 " ) ;
2020-01-07 15:23:09 +01:00
break ;
case 7 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEN_TY7 " ) ;
2020-01-07 15:23:09 +01:00
break ;
default :
break ;
}
break ;
default :
break ;
}
2019-11-09 16:17:54 +01:00
break ;
2020-01-07 15:23:09 +01:00
}
2019-06-25 08:19:47 +02:00
case MENUACTION_CTRLVIBRATION :
2019-11-09 16:17:54 +01:00
if ( CMenuManager : : m_PrefsUseVibration )
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_ON " ) ;
2019-11-09 16:17:54 +01:00
else
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_CTRLCONFIG :
2019-06-25 02:34:29 +02:00
switch ( CPad : : GetPad ( 0 ) - > Mode ) {
case 0 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_CF1 " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 1 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_CF2 " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 2 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_CF3 " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 3 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_CF4 " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_CTRLDISPLAY :
2019-11-09 16:17:54 +01:00
if ( m_DisplayControllerOnFoot )
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_ONF " ) ;
2019-11-09 16:17:54 +01:00
else
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEC_INC " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_FRAMESYNC :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( m_PrefsVsyncDisp ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_FRAMELIMIT :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( m_PrefsFrameLimiter ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_TRAILS :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( CMBlur : : BlurOn ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_SUBTITLES :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( m_PrefsShowSubtitles ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_WIDESCREEN :
2019-07-03 17:26:15 +02:00
# ifndef ASPECT_RATIO_SCALE
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( m_PrefsUseWideScreen ? " FEM_ON " : " FEM_OFF " ) ;
2019-07-03 17:26:15 +02:00
# else
switch ( m_PrefsUseWideScreen ) {
case AR_AUTO :
2020-02-27 17:07:36 +01:00
rightText = ( wchar * ) L " AUTO " ;
2019-07-03 17:26:15 +02:00
break ;
case AR_4_3 :
2020-02-27 17:07:36 +01:00
rightText = ( wchar * ) L " 4:3 " ;
2019-07-03 17:26:15 +02:00
break ;
case AR_16_9 :
2020-02-27 17:07:36 +01:00
rightText = ( wchar * ) L " 16:9 " ;
2019-07-03 17:26:15 +02:00
break ;
2019-07-11 23:29:59 +02:00
}
2019-07-03 17:26:15 +02:00
# endif
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_RADIO :
2020-01-07 15:23:09 +01:00
if ( m_PrefsRadioStation > USERTRACK )
2019-11-09 16:17:54 +01:00
break ;
2019-06-25 02:34:29 +02:00
sprintf ( gString , " FEA_FM%d " , m_PrefsRadioStation ) ;
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gString ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_SETDBGFLAG :
2020-03-01 12:19:42 +01:00
rightText = TheText . Get ( CTheScripts : : IsDebugOn ( ) ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_SWITCHBIGWHITEDEBUGLIGHT :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gbBigWhiteDebugLightSwitchedOn ? " FEM_ON " : " FEM_OFF " ) ;
2019-11-09 16:17:54 +01:00
break ;
case MENUACTION_PEDROADGROUPS :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gbShowPedRoadGroups ? " FEM_ON " : " FEM_OFF " ) ;
2019-11-09 16:17:54 +01:00
break ;
case MENUACTION_CARROADGROUPS :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gbShowCarRoadGroups ? " FEM_ON " : " FEM_OFF " ) ;
2019-11-09 16:17:54 +01:00
break ;
case MENUACTION_COLLISIONPOLYS :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gbShowCollisionPolys ? " FEM_ON " : " FEM_OFF " ) ;
2019-11-09 16:17:54 +01:00
break ;
case MENUACTION_SHOWCULL :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( gbShowCullZoneDebugStuff ? " FEM_ON " : " FEM_OFF " ) ;
2019-11-09 16:17:54 +01:00
break ;
case MENUACTION_SHOWHEADBOB :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( TheCamera . m_bHeadBob ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_INVVERT :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( MousePointerStateHelper . bInvertVertically ? " FEM_OFF " : " FEM_ON " ) ;
2019-06-25 02:34:29 +02:00
break ;
2020-02-27 17:07:36 +01:00
case MENUACTION_SCREENRES :
AsciiToUnicode ( _psGetVideoModeList ( ) [ m_nDisplayVideoMode ] , unicodeTemp ) ;
rightText = unicodeTemp ;
2019-11-09 16:17:54 +01:00
break ;
2020-02-27 17:07:36 +01:00
case MENUACTION_AUDIOHW :
2019-07-03 17:26:15 +02:00
if ( m_nPrefsAudio3DProviderIndex = = - 1 )
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEA_NAH " ) ;
2019-06-25 02:34:29 +02:00
else {
2020-01-10 23:48:05 +01:00
char * provider = DMAudio . Get3DProviderName ( m_nPrefsAudio3DProviderIndex ) ;
2019-11-09 16:17:54 +01:00
if ( ! strcmp ( strupr ( provider ) , " DIRECTSOUND3D HARDWARE SUPPORT " ) ) {
strcpy ( provider , " DSOUND3D HARDWARE SUPPORT " ) ;
2020-01-10 23:48:05 +01:00
} else if ( ! strcmp ( strupr ( provider ) , " DIRECTSOUND3D SOFTWARE EMULATION " ) ) {
2019-11-09 16:17:54 +01:00
strcpy ( provider , " DSOUND3D SOFTWARE EMULATION " ) ;
}
2020-02-27 17:07:36 +01:00
AsciiToUnicode ( provider , unicodeTemp ) ;
rightText = unicodeTemp ;
2019-06-25 02:34:29 +02:00
}
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_SPEAKERCONF : {
2019-07-03 17:26:15 +02:00
if ( m_nPrefsAudio3DProviderIndex = = - 1 )
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEA_NAH " ) ;
2019-06-25 02:34:29 +02:00
else {
switch ( m_PrefsSpeakers ) {
case 0 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEA_2SP " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 1 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEA_EAR " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 2 :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( " FEA_4SP " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
}
break ;
2020-01-07 15:23:09 +01:00
}
case MENUACTION_CTRLMETHOD : {
2019-06-25 02:34:29 +02:00
switch ( m_ControlMethod ) {
case 0 :
2020-02-27 17:07:36 +01:00
leftText = TheText . Get ( " FET_SCN " ) ;
2019-06-25 02:34:29 +02:00
break ;
case 1 :
2020-02-27 17:07:36 +01:00
leftText = TheText . Get ( " FET_CCN " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
break ;
2020-01-07 15:23:09 +01:00
}
2019-06-25 08:19:47 +02:00
case MENUACTION_DYNAMICACOUSTIC :
2020-02-27 17:07:36 +01:00
rightText = TheText . Get ( m_PrefsDMA ? " FEM_ON " : " FEM_OFF " ) ;
2019-06-25 02:34:29 +02:00
break ;
2019-06-25 08:19:47 +02:00
case MENUACTION_MOUSESTEER :
2020-03-31 04:54:19 +02:00
rightText = TheText . Get ( CVehicle : : m_bDisableMouseSteering ? " FEM_OFF " : " FEM_ON " ) ;
2019-07-11 23:29:59 +02:00
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
float nextItemY = headerHeight + nextYToUse ;
float bitAboveNextItemY = nextItemY - 2.0f ;
int nextYToCheck = bitAboveNextItemY ;
if ( ! foundTheHoveringItem ) {
for ( int rowToCheck = aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_Action = = MENUACTION_LABEL ; rowToCheck < NUM_MENUROWS ; + + rowToCheck ) {
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ rowToCheck ] . m_Action = = MENUACTION_NOTHING )
break ;
int extraOffset = 0 ;
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ rowToCheck ] . m_Action = = MENUACTION_RADIO )
extraOffset = ( int ) 60.0f ;
// There were many unused codes in here to calculate how much space will texts gonna take.
// FIX: nextYToCheck already starts with Y - 2, let's sync it with green bar bounds.
# ifdef FIX_BUGS
if ( m_nMousePosY > MENU_Y ( nextYToCheck ) & &
# else
if ( m_nMousePosY > MENU_Y ( nextYToCheck - 2 ) & &
# endif
m_nMousePosY < MENU_Y ( ( nextYToCheck + 2 ) + usableLineHeight ) ) {
static int lastHoveringOption = - 99 ;
static int lastScreen = m_nCurrScreen ;
m_nPrevOption = rowToCheck ;
if ( m_nMouseOldPosX ! = m_nMousePosX | | m_nMouseOldPosY ! = m_nMousePosY ) {
m_nCurrOption = rowToCheck ;
m_bShowMouse = true ;
}
if ( lastHoveringOption ! = m_nCurrOption ) {
if ( lastScreen = = m_nCurrScreen & & m_bShowMouse )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
lastHoveringOption = m_nCurrOption ;
lastScreen = m_nCurrScreen ;
}
if ( lastScreen = = m_nPrevScreen )
lastScreen = m_nCurrScreen ;
2020-03-17 19:03:13 +01:00
m_nHoverOption = HOVEROPTION_RANDOM_ITEM ;
2020-01-07 15:23:09 +01:00
foundTheHoveringItem = true ;
break ;
}
2020-03-17 19:03:13 +01:00
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
2020-01-07 15:23:09 +01:00
nextYToCheck + = extraOffset + lineHeight ;
}
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
// Green bar behind selected option
# ifdef PS2_SAVE_DIALOG
if ( ! m_bRenderGameInMenu )
# endif
if ( i = = m_nCurrOption & & itemsAreSelectable ) {
// We keep stretching, because we also stretch background image and we want that bar to be aligned with borders of background
CSprite2d : : DrawRect ( CRect ( StretchX ( 10.0f ) , MENU_Y ( bitAboveNextItemY ) ,
SCREEN_STRETCH_FROM_RIGHT ( 11.0f ) , MENU_Y ( usableLineHeight + nextItemY ) ) ,
CRGBA ( 100 , 200 , 50 , FadeIn ( 50 ) ) ) ;
}
2020-03-17 19:03:13 +01:00
2020-01-07 15:23:09 +01:00
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 90 ) ) ) ;
// Button and it's shadow
for ( int textLayer = 0 ; textLayer < 2 ; textLayer + + ) {
if ( ! CFont : : Details . centre )
CFont : : SetRightJustifyOff ( ) ;
float itemY = MENU_Y ( textLayer + nextItemY ) ;
float itemX = MENU_X_LEFT_ALIGNED ( textLayer + columnWidth ) ;
2020-02-27 17:07:36 +01:00
CFont : : PrintString ( itemX , itemY , leftText ) ;
if ( rightText ) {
2020-01-07 15:23:09 +01:00
if ( ! CFont : : Details . centre )
CFont : : SetRightJustifyOn ( ) ;
if ( ! strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_EntryName , " FED_RES " )
& & ! m_bGameNotLoaded & & textLayer = = 1 ) {
CFont : : SetColor ( CRGBA ( 155 , 117 , 6 , FadeIn ( 255 ) ) ) ;
}
2020-02-27 17:07:36 +01:00
CFont : : PrintString ( MENU_X_RIGHT_ALIGNED ( columnWidth - textLayer ) , itemY , rightText ) ;
2019-06-25 02:34:29 +02:00
}
2020-03-17 19:03:13 +01:00
if ( i = = m_nCurrOption & & itemsAreSelectable ) {
2020-01-07 15:23:09 +01:00
CFont : : SetColor ( CRGBA ( 255 , 217 , 106 , FadeIn ( 255 ) ) ) ;
} else {
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
}
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
if ( m_nPrefsAudio3DProviderIndex = = DMAudio . GetCurrent3DProviderIndex ( ) ) {
if ( ! strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FEA_3DH " ) & & m_nHelperTextMsgId = = 1 )
ResetHelperText ( ) ;
}
if ( m_nDisplayVideoMode = = m_nPrefsVideoMode ) {
if ( ! strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FED_RES " ) & & m_nHelperTextMsgId = = 1 )
ResetHelperText ( ) ;
}
if ( m_nPrefsAudio3DProviderIndex ! = DMAudio . GetCurrent3DProviderIndex ( ) ) {
if ( ! strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FEA_3DH " ) )
SetHelperText ( 1 ) ;
}
if ( m_nDisplayVideoMode ! = m_nPrefsVideoMode ) {
if ( ! strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FED_RES " ) )
SetHelperText ( 1 ) ;
}
if ( m_nPrefsAudio3DProviderIndex ! = DMAudio . GetCurrent3DProviderIndex ( ) ) {
if ( strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FEA_3DH " ) ! = 0
2020-03-17 19:03:13 +01:00
& & m_nCurrScreen = = MENUPAGE_SOUND_SETTINGS & & m_nPrefsAudio3DProviderIndex ! = - 1 ) {
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
m_nPrefsAudio3DProviderIndex = DMAudio . GetCurrent3DProviderIndex ( ) ;
SetHelperText ( 3 ) ;
}
}
if ( m_nDisplayVideoMode ! = m_nPrefsVideoMode ) {
2020-03-17 19:03:13 +01:00
if ( strcmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FED_RES " ) ! = 0
& & m_nCurrScreen = = MENUPAGE_GRAPHICS_SETTINGS ) {
2020-01-07 15:23:09 +01:00
m_nDisplayVideoMode = m_nPrefsVideoMode ;
SetHelperText ( 3 ) ;
}
}
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
// Sliders
// We stretch slider start X here(like original code), because it will always be center of screen
2020-03-17 19:03:13 +01:00
int lastBarX ;
2020-01-07 15:23:09 +01:00
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_Action ) {
2020-03-17 19:03:13 +01:00
case MENUACTION_BRIGHTNESS :
ProcessSlider ( m_PrefsBrightness / 512.0f , HOVEROPTION_INCREASE_BRIGHTNESS , HOVEROPTION_DECREASE_BRIGHTNESS , MENU_X_LEFT_ALIGNED ( 170.0f ) , SCREEN_WIDTH ) ;
2019-06-25 02:34:29 +02:00
break ;
2020-03-17 19:03:13 +01:00
case MENUACTION_DRAWDIST :
ProcessSlider ( ( m_PrefsLOD - 0.8f ) * 1.0f , HOVEROPTION_INCREASE_DRAWDIST , HOVEROPTION_DECREASE_DRAWDIST , MENU_X_LEFT_ALIGNED ( 170.0f ) , SCREEN_WIDTH ) ;
2020-01-07 15:23:09 +01:00
break ;
2020-03-17 19:03:13 +01:00
case MENUACTION_MUSICVOLUME :
ProcessSlider ( m_PrefsMusicVolume / 128.0f , HOVEROPTION_INCREASE_MUSICVOLUME , HOVEROPTION_DECREASE_MUSICVOLUME , MENU_X_LEFT_ALIGNED ( 170.0f ) , SCREEN_WIDTH ) ;
2020-01-07 15:23:09 +01:00
break ;
2020-03-17 19:03:13 +01:00
case MENUACTION_SFXVOLUME :
ProcessSlider ( m_PrefsSfxVolume / 128.0f , HOVEROPTION_INCREASE_SFXVOLUME , HOVEROPTION_DECREASE_SFXVOLUME , MENU_X_LEFT_ALIGNED ( 170.0f ) , SCREEN_WIDTH ) ;
2020-01-07 15:23:09 +01:00
break ;
2020-03-17 19:03:13 +01:00
case MENUACTION_MOUSESENS :
ProcessSlider ( TheCamera . m_fMouseAccelHorzntl * 200.0f , HOVEROPTION_INCREASE_MOUSESENS , HOVEROPTION_DECREASE_MOUSESENS , MENU_X_LEFT_ALIGNED ( 200.0f ) , SCREEN_WIDTH ) ;
2020-01-07 15:23:09 +01:00
break ;
2019-06-25 02:34:29 +02:00
}
2020-02-27 17:07:36 +01:00
nextYToUse + = lineHeight * CFont : : GetNumberLines ( menuXYpadding , nextYToUse , leftText ) ;
2019-06-25 02:34:29 +02:00
2020-03-17 19:03:13 +01:00
// TODO: This should be rewritten as multiple macro calls instead of loop, radio order is wrong.
// And hover detection is missing.
2019-06-25 02:34:29 +02:00
float fIconSpacing = 59.52f ;
2020-01-07 15:23:09 +01:00
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_Action = = MENUACTION_RADIO ) {
2019-06-25 02:34:29 +02:00
for ( int i = 0 ; i < POLICE_RADIO ; i + + ) {
2019-07-03 17:26:15 +02:00
# ifndef ASPECT_RATIO_SCALE
2019-07-02 13:59:19 +02:00
if ( i < USERTRACK )
2019-07-02 22:05:11 +02:00
m_aFrontEndSprites [ i + FE_RADIO1 ] . Draw ( SCREEN_STRETCH_X ( MENURADIO_ICON_X + fIconSpacing * i ) , ( SCREEN_HEIGHT / 2 ) - SCREEN_SCALE_Y ( MENURADIO_ICON_Y ) , SCREEN_SCALE_X ( MENURADIO_ICON_W ) , SCREEN_SCALE_Y ( MENURADIO_ICON_H ) , i = = m_PrefsRadioStation ? CRGBA ( 255 , 255 , 255 , 255 ) : CRGBA ( 225 , 0 , 0 , 170 ) ) ;
2019-07-03 17:26:15 +02:00
if ( i > CHATTERBOX & & DMAudio . IsMP3RadioChannelAvailable ( ) )
m_aMenuSprites [ MENUSPRITE_MP3LOGO ] . Draw ( SCREEN_STRETCH_X ( MENURADIO_ICON_X + fIconSpacing * i ) , ( SCREEN_HEIGHT / 2 ) - SCREEN_SCALE_Y ( MENURADIO_ICON_Y ) , SCREEN_SCALE_X ( MENURADIO_ICON_W ) , SCREEN_SCALE_Y ( MENURADIO_ICON_H ) , i = = m_PrefsRadioStation ? CRGBA ( 255 , 255 , 255 , 255 ) : CRGBA ( 225 , 0 , 0 , 170 ) ) ;
# else
float fMp3Pos = 0.0f ;
if ( DMAudio . IsMP3RadioChannelAvailable ( ) )
fMp3Pos = 34.0f ;
if ( i < USERTRACK )
2020-01-07 15:23:09 +01:00
m_aFrontEndSprites [ i + FE_RADIO1 ] . Draw ( ( SCREEN_WIDTH * 0.5 ) + SCREEN_SCALE_X ( - fMp3Pos + MENURADIO_ICON_X + ( fIconSpacing * i ) ) , MENU_Y ( nextYToUse ) , MENU_X ( menuXYpadding ) , MENU_Y ( menuXYpadding ) , i = = m_PrefsRadioStation ? CRGBA ( 255 , 255 , 255 , 255 ) : CRGBA ( 225 , 0 , 0 , 170 ) ) ;
2019-07-03 17:26:15 +02:00
if ( i > CHATTERBOX & & DMAudio . IsMP3RadioChannelAvailable ( ) )
2020-01-07 15:23:09 +01:00
m_aMenuSprites [ MENUSPRITE_MP3LOGO ] . Draw ( ( SCREEN_WIDTH * 0.5 ) + SCREEN_SCALE_X ( - fMp3Pos + MENURADIO_ICON_X + ( fIconSpacing * i ) ) , MENU_Y ( nextYToUse ) , MENU_X ( menuXYpadding ) , MENU_Y ( menuXYpadding ) , i = = m_PrefsRadioStation ? CRGBA ( 255 , 255 , 255 , 255 ) : CRGBA ( 225 , 0 , 0 , 170 ) ) ;
2019-07-03 17:26:15 +02:00
# endif
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
nextYToUse + = 70.0f ;
2019-06-25 02:34:29 +02:00
}
}
2019-07-10 13:42:48 +02:00
}
2019-11-09 16:17:54 +01:00
switch ( m_nCurrScreen ) {
case MENUPAGE_CONTROLLER_SETTINGS :
case MENUPAGE_SOUND_SETTINGS :
case MENUPAGE_GRAPHICS_SETTINGS :
case MENUPAGE_SKIN_SELECT :
case MENUPAGE_CONTROLLER_PC :
case MENUPAGE_MOUSE_CONTROLS :
DisplayHelperText ( ) ;
break ;
}
2020-01-10 23:48:05 +01:00
2020-04-04 13:39:58 +02:00
if ( m_nCurrScreen = = MENUPAGE_CONTROLLER_SETTINGS )
2019-11-09 16:17:54 +01:00
PrintController ( ) ;
2020-04-04 13:39:58 +02:00
2020-01-10 23:48:05 +01:00
/* else if (m_nCurrScreen == MENUPAGE_SKIN_SELECT_OLD) {
2020-01-07 15:23:09 +01:00
CSprite2d : : DrawRect ( CRect ( StretchX ( 180 ) , MENU_Y ( 98 ) , StretchX ( 230 ) , MENU_Y ( 123 ) ) , CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
CSprite2d : : DrawRect ( CRect ( StretchX ( 181 ) , MENU_Y ( 99 ) , StretchX ( 229 ) , MENU_Y ( 233 ) ) , CRGBA ( Player color from PickNewPlayerColour , FadeIn ( 255 ) ) ) ;
2019-11-09 16:17:54 +01:00
}
*/
2019-06-25 02:34:29 +02:00
}
# endif
2020-04-04 13:39:58 +02:00
int
CMenuManager : : GetNumOptionsCntrlConfigScreens ( void )
{
int number = 0 ;
switch ( m_nCurrScreen )
{
case MENUPAGE_CONTROLLER_PC_OLD3 :
number = 2 ;
break ;
case MENUPAGE_CONTROLLER_DEBUG :
number = 4 ;
break ;
case MENUPAGE_KEYBOARD_CONTROLS :
switch ( m_ControlMethod ) {
case CONTROL_STANDART :
number = 25 ;
break ;
case CONTROL_CLASSIC :
number = 30 ;
break ;
}
break ;
}
return number ;
}
void
CMenuManager : : DrawControllerBound ( int32 yStart , int32 xStart , int32 unused , int8 column )
{
int controllerAction = PED_FIREWEAPON ;
// GetStartOptionsCntrlConfigScreens();
int numOptions = GetNumOptionsCntrlConfigScreens ( ) ;
int bindingMargin = MENU_X ( 3.0f ) ;
float rowHeight ;
switch ( CMenuManager : : m_ControlMethod ) {
case CONTROL_STANDART :
rowHeight = 10.7f ;
break ;
case CONTROL_CLASSIC :
rowHeight = 9.0f ;
break ;
default :
break ;
}
// MENU_Y(rowHeight * 0.0f + yStart);
for ( int optionIdx = 0 , nextY = MENU_Y ( yStart ) ; optionIdx < numOptions ; nextY = MENU_Y ( + + optionIdx * rowHeight + yStart ) ) {
int nextX = xStart ;
int bindingsForThisOpt = 0 ;
CFont : : SetColor ( CRGBA ( 155 , 155 , 155 , FadeIn ( 255 ) ) ) ;
if ( column = = CONTSETUP_PED_COLUMN ) {
switch ( optionIdx ) {
case 0 :
controllerAction = PED_FIREWEAPON ;
break ;
case 1 :
controllerAction = PED_CYCLE_WEAPON_RIGHT ;
break ;
case 2 :
controllerAction = PED_CYCLE_WEAPON_LEFT ;
break ;
case 3 :
controllerAction = GO_FORWARD ;
break ;
case 4 :
controllerAction = GO_BACK ;
break ;
case 5 :
controllerAction = GO_LEFT ;
break ;
case 6 :
controllerAction = GO_RIGHT ;
break ;
case 7 :
controllerAction = PED_SNIPER_ZOOM_IN ;
break ;
case 8 :
controllerAction = PED_SNIPER_ZOOM_OUT ;
break ;
case 9 :
controllerAction = VEHICLE_ENTER_EXIT ;
break ;
case 10 :
case 11 :
case 12 :
case 16 :
case 18 :
case 19 :
case 20 :
case 21 :
controllerAction = - 1 ;
break ;
case 13 :
controllerAction = CAMERA_CHANGE_VIEW_ALL_SITUATIONS ;
break ;
case 14 :
controllerAction = PED_JUMPING ;
break ;
case 15 :
controllerAction = PED_SPRINT ;
break ;
case 17 :
controllerAction = PED_LOCK_TARGET ;
break ;
case 22 :
controllerAction = PED_LOOKBEHIND ;
break ;
case 23 :
if ( CMenuManager : : m_ControlMethod = = CONTROL_STANDART )
controllerAction = - 1 ;
else
controllerAction = PED_1RST_PERSON_LOOK_LEFT ;
break ;
case 24 :
if ( CMenuManager : : m_ControlMethod = = CONTROL_STANDART )
controllerAction = - 1 ;
else
controllerAction = PED_1RST_PERSON_LOOK_RIGHT ;
break ;
case 25 :
controllerAction = PED_1RST_PERSON_LOOK_UP ;
break ;
case 26 :
controllerAction = PED_1RST_PERSON_LOOK_DOWN ;
break ;
case 27 :
controllerAction = PED_CYCLE_TARGET_LEFT ;
break ;
case 28 :
controllerAction = PED_CYCLE_TARGET_RIGHT ;
break ;
case 29 :
controllerAction = PED_CENTER_CAMERA_BEHIND_PLAYER ;
break ;
default :
break ;
}
} else if ( column = = CONTSETUP_VEHICLE_COLUMN ) {
switch ( optionIdx ) {
case 0 :
controllerAction = PED_FIREWEAPON ;
break ;
case 1 :
case 2 :
case 7 :
case 8 :
case 14 :
case 15 :
case 17 :
case 25 :
case 26 :
case 27 :
case 28 :
case 29 :
controllerAction = - 1 ;
break ;
case 3 :
controllerAction = VEHICLE_ACCELERATE ;
break ;
case 4 :
controllerAction = VEHICLE_BRAKE ;
break ;
case 5 :
controllerAction = GO_LEFT ;
break ;
case 6 :
controllerAction = GO_RIGHT ;
break ;
case 9 :
controllerAction = VEHICLE_ENTER_EXIT ;
break ;
case 10 :
controllerAction = VEHICLE_CHANGE_RADIO_STATION ;
break ;
case 11 :
controllerAction = VEHICLE_HORN ;
break ;
case 12 :
controllerAction = TOGGLE_SUBMISSIONS ;
break ;
case 13 :
controllerAction = CAMERA_CHANGE_VIEW_ALL_SITUATIONS ;
break ;
case 16 :
controllerAction = VEHICLE_HANDBRAKE ;
break ;
case 18 :
controllerAction = VEHICLE_TURRETLEFT ;
break ;
case 19 :
controllerAction = VEHICLE_TURRETRIGHT ;
break ;
case 20 :
controllerAction = VEHICLE_TURRETUP ;
break ;
case 21 :
controllerAction = VEHICLE_TURRETDOWN ;
break ;
case 22 :
controllerAction = - 2 ;
break ;
case 23 :
controllerAction = VEHICLE_LOOKLEFT ;
break ;
case 24 :
controllerAction = VEHICLE_LOOKRIGHT ;
break ;
default :
break ;
}
}
int bindingWhite = 155 ;
// Highlight selected column(and make its text black)
if ( m_nSelectedListRow = = optionIdx ) {
int bgY = m_nSelectedListRow * rowHeight + yStart + 1.0f ;
if ( m_nCurrExLayer = = HOVEROPTION_LIST ) {
if ( column = = CONTSETUP_PED_COLUMN & & m_nSelectedContSetupColumn = = CONTSETUP_PED_COLUMN ) {
# ifdef FIX_BUGS
if ( controllerAction = = - 1 ) {
CSprite2d : : DrawRect ( CRect ( nextX , MENU_Y ( bgY ) , nextX + MENU_X ( 190.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 235 , 170 , 50 , FadeIn ( 150 ) ) ) ;
} else {
CSprite2d : : DrawRect ( CRect ( nextX , MENU_Y ( bgY ) , nextX + MENU_X ( 190.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 255 , 217 , 106 , FadeIn ( 210 ) ) ) ;
}
2019-06-25 02:34:29 +02:00
# else
2020-04-04 13:39:58 +02:00
if ( controllerAction = = - 1 ) {
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( bgY ) , MENU_X_LEFT_ALIGNED ( 400.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 235 , 170 , 50 , FadeIn ( 150 ) ) ) ;
} else {
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( bgY ) , MENU_X_LEFT_ALIGNED ( 400.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 255 , 217 , 106 , FadeIn ( 210 ) ) ) ;
}
# endif
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ;
bindingWhite = 0 ;
2019-06-25 02:34:29 +02:00
2020-04-04 13:39:58 +02:00
} else if ( column = = CONTSETUP_VEHICLE_COLUMN & & m_nSelectedContSetupColumn = = CONTSETUP_VEHICLE_COLUMN ) {
# ifdef FIX_BUGS
if ( controllerAction = = - 1 ) {
CSprite2d : : DrawRect ( CRect ( nextX , MENU_Y ( bgY ) , nextX + MENU_X ( 190.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 235 , 170 , 50 , FadeIn ( 150 ) ) ) ;
} else {
CSprite2d : : DrawRect ( CRect ( nextX , MENU_Y ( bgY ) , nextX + MENU_X ( 190.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 255 , 217 , 106 , FadeIn ( 210 ) ) ) ;
}
# else
if ( controllerAction = = - 1 ) {
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( 410.0f ) , MENU_Y ( bgY ) , MENU_X_LEFT_ALIGNED ( 600.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 235 , 170 , 50 , FadeIn ( 150 ) ) ) ;
} else {
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( 410.0f ) , MENU_Y ( bgY ) , MENU_X_LEFT_ALIGNED ( 600.0f ) , MENU_Y ( bgY + 10 ) ) , CRGBA ( 255 , 217 , 106 , FadeIn ( 210 ) ) ) ;
}
2019-06-25 02:34:29 +02:00
# endif
2020-04-04 13:39:58 +02:00
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ;
bindingWhite = 0 ;
}
}
}
// Print bindings, including seperator (-) between them
CFont : : SetScale ( MENU_X ( 0.25f ) , MENU_Y ( 0.6f ) ) ;
for ( int contSetOrder = SETORDER_1 ; contSetOrder < MAX_SETORDERS & & controllerAction ! = - 1 ; contSetOrder + + ) {
wchar * settingText = ControlsManager . GetControllerSettingTextWithOrderNumber ( ( e_ControllerAction ) controllerAction , ( eContSetOrder ) contSetOrder ) ;
if ( settingText ) {
+ + bindingsForThisOpt ;
if ( bindingsForThisOpt > 1 ) {
wchar * seperator = TheText . Get ( " FEC_IBT " ) ;
CFont : : SetColor ( CRGBA ( 20 , 20 , 20 , FadeIn ( 80 ) ) ) ;
CFont : : PrintString ( nextX , nextY , seperator ) ;
CFont : : SetColor ( CRGBA ( bindingWhite , bindingWhite , bindingWhite , FadeIn ( 255 ) ) ) ;
nextX + = CFont : : GetStringWidth ( seperator , true ) + bindingMargin ;
}
CFont : : PrintString ( nextX , nextY , settingText ) ;
nextX + = CFont : : GetStringWidth ( settingText , true ) + bindingMargin ;
}
}
if ( controllerAction = = - 1 ) {
CFont : : SetColor ( CRGBA ( 20 , 20 , 20 , FadeIn ( 80 ) ) ) ;
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_NUS " ) ) ; // not used
} else if ( controllerAction = = - 2 ) {
CFont : : SetColor ( CRGBA ( 20 , 20 , 20 , FadeIn ( 80 ) ) ) ;
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_CMP " ) ) ; // combo: l+r
} else if ( bindingsForThisOpt = = 0 ) {
if ( m_nSelectedListRow ! = optionIdx ) {
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_UNB " ) ) ; // unbound
} else if ( m_bWaitingForNewKeyBind ) {
if ( column ! = m_nSelectedContSetupColumn ) {
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_UNB " ) ) ; // unbound
}
} else {
if ( column ! = m_nSelectedContSetupColumn ) {
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
}
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_UNB " ) ) ; // unbound
}
}
if ( column = = CONTSETUP_PED_COLUMN & & m_nSelectedContSetupColumn = = CONTSETUP_PED_COLUMN | |
column = = CONTSETUP_VEHICLE_COLUMN & & m_nSelectedContSetupColumn = = CONTSETUP_VEHICLE_COLUMN ) {
if ( optionIdx = = m_nSelectedListRow & & controllerAction ! = - 1 & & controllerAction ! = - 2 ) {
m_CurrCntrlAction = controllerAction ;
if ( m_bWaitingForNewKeyBind ) {
static bool showWaitingText = false ;
if ( bindingsForThisOpt > 0 ) {
wchar * seperator = TheText . Get ( " FEC_IBT " ) ;
CFont : : PrintString ( nextX , nextY , seperator ) ;
nextX + = CFont : : GetStringWidth ( seperator , true ) + bindingMargin ;
}
static uint32 lastWaitingTextFlash = 0 ;
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - lastWaitingTextFlash > 150 ) {
showWaitingText = ! showWaitingText ;
lastWaitingTextFlash = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
}
if ( showWaitingText ) {
CFont : : SetColor ( CRGBA ( 55 , 55 , 55 , FadeIn ( 255 ) ) ) ;
CFont : : PrintString ( nextX , nextY , TheText . Get ( " FEC_QUE " ) ) ; // "???"
}
CFont : : SetCentreOn ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
if ( m_bKeyChangeNotProcessed ) {
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 275.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 114.0f ) , TheText . Get ( " FET_CIG " ) ) ; // BACKSPACE TO CLEAR - LMB,RETURN TO CHANGE
} else {
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 275.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 114.0f ) , TheText . Get ( " FET_RIG " ) ) ; // SELECT A NEW CONTROL FOR THIS ACTION OR ESC TO CANCEL
}
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( 0 ) ;
if ( ! m_bKeyIsOK )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
m_bKeyIsOK = true ;
} else {
CFont : : SetCentreOn ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 275.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 114.0f ) , TheText . Get ( " FET_CIG " ) ) ; // BACKSPACE TO CLEAR - LMB,RETURN TO CHANGE
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
m_bKeyIsOK = false ;
m_bKeyChangeNotProcessed = false ;
}
} else if ( optionIdx = = m_nSelectedListRow ) {
CFont : : SetCentreOn ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetColor ( CRGBA ( 55 , 55 , 55 , FadeIn ( 255 ) ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 275.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 114.0f ) , TheText . Get ( " FET_EIG " ) ) ; // CANNOT SET A CONTROL FOR THIS ACTION
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetScale ( MENU_X ( SMALLESTTEXT_X_SCALE ) , MENU_Y ( SMALLESTTEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
}
}
}
}
2019-06-25 02:34:29 +02:00
# if 1
WRAPPER void CMenuManager : : DrawControllerScreenExtraText ( int , int , int ) { EAXJMP ( 0x4892F0 ) ; }
# else
void CMenuManager : : DrawControllerScreenExtraText ( int , int , int )
{
}
# endif
# if 1
WRAPPER void CMenuManager : : DrawControllerSetupScreen ( ) { EAXJMP ( 0x481210 ) ; }
# else
void CMenuManager : : DrawControllerSetupScreen ( )
{
}
# endif
void CMenuManager : : DrawFrontEnd ( )
{
CFont : : SetAlphaFade ( 255.0f ) ;
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
2019-06-25 14:25:39 +02:00
if ( m_nCurrScreen = = MENUPAGE_NONE ) {
2020-03-17 19:03:13 +01:00
if ( m_bGameNotLoaded ) {
if ( bbTabCount ! = 6 ) {
bbNames [ 0 ] = { " FEB_SAV " , MENUPAGE_NEW_GAME } ;
bbNames [ 1 ] = { " FEB_CON " , MENUPAGE_CONTROLLER_PC } ;
bbNames [ 2 ] = { " FEB_AUD " , MENUPAGE_SOUND_SETTINGS } ;
bbNames [ 3 ] = { " FEB_DIS " , MENUPAGE_GRAPHICS_SETTINGS } ;
bbNames [ 4 ] = { " FEB_LAN " , MENUPAGE_LANGUAGE_SETTINGS } ;
bbNames [ 5 ] = { " FESZ_QU " , MENUPAGE_EXIT } ;
bbTabCount = 6 ;
}
} else {
if ( bbTabCount ! = 8 ) {
bbNames [ 0 ] = { " FEB_STA " , MENUPAGE_STATS } ;
bbNames [ 1 ] = { " FEB_SAV " , MENUPAGE_NEW_GAME } ;
bbNames [ 2 ] = { " FEB_BRI " , MENUPAGE_BRIEFS } ;
bbNames [ 3 ] = { " FEB_CON " , MENUPAGE_CONTROLLER_PC } ;
bbNames [ 4 ] = { " FEB_AUD " , MENUPAGE_SOUND_SETTINGS } ;
bbNames [ 5 ] = { " FEB_DIS " , MENUPAGE_GRAPHICS_SETTINGS } ;
bbNames [ 6 ] = { " FEB_LAN " , MENUPAGE_LANGUAGE_SETTINGS } ;
bbNames [ 7 ] = { " FESZ_QU " , MENUPAGE_EXIT } ;
bbTabCount = 8 ;
}
}
2020-03-25 15:13:06 +01:00
m_nCurrScreen = bbNames [ 0 ] . screenId ;
2020-03-17 19:03:13 +01:00
bottomBarActive = true ;
curBottomBarOption = 0 ;
}
# else
if ( m_nCurrScreen = = MENUPAGE_NONE ) {
if ( m_bGameNotLoaded ) {
2019-06-25 14:25:39 +02:00
m_nCurrScreen = MENUPAGE_START_MENU ;
2020-03-17 19:03:13 +01:00
} else {
2019-06-25 14:25:39 +02:00
m_nCurrScreen = MENUPAGE_PAUSE_MENU ;
2020-03-17 19:03:13 +01:00
}
2019-06-25 02:34:29 +02:00
}
2020-03-17 19:03:13 +01:00
# endif
2019-06-25 02:34:29 +02:00
2019-07-14 12:46:36 +02:00
if ( m_nCurrOption = = 0 & & aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_Action = = MENUACTION_LABEL )
m_nCurrOption = 1 ;
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
# ifdef PS2_SAVE_DIALOG
if ( m_bRenderGameInMenu )
DrawFrontEndSaveZone ( ) ;
else
# endif
DrawFrontEndNormal ( ) ;
PrintErrorMessage ( ) ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
# ifdef PS2_SAVE_DIALOG
void CMenuManager : : DrawFrontEndSaveZone ( )
{
CSprite2d : : InitPerFrame ( ) ;
CFont : : InitPerFrame ( ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERNEAREST ) ;
// Not original dimensions, have been changed to fit PC screen & PC menu layout.
2020-01-10 23:48:05 +01:00
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( 30.0f ) , MENU_Y ( 50.0f ) , MENU_X_RIGHT_ALIGNED ( 30.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 50.0f ) ) , CRGBA ( 0 , 0 , 0 , 175 ) ) ;
2020-01-07 15:23:09 +01:00
m_nMenuFadeAlpha = 255 ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
CMenuManager : : Draw ( ) ;
CFont : : DrawFonts ( ) ;
// Draw mouse
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
if ( m_bShowMouse ) {
RwRenderStateSet ( rwRENDERSTATESRCBLEND , ( void * ) rwBLENDSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEDESTBLEND , ( void * ) rwBLENDINVSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) TRUE ) ;
CRect mouse ( 0.0f , 0.0f , MENU_X ( 75.0f ) , MENU_Y ( 75.0f ) ) ;
CRect shad ( MENU_X ( 10.0f ) , MENU_Y ( 3.0f ) , MENU_X ( 85.0f ) , MENU_Y ( 78.0f ) ) ;
mouse . Translate ( m_nMousePosX , m_nMousePosY ) ;
shad . Translate ( m_nMousePosX , m_nMousePosY ) ;
if ( field_518 = = 4 ) {
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
} else {
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
}
}
}
# endif
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
2019-06-25 02:34:29 +02:00
void CMenuManager : : DrawFrontEndNormal ( )
{
CSprite2d : : InitPerFrame ( ) ;
CFont : : InitPerFrame ( ) ;
2019-11-09 16:17:54 +01:00
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
2019-06-15 01:34:19 +02:00
2020-03-17 19:03:13 +01:00
if ( ! m_bGameNotLoaded ) {
CSprite2d * bg = LoadSplash ( nil ) ;
bg - > Draw ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
} else {
CSprite2d : : DrawRect ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 0 , 0 , 0 , 255 ) ) ;
}
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERNEAREST ) ;
RwRenderStateSet ( rwRENDERSTATEZTESTENABLE , ( void * ) FALSE ) ;
RwRenderStateSet ( rwRENDERSTATEZWRITEENABLE , ( void * ) FALSE ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) TRUE ) ;
m_aFrontEndSprites [ FE2_MAINPANEL_UL ] . Draw ( CRect ( MENU_X_LEFT_ALIGNED ( 0.0f ) , 0.0f , SCREEN_WIDTH / 2 , SCREEN_HEIGHT / 2 ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
m_aFrontEndSprites [ FE2_MAINPANEL_UR ] . Draw ( CRect ( SCREEN_WIDTH / 2 , 0.0f , MENU_X_RIGHT_ALIGNED ( 0.0f ) , SCREEN_HEIGHT / 2 ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
m_aFrontEndSprites [ FE2_MAINPANEL_DL ] . Draw ( CRect ( MENU_X_LEFT_ALIGNED ( 0.0f ) , SCREEN_HEIGHT / 2 , SCREEN_WIDTH / 2 , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
m_aFrontEndSprites [ FE2_MAINPANEL_DR ] . Draw ( CRect ( SCREEN_WIDTH / 2 , SCREEN_HEIGHT / 2 , MENU_X_RIGHT_ALIGNED ( 0.0f ) , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
eFrontendSprites currentSprite ;
switch ( m_nCurrScreen ) {
case MENUPAGE_STATS :
case MENUPAGE_START_MENU :
case MENUPAGE_PAUSE_MENU :
case MENUPAGE_EXIT :
currentSprite = FE_ICONSTATS ;
break ;
case MENUPAGE_LANGUAGE_SETTINGS :
currentSprite = FE_ICONLANGUAGE ;
break ;
case MENUPAGE_CHOOSE_LOAD_SLOT :
case MENUPAGE_CHOOSE_DELETE_SLOT :
case MENUPAGE_NEW_GAME_RELOAD :
case MENUPAGE_LOAD_SLOT_CONFIRM :
case MENUPAGE_DELETE_SLOT_CONFIRM :
currentSprite = FE_ICONSAVE ;
break ;
case MENUPAGE_GRAPHICS_SETTINGS :
currentSprite = FE_ICONDISPLAY ;
break ;
case MENUPAGE_SOUND_SETTINGS :
currentSprite = FE_ICONAUDIO ;
break ;
case MENUPAGE_CONTROLLER_PC :
case MENUPAGE_OPTIONS :
case MENUPAGE_CONTROLLER_SETTINGS :
case MENUPAGE_KEYBOARD_CONTROLS :
case MENUPAGE_MOUSE_CONTROLS :
currentSprite = FE_ICONCONTROLS ;
break ;
default :
2020-03-25 15:13:06 +01:00
/*case MENUPAGE_NEW_GAME: */
2020-03-17 19:03:13 +01:00
/*case MENUPAGE_BRIEFS: */
currentSprite = FE_ICONBRIEF ;
break ;
}
m_aFrontEndSprites [ currentSprite ] . Draw ( CRect ( MENU_X_LEFT_ALIGNED ( 50.0f ) , MENU_Y ( 50.0f ) , MENU_X_RIGHT_ALIGNED ( 50.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 95.0f ) ) , CRGBA ( 255 , 255 , 255 , m_nMenuFadeAlpha > 255 ? 255 : m_nMenuFadeAlpha ) ) ;
2020-03-29 17:26:23 +02:00
static float fadeAlpha = 0.0f ;
static int lastState = 0 ;
// reverseAlpha = PS2 fading (wait for 255->0, then change screen)
2020-03-17 19:03:13 +01:00
if ( m_nMenuFadeAlpha < 255 ) {
2020-03-29 17:26:23 +02:00
if ( lastState = = 1 & & ! reverseAlpha )
fadeAlpha = 0.f ;
2020-03-17 19:03:13 +01:00
if ( m_nMenuFadeAlpha < = 0 & & reverseAlpha ) {
reverseAlpha = false ;
ChangeScreen ( pendingScreen , pendingOption , true , false ) ;
2020-03-25 15:13:06 +01:00
} else {
2020-03-29 17:26:23 +02:00
float timestep = CTimer : : GetCurrentTimeInCycles ( ) / ( float ) CTimer : : GetCyclesPerMillisecond ( ) ;
// +20 per every 33 ms (1000.f/30.f - original frame limiter fps)
2020-03-17 19:03:13 +01:00
if ( ! reverseAlpha )
2020-03-29 17:26:23 +02:00
fadeAlpha + = ( timestep * 100.f ) * 20.f / 33.f ;
2020-03-17 19:03:13 +01:00
else
2020-03-29 17:26:23 +02:00
fadeAlpha = max ( 0.0f , fadeAlpha - ( timestep * 100.f ) * 30.f / 33.f ) ;
2020-03-17 19:03:13 +01:00
2020-03-29 17:26:23 +02:00
m_nMenuFadeAlpha = fadeAlpha ;
2020-03-17 19:03:13 +01:00
}
2020-03-29 17:26:23 +02:00
lastState = 0 ;
2020-03-17 19:03:13 +01:00
} else {
2020-03-29 17:26:23 +02:00
if ( lastState = = 0 ) fadeAlpha = 255.f ;
if ( reverseAlpha ) {
float timestep = CTimer : : GetCurrentTimeInCycles ( ) / ( float ) CTimer : : GetCyclesPerMillisecond ( ) ;
fadeAlpha - = ( timestep * 100.f ) * 30.f / 33.f ;
m_nMenuFadeAlpha = fadeAlpha ;
}
lastState = 1 ;
2020-03-17 19:03:13 +01:00
// TODO: what is this? waiting mouse?
if ( field_518 = = 4 ) {
if ( m_nHoverOption = = HOVEROPTION_3 | | m_nHoverOption = = HOVEROPTION_4 | |
m_nHoverOption = = HOVEROPTION_5 | | m_nHoverOption = = HOVEROPTION_6 | | m_nHoverOption = = HOVEROPTION_7 )
field_518 = 2 ;
else
field_518 = 1 ;
}
}
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERNEAREST ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
switch ( m_nCurrScreen ) {
case MENUPAGE_SKIN_SELECT :
CMenuManager : : DrawPlayerSetupScreen ( ) ;
break ;
case MENUPAGE_KEYBOARD_CONTROLS :
CMenuManager : : DrawControllerSetupScreen ( ) ;
break ;
default :
CMenuManager : : Draw ( ) ;
break ;
}
# define optionWidth MENU_X(66.0f)
# define rawOptionHeight 20.0f
# define optionBottom SCREEN_SCALE_FROM_BOTTOM(20.0f)
# define optionTop SCREEN_SCALE_FROM_BOTTOM(20.0f + rawOptionHeight)
# define leftPadding MENU_X_LEFT_ALIGNED(90.0f)
wchar * str ;
hoveredBottomBarOption = - 1 ;
if ( curBottomBarOption ! = - 1 ) {
2020-04-04 13:39:58 +02:00
// This active tab sprite is needlessly big
2020-03-17 19:03:13 +01:00
m_aFrontEndSprites [ FE2_TABACTIVE ] . Draw ( CRect ( leftPadding - MENU_X ( 2.0f ) + ( optionWidth ) * curBottomBarOption , optionTop ,
leftPadding - MENU_X ( 5.0f ) + optionWidth * ( curBottomBarOption + 2 ) , optionBottom + MENU_Y ( rawOptionHeight - 9.0f ) ) ,
CRGBA ( CRGBA ( 255 , 255 , 255 , 255 ) ) ) ;
2019-07-14 12:46:36 +02:00
2020-03-17 19:03:13 +01:00
for ( int i = 0 ; i < bbTabCount ; i + + ) {
float xStart = leftPadding + optionWidth * i ;
if ( CheckHover ( xStart , xStart + optionWidth , optionTop , optionBottom ) )
hoveredBottomBarOption = i ;
CFont : : SetFontStyle ( FONT_BANK ) ;
CFont : : SetScale ( MENU_X ( 0.35f ) , MENU_Y ( 0.7f ) ) ;
CFont : : SetRightJustifyOff ( ) ;
if ( hoveredBottomBarOption = = i & & hoveredBottomBarOption ! = curBottomBarOption )
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , 255 ) ) ;
else {
if ( bottomBarActive | | curBottomBarOption = = i )
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , 255 ) ) ;
else
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , 110 ) ) ;
}
str = TheText . Get ( bbNames [ i ] . name ) ;
CFont : : PrintString ( xStart + MENU_X ( 4.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 39.0f ) , str ) ;
}
}
# undef optionBottom
# undef optionTop
# undef leftPadding
# undef optionWidth
# undef rawOptionHeight
CFont : : DrawFonts ( ) ;
// Draw mouse
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
if ( m_bShowMouse ) {
RwRenderStateSet ( rwRENDERSTATESRCBLEND , ( void * ) rwBLENDSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEDESTBLEND , ( void * ) rwBLENDINVSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) TRUE ) ;
CRect mouse ( 0.0f , 0.0f , MENU_X ( 75.0f ) , MENU_Y ( 75.0f ) ) ;
CRect shad ( MENU_X ( 10.0f ) , MENU_Y ( 3.0f ) , MENU_X ( 85.0f ) , MENU_Y ( 78.0f ) ) ;
mouse . Translate ( m_nMousePosX , m_nMousePosY ) ;
shad . Translate ( m_nMousePosX , m_nMousePosY ) ;
if ( field_518 = = 4 ) {
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
} else {
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
}
}
}
# else
void CMenuManager : : DrawFrontEndNormal ( )
{
CSprite2d : : InitPerFrame ( ) ;
CFont : : InitPerFrame ( ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
LoadSplash ( nil ) ;
2019-11-09 16:17:54 +01:00
eMenuSprites previousSprite ;
2019-06-25 14:25:39 +02:00
if ( m_nMenuFadeAlpha < 255 ) {
switch ( m_nPrevScreen ) {
2019-11-09 16:17:54 +01:00
case MENUPAGE_STATS :
case MENUPAGE_START_MENU :
case MENUPAGE_PAUSE_MENU :
previousSprite = MENUSPRITE_MAINMENU ;
break ;
case MENUPAGE_NEW_GAME :
case MENUPAGE_CHOOSE_LOAD_SLOT :
case MENUPAGE_CHOOSE_DELETE_SLOT :
case MENUPAGE_NEW_GAME_RELOAD :
case MENUPAGE_LOAD_SLOT_CONFIRM :
case MENUPAGE_DELETE_SLOT_CONFIRM :
case MENUPAGE_EXIT :
previousSprite = MENUSPRITE_SINGLEPLAYER ;
break ;
case MENUPAGE_MULTIPLAYER_MAIN :
previousSprite = MENUSPRITE_MULTIPLAYER ;
break ;
case MENUPAGE_MULTIPLAYER_MAP :
case MENUPAGE_MULTIPLAYER_FIND_GAME :
case MENUPAGE_SKIN_SELECT :
case MENUPAGE_KEYBOARD_CONTROLS :
case MENUPAGE_MOUSE_CONTROLS :
previousSprite = MENUSPRITE_FINDGAME ;
break ;
case MENUPAGE_MULTIPLAYER_CONNECTION :
case MENUPAGE_MULTIPLAYER_MODE :
previousSprite = MENUSPRITE_CONNECTION ;
break ;
case MENUPAGE_MULTIPLAYER_CREATE :
previousSprite = MENUSPRITE_HOSTGAME ;
break ;
case MENUPAGE_SKIN_SELECT_OLD :
case MENUPAGE_OPTIONS :
previousSprite = MENUSPRITE_PLAYERSET ;
break ;
default :
previousSprite = MENUSPRITE_MAINMENU ;
break ;
}
2020-03-17 19:03:13 +01:00
2019-11-09 16:17:54 +01:00
if ( m_nPrevScreen = = m_nCurrScreen )
2020-01-07 15:23:09 +01:00
CSprite2d : : DrawRect ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 0 , 0 , 0 , 255 - m_nMenuFadeAlpha ) ) ;
2019-11-09 16:17:54 +01:00
else
2020-01-07 15:23:09 +01:00
m_aMenuSprites [ previousSprite ] . Draw ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 - m_nMenuFadeAlpha ) ) ;
2019-11-09 16:17:54 +01:00
}
RwRenderStateSet ( rwRENDERSTATEZTESTENABLE , ( void * ) FALSE ) ;
RwRenderStateSet ( rwRENDERSTATEZWRITEENABLE , ( void * ) FALSE ) ;
eMenuSprites currentSprite = MENUSPRITE_MAINMENU ; // actually uninitialized
switch ( m_nCurrScreen ) {
2019-06-25 14:25:39 +02:00
case MENUPAGE_STATS :
case MENUPAGE_START_MENU :
case MENUPAGE_PAUSE_MENU :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_MAINMENU ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_NEW_GAME :
case MENUPAGE_CHOOSE_LOAD_SLOT :
case MENUPAGE_CHOOSE_DELETE_SLOT :
case MENUPAGE_NEW_GAME_RELOAD :
case MENUPAGE_LOAD_SLOT_CONFIRM :
case MENUPAGE_DELETE_SLOT_CONFIRM :
case MENUPAGE_EXIT :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_SINGLEPLAYER ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_MULTIPLAYER_MAIN :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_MULTIPLAYER ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_MULTIPLAYER_MAP :
case MENUPAGE_MULTIPLAYER_FIND_GAME :
case MENUPAGE_SKIN_SELECT :
case MENUPAGE_KEYBOARD_CONTROLS :
case MENUPAGE_MOUSE_CONTROLS :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_FINDGAME ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_MULTIPLAYER_CONNECTION :
case MENUPAGE_MULTIPLAYER_MODE :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_CONNECTION ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_MULTIPLAYER_CREATE :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_HOSTGAME ;
2019-06-25 14:25:39 +02:00
break ;
case MENUPAGE_SKIN_SELECT_OLD :
case MENUPAGE_OPTIONS :
2019-11-09 16:17:54 +01:00
currentSprite = MENUSPRITE_PLAYERSET ;
2019-06-25 14:25:39 +02:00
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
2019-07-14 12:46:36 +02:00
if ( m_nMenuFadeAlpha < 255 ) {
2019-06-25 14:25:39 +02:00
2020-03-29 17:26:23 +02:00
// Famous transparent menu bug
2020-03-25 15:13:06 +01:00
# ifdef FIX_BUGS
2020-03-29 17:26:23 +02:00
static float fadeAlpha = 0.0f ;
if ( m_nMenuFadeAlpha = = 0 & & fadeAlpha > 1.0f ) fadeAlpha = 0.0f ;
float timestep = CTimer : : GetCurrentTimeInCycles ( ) / ( float ) CTimer : : GetCyclesPerMillisecond ( ) ;
// +20 per every 33 ms (1000.f/30.f - original frame limiter fps)
fadeAlpha + = ( timestep * 100.f ) * 20.f / 33.f ;
m_nMenuFadeAlpha = fadeAlpha ;
2020-03-25 15:13:06 +01:00
# else
2020-03-29 17:26:23 +02:00
static uint32 LastFade = 0 ;
2019-07-14 12:46:36 +02:00
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - LastFade > 10 ) {
m_nMenuFadeAlpha + = 20 ;
LastFade = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2019-06-25 14:25:39 +02:00
}
2020-03-25 15:13:06 +01:00
# endif
2020-03-17 19:03:13 +01:00
2019-07-14 12:46:36 +02:00
if ( m_nMenuFadeAlpha > 255 ) {
2019-07-03 17:26:15 +02:00
m_aMenuSprites [ currentSprite ] . Draw ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
2020-03-17 19:03:13 +01:00
} else {
2019-07-14 12:46:36 +02:00
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) TRUE ) ;
2020-01-07 15:23:09 +01:00
m_aMenuSprites [ currentSprite ] . Draw ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , m_nMenuFadeAlpha ) ) ;
2019-07-14 12:46:36 +02:00
}
2020-03-17 19:03:13 +01:00
} else {
2019-07-14 12:46:36 +02:00
m_aMenuSprites [ currentSprite ] . Draw ( CRect ( 0.0f , 0.0f , SCREEN_WIDTH , SCREEN_HEIGHT ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
// TODO: what is this? waiting mouse?
if ( field_518 = = 4 ) {
2019-11-09 16:17:54 +01:00
if ( m_nHoverOption = = HOVEROPTION_3 | | m_nHoverOption = = HOVEROPTION_4 | |
m_nHoverOption = = HOVEROPTION_5 | | m_nHoverOption = = HOVEROPTION_6 | | m_nHoverOption = = HOVEROPTION_7 )
2019-07-14 12:46:36 +02:00
field_518 = 2 ;
else
field_518 = 1 ;
}
2019-06-25 02:34:29 +02:00
}
// GTA LOGO
2019-07-14 12:46:36 +02:00
RwRenderStateSet ( rwRENDERSTATESRCBLEND , ( void * ) rwBLENDSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEDESTBLEND , ( void * ) rwBLENDINVSRCALPHA ) ;
2019-06-25 14:25:39 +02:00
if ( m_nCurrScreen = = MENUPAGE_START_MENU | | m_nCurrScreen = = MENUPAGE_PAUSE_MENU ) {
2019-06-25 02:34:29 +02:00
if ( CGame : : frenchGame | | CGame : : germanGame | | ! CGame : : nastyGame )
2020-01-07 15:23:09 +01:00
m_aMenuSprites [ MENUSPRITE_GTA3LOGO ] . Draw ( CRect ( MENU_X_LEFT_ALIGNED ( 205.0f ) , MENU_Y ( 70.0f ) , MENU_X_LEFT_ALIGNED ( 435.0f ) , MENU_Y ( 180.0f ) ) , CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
2019-06-25 02:34:29 +02:00
else
2020-01-07 15:23:09 +01:00
m_aMenuSprites [ MENUSPRITE_GTALOGO ] . Draw ( CRect ( MENU_X_LEFT_ALIGNED ( 225.0f ) , MENU_Y ( 40.0f ) , MENU_X_LEFT_ALIGNED ( 415.0f ) , MENU_Y ( 210.0f ) ) , CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
2019-06-25 02:34:29 +02:00
}
2019-07-14 12:46:36 +02:00
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERNEAREST ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
2019-06-25 02:34:29 +02:00
switch ( m_nCurrScreen ) {
2019-11-09 16:17:54 +01:00
case MENUPAGE_SKIN_SELECT :
CMenuManager : : DrawPlayerSetupScreen ( ) ;
break ;
case MENUPAGE_KEYBOARD_CONTROLS :
CMenuManager : : DrawControllerSetupScreen ( ) ;
break ;
default :
CMenuManager : : Draw ( ) ;
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
CFont : : DrawFonts ( ) ;
// Draw mouse
2019-07-14 12:46:36 +02:00
RwRenderStateSet ( rwRENDERSTATETEXTUREFILTER , ( void * ) rwFILTERLINEAR ) ;
RwRenderStateSet ( rwRENDERSTATETEXTUREADDRESS , ( void * ) rwTEXTUREADDRESSCLAMP ) ;
if ( m_bShowMouse ) {
RwRenderStateSet ( rwRENDERSTATESRCBLEND , ( void * ) rwBLENDSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEDESTBLEND , ( void * ) rwBLENDINVSRCALPHA ) ;
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) TRUE ) ;
2019-11-09 16:17:54 +01:00
CRect mouse ( 0.0f , 0.0f , MENU_X ( 75.0f ) , MENU_Y ( 75.0f ) ) ;
CRect shad ( MENU_X ( 10.0f ) , MENU_Y ( 3.0f ) , MENU_X ( 85.0f ) , MENU_Y ( 78.0f ) ) ;
2019-07-14 12:46:36 +02:00
mouse . Translate ( m_nMousePosX , m_nMousePosY ) ;
2019-11-09 16:17:54 +01:00
shad . Translate ( m_nMousePosX , m_nMousePosY ) ;
2019-07-14 12:46:36 +02:00
if ( field_518 = = 4 ) {
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
2019-11-09 16:17:54 +01:00
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
2019-07-14 12:46:36 +02:00
m_aMenuSprites [ MENUSPRITE_MOUSET ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
} else {
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( shad , CRGBA ( 100 , 100 , 100 , 50 ) ) ;
2019-11-09 16:17:54 +01:00
RwRenderStateSet ( rwRENDERSTATEVERTEXALPHAENABLE , ( void * ) FALSE ) ;
2019-07-14 12:46:36 +02:00
m_aMenuSprites [ MENUSPRITE_MOUSE ] . Draw ( mouse , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
}
}
2019-06-25 02:34:29 +02:00
}
2020-03-17 19:03:13 +01:00
# endif
2019-06-25 02:34:29 +02:00
2020-04-04 13:39:58 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : DrawPlayerSetupScreen ( ) { EAXJMP ( 0x47F2B0 ) ; }
# else
void CMenuManager : : DrawPlayerSetupScreen ( )
{
2020-04-04 13:39:58 +02:00
CFont : : SetBackgroundOff ( ) ;
CFont : : SetScale ( MENU_X ( MENUACTION_SCALE_MULT ) , MENU_Y ( MENUACTION_SCALE_MULT ) ) ;
CFont : : SetPropOn ( ) ;
CFont : : SetCentreOff ( ) ;
CFont : : SetJustifyOn ( ) ;
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetBackGroundOnlyTextOn ( ) ;
CFont : : SetWrapx ( MENU_X_RIGHT_ALIGNED ( MENUACTION_X_MARGIN ) ) ;
CFont : : SetRightJustifyWrap ( SCREEN_SCALE_X ( MENUACTION_WIDTH ) ) ;
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ;
CFont : : SetScale ( MENU_X ( MENUHEADER_WIDTH ) , MENU_Y ( MENUHEADER_HEIGHT ) ) ;
CFont : : SetRightJustifyOn ( ) ;
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : PrintString ( SCREEN_SCALE_FROM_RIGHT ( MENUHEADER_POS_X ) , SCREEN_SCALE_FROM_BOTTOM ( MENUHEADER_POS_Y ) , TheText . Get ( " FET_PS " ) ) ;
// lstrcpy's changed with strcpy
if ( ! m_bSkinsEnumerated ) {
OutputDebugString ( " Enumerating skin filenames from skins... " ) ;
m_pSkinListHead . nextSkin = nil ;
m_pSelectedSkin = & m_pSkinListHead ;
m_pSelectedSkin - > nextSkin = new tSkinInfo ;
m_pSelectedSkin = m_pSelectedSkin - > nextSkin ;
m_pSelectedSkin - > skinId = 0 ;
strcpy ( m_pSelectedSkin - > skinNameOriginal , " $$ \" \" " ) ;
strcpy ( m_pSelectedSkin - > skinNameDisplayed , UnicodeToAscii ( TheText . Get ( " FET_DSN " ) ) ) ;
int nextSkinId = 1 ;
m_pSelectedSkin - > nextSkin = nil ;
WIN32_FIND_DATA FindFileData ;
SYSTEMTIME SystemTime ;
HANDLE handle = FindFirstFile ( " skins \\ *.bmp " , & FindFileData ) ;
for ( int i = 1 ; handle ! = INVALID_HANDLE_VALUE & & i ; i = FindNextFile ( handle , & FindFileData ) ) {
if ( strncmp ( FindFileData . cFileName , " $$ \" \" " , 5 ) ! = 0 ) {
m_pSelectedSkin - > nextSkin = new tSkinInfo ;
m_pSelectedSkin = m_pSelectedSkin - > nextSkin ;
m_pSelectedSkin - > skinId = nextSkinId ;
strcpy ( m_pSelectedSkin - > skinNameOriginal , FindFileData . cFileName ) ;
strcpy ( m_pSelectedSkin - > skinNameDisplayed , FindFileData . cFileName ) ;
FileTimeToSystemTime ( & FindFileData . ftLastWriteTime , & SystemTime ) ;
GetDateFormat ( LOCALE_USER_DEFAULT , DATE_SHORTDATE , & SystemTime , 0 , m_pSelectedSkin - > date , 255 ) ;
+ + nextSkinId ;
m_pSelectedSkin - > nextSkin = nil ;
}
}
FindClose ( handle ) ;
m_nSkinsTotal = nextSkinId ;
char nameTemp [ 256 ] ;
for ( m_pSelectedSkin = m_pSkinListHead . nextSkin ; m_pSelectedSkin ; m_pSelectedSkin = m_pSelectedSkin - > nextSkin ) {
// Drop extension
int oldLength = strlen ( m_pSelectedSkin - > skinNameDisplayed ) ;
m_pSelectedSkin - > skinNameDisplayed [ oldLength - 4 ] = ' \0 ' ;
m_pSelectedSkin - > skinNameOriginal [ oldLength - 4 ] = ' \0 ' ;
// Truncate to 40 bytes-39 chars, idk why. This is done in sepearate function in game.
strncpy ( m_pSelectedSkin - > skinNameDisplayed , m_pSelectedSkin - > skinNameDisplayed , 39 ) ;
if ( oldLength - 4 > 39 )
m_pSelectedSkin - > skinNameDisplayed [ 39 ] = ' \0 ' ;
// Make string lowercase, except first letter
strlwr ( m_pSelectedSkin - > skinNameDisplayed ) ;
strncpy ( nameTemp , m_pSelectedSkin - > skinNameDisplayed , 1 ) ;
strupr ( nameTemp ) ;
strncpy ( m_pSelectedSkin - > skinNameDisplayed , nameTemp , 1 ) ;
// Change some chars
# ifdef FIX_BUGS
for ( int k = 0 ; m_pSelectedSkin - > skinNameDisplayed [ k ] ! = ' \0 ' ; + + k ) {
# else
for ( int k = 0 ; m_pSelectedSkin - > skinNameOriginal [ k ] ! = ' \0 ' ; + + k ) {
# endif
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " _ " , 1 ) )
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " " , 1 ) ;
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " @ " , 1 ) )
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " " , 1 ) ;
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " { " , 1 ) )
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " ( " , 1 ) ;
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " } " , 1 ) )
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " ) " , 1 ) ;
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " <EFBFBD> " , 1 ) )
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ k ] , " $ " , 1 ) ;
}
// Make letters after whitespace uppercase
for ( int l = 0 ; m_pSelectedSkin - > skinNameDisplayed [ l ] ! = ' \0 ' ; + + l ) {
if ( ! strncmp ( & m_pSelectedSkin - > skinNameDisplayed [ l ] , " " , 1 ) ) {
if ( m_pSelectedSkin - > skinNameDisplayed [ l + 1 ] ) {
strncpy ( nameTemp , & m_pSelectedSkin - > skinNameDisplayed [ l + 1 ] , 1 ) ;
strupr ( nameTemp ) ;
strncpy ( & m_pSelectedSkin - > skinNameDisplayed [ l + 1 ] , nameTemp , 1 ) ;
}
}
}
}
OutputDebugString ( " Finished enumerating skin files. " ) ;
m_bSkinsEnumerated = true ;
}
CSprite2d : : DrawRect ( CRect ( MENU_X_LEFT_ALIGNED ( PLAYERSETUP_LIST_LEFT ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM ) ) , CRGBA ( 200 , 200 , 50 , FadeIn ( 50 ) ) ) ;
// Header (Skin - Date)
if ( m_nCurrExLayer = = HOVEROPTION_LIST ) {
CFont : : SetColor ( CRGBA ( 255 , 217 , 106 , FadeIn ( 255 ) ) ) ;
} else {
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
}
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetScale ( MENU_X ( MENUACTION_SCALE_MULT ) , MENU_Y ( MENUACTION_SCALE_MULT ) ) ;
CFont : : SetRightJustifyOn ( ) ;
CFont : : PrintString ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_DATE_COLUMN_RIGHT ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) , TheText . Get ( " FES_DAT " ) ) ;
switch ( CMenuManager : : m_PrefsLanguage ) {
case LANGUAGE_FRENCH :
case LANGUAGE_SPANISH :
CFont : : SetScale ( MENU_X ( 0.6f ) , MENU_Y ( MENUACTION_SCALE_MULT ) ) ;
break ;
default :
CFont : : SetScale ( MENU_X ( MENUACTION_SCALE_MULT ) , MENU_Y ( MENUACTION_SCALE_MULT ) ) ;
break ;
}
CFont : : SetRightJustifyOff ( ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( PLAYERSETUP_SKIN_COLUMN_LEFT ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) , TheText . Get ( " FES_SKN " ) ) ;
// Skin list
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetScale ( MENU_X ( PLAYERSETUP_ROW_TEXT_X_SCALE ) , MENU_Y ( PLAYERSETUP_ROW_TEXT_Y_SCALE ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
if ( m_nSkinsTotal > 0 ) {
for ( m_pSelectedSkin = m_pSkinListHead . nextSkin ; m_pSelectedSkin - > skinId ! = m_nFirstVisibleRowOnList ;
m_pSelectedSkin = m_pSelectedSkin - > nextSkin ) ;
int rowTextY = PLAYERSETUP_LIST_BODY_TOP - 1 ;
int orderInVisibles = 0 ;
int rowEndY = PLAYERSETUP_LIST_BODY_TOP + PLAYERSETUP_ROW_HEIGHT + 1 ;
int rowStartY = PLAYERSETUP_LIST_BODY_TOP ;
for ( int rowIdx = m_nFirstVisibleRowOnList ;
rowIdx < m_nFirstVisibleRowOnList + MAX_VISIBLE_LIST_ROW & & m_pSelectedSkin ; ) {
if ( m_nMousePosX > MENU_X_LEFT_ALIGNED ( PLAYERSETUP_LIST_LEFT ) & & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT ) ) {
if ( m_nMousePosY > MENU_Y ( rowStartY ) & & m_nMousePosY < MENU_Y ( rowEndY ) ) {
m_nPrevOption = rowIdx ;
if ( m_nMouseOldPosX ! = m_nMousePosX | | m_nMouseOldPosY ! = m_nMousePosY ) {
m_nCurrExLayer = HOVEROPTION_LIST ;
}
if ( m_nHoverOption = = HOVEROPTION_SKIN ) {
if ( rowIdx = = m_nSelectedListRow ) {
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
if ( m_nSkinsTotal > 0 ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
strcpy ( m_PrefsSkinFile , m_aSkinName ) ;
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
SaveSettings ( ) ;
}
} else {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_nCurrExLayer = HOVEROPTION_LIST ;
m_nSelectedListRow = rowIdx ;
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
}
}
}
}
// Preview skin/change color of row when we focused on another row.
if ( orderInVisibles = = m_nSelectedListRow - m_nFirstVisibleRowOnList ) {
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
static int lastSelectedSkin = - 1 ;
if ( m_nSelectedListRow ! = lastSelectedSkin ) {
strcpy ( m_aSkinName , m_pSelectedSkin - > skinNameOriginal ) ;
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_aSkinName ) ;
}
lastSelectedSkin = m_nSelectedListRow ;
} else if ( ! strcmp ( m_PrefsSkinFile , m_pSelectedSkin - > skinNameOriginal ) ) {
CFont : : SetColor ( CRGBA ( 255 , 255 , 155 , FadeIn ( 255 ) ) ) ;
} else {
CFont : : SetColor ( CRGBA ( 155 , 155 , 155 , FadeIn ( 255 ) ) ) ;
}
wchar unicodeTemp [ 80 ] ;
AsciiToUnicode ( m_pSelectedSkin - > skinNameDisplayed , unicodeTemp ) ;
CFont : : SetRightJustifyOff ( ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( PLAYERSETUP_SKIN_COLUMN_LEFT ) , MENU_Y ( rowTextY ) , unicodeTemp ) ;
// If not "Default skin" option
if ( rowIdx ! = 0 ) {
char dateTemp [ 32 ] ;
sprintf ( dateTemp , " %s " , m_pSelectedSkin - > date ) ;
AsciiToUnicode ( dateTemp , unicodeTemp ) ;
CFont : : SetRightJustifyOn ( ) ;
CFont : : PrintString ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_DATE_COLUMN_RIGHT ) , MENU_Y ( rowTextY ) , unicodeTemp ) ;
}
+ + orderInVisibles ;
rowEndY + = PLAYERSETUP_ROW_HEIGHT ;
rowStartY + = PLAYERSETUP_ROW_HEIGHT ;
rowTextY + = PLAYERSETUP_ROW_HEIGHT ;
+ + rowIdx ;
m_pSelectedSkin = m_pSelectedSkin - > nextSkin ;
}
// Scrollbar background
CSprite2d : : DrawRect ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 - PLAYERSETUP_SCROLLBAR_WIDTH ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM ) ) , CRGBA ( 100 , 100 , 66 , FadeIn ( 205 ) ) ) ;
// Scrollbar
float scrollbarHeight = SCROLLBAR_MAX_HEIGHT / m_nSkinsTotal * ( float ) MAX_VISIBLE_LIST_ROW ;
float scrollbarBottom , scrollbarTop ;
if ( m_nSkinsTotal < = MAX_VISIBLE_LIST_ROW ) {
scrollbarBottom = SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 4.0f ) ;
scrollbarTop = MENU_Y ( PLAYERSETUP_LIST_BODY_TOP ) ;
// Shadow
CSprite2d : : DrawRect ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 4 ) , scrollbarTop ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 1 - PLAYERSETUP_SCROLLBAR_WIDTH ) , scrollbarBottom + MENU_Y ( 1.0f ) ) , CRGBA ( 50 , 50 , 50 , FadeIn ( 255 ) ) ) ;
} else {
# ifdef FIX_BUGS
scrollbarBottom = MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 8 + m_nScrollbarTopMargin + scrollbarHeight ) ;
scrollbarTop = MENU_Y ( PLAYERSETUP_LIST_BODY_TOP + m_nScrollbarTopMargin ) ;
# else
scrollbarBottom = MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 4 + m_nScrollbarTopMargin + scrollbarHeight - SCROLLBAR_MAX_HEIGHT / m_nSkinsTotal ) ;
scrollbarTop = MENU_Y ( SCROLLBAR_MAX_HEIGHT / m_nSkinsTotal + PLAYERSETUP_LIST_BODY_TOP - 3 + m_nScrollbarTopMargin ) ;
# endif
// Shadow
CSprite2d : : DrawRect ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 4 ) , scrollbarTop ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 1 - PLAYERSETUP_SCROLLBAR_WIDTH ) , scrollbarBottom + MENU_Y ( 1.0f ) ) ,
CRGBA ( 50 , 50 , 50 , FadeIn ( 255 ) ) ) ;
}
CSprite2d : : DrawRect ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 4 ) , scrollbarTop ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH ) , scrollbarBottom ) ,
CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
// FIX: Scroll button dimensions are buggy, because:
// 1 - stretches the original image
// 2 - leaves gap between button and scrollbar
if ( m_nHoverOption = = HOVEROPTION_CLICKED_SCROLL_UP ) {
# ifdef FIX_BUGS
m_aMenuSprites [ MENUSPRITE_UPON ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) , MENU_Y ( PLAYERSETUP_LIST_TOP + PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# else
m_aMenuSprites [ MENUSPRITE_UPON ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( - 20.0f ) , MENU_Y ( PLAYERSETUP_LIST_TOP + 58 ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# endif
} else {
# ifdef FIX_BUGS
m_aMenuSprites [ MENUSPRITE_UPOFF ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) , MENU_Y ( PLAYERSETUP_LIST_TOP + PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# else
m_aMenuSprites [ MENUSPRITE_UPOFF ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 ) , MENU_Y ( PLAYERSETUP_LIST_TOP ) ,
MENU_X_RIGHT_ALIGNED ( - 21.0f ) , MENU_Y ( PLAYERSETUP_LIST_TOP + 58 ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# endif
}
if ( m_nHoverOption = = HOVEROPTION_CLICKED_SCROLL_DOWN ) {
# ifdef FIX_BUGS
m_aMenuSprites [ MENUSPRITE_DOWNON ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# else
m_aMenuSprites [ MENUSPRITE_DOWNON ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 ) , SCREEN_SCALE_FROM_BOTTOM ( 141.0f ) ,
MENU_X_RIGHT_ALIGNED ( - 20.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 83.0f ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# endif
} else {
# ifdef FIX_BUGS
m_aMenuSprites [ MENUSPRITE_DOWNOFF ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 ) ,
MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 - PLAYERSETUP_SCROLLBUTTON_TXD_DIMENSION ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# else
m_aMenuSprites [ MENUSPRITE_DOWNOFF ] . Draw ( CRect ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 ) , SCREEN_SCALE_FROM_BOTTOM ( 141.0f ) ,
MENU_X_RIGHT_ALIGNED ( - 21.0f ) , SCREEN_SCALE_FROM_BOTTOM ( 83.0f ) ) ,
CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ;
# endif
}
CPlayerSkin : : RenderFrontendSkinEdit ( ) ;
// Big apply button
if ( strcmp ( m_aSkinName , m_PrefsSkinFile ) ! = 0 ) {
CFont : : SetFontStyle ( FONT_HEADING ) ;
switch ( CMenuManager : : m_PrefsLanguage ) {
case LANGUAGE_FRENCH :
CFont : : SetScale ( MENU_X ( 1.1f ) , MENU_Y ( 1.9f ) ) ;
break ;
case LANGUAGE_GERMAN :
CFont : : SetScale ( MENU_X ( 0.85f ) , MENU_Y ( 1.9f ) ) ;
break ;
case LANGUAGE_ITALIAN :
case LANGUAGE_SPANISH :
CFont : : SetScale ( MENU_X ( 1.4f ) , MENU_Y ( 1.9f ) ) ;
break ;
default :
CFont : : SetScale ( MENU_X ( 1.9f ) , MENU_Y ( 1.9f ) ) ;
break ;
}
CFont : : SetColor ( CRGBA ( 255 , 217 , 106 , FadeIn ( 120 ) ) ) ;
CFont : : SetRightJustifyOff ( ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 20.0f ) , MENU_Y ( 220.0f ) , TheText . Get ( " FET_APL " ) ) ;
}
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetScale ( MENU_X ( SMALLTEXT_X_SCALE ) , MENU_Y ( SMALLTEXT_Y_SCALE ) ) ;
if ( ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 1 ) - CFont : : GetStringWidth ( TheText . Get ( " FEDS_TB " ) , true )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 1 )
& & m_nMousePosY > SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 3 )
& & m_nMousePosY < SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 26 ) )
| | m_nCurrExLayer = = HOVEROPTION_BACK ) {
if ( m_nHoverOption ! = HOVEROPTION_BACK )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_nHoverOption = HOVEROPTION_BACK ;
} else if ( ( strcmp ( m_aSkinName , m_PrefsSkinFile ) ! = 0
& & m_nMousePosX > MENU_X_LEFT_ALIGNED ( PLAYERSETUP_LIST_LEFT )
& & m_nMousePosX < MENU_X_LEFT_ALIGNED ( PLAYERSETUP_LIST_LEFT ) + CFont : : GetStringWidth ( TheText . Get ( " FES_SET " ) , true )
& & m_nMousePosY > SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 3 )
& & m_nMousePosY < SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 26 ) )
| | m_nCurrExLayer = = HOVEROPTION_USESKIN ) {
if ( m_nHoverOption ! = HOVEROPTION_USESKIN )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_nHoverOption = HOVEROPTION_USESKIN ;
} else if ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH - 2 )
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_TOP )
& & m_nMousePosY < MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 3 ) ) {
if ( m_nHoverOption ! = HOVEROPTION_CLICKED_SCROLL_UP & & m_nHoverOption ! = HOVEROPTION_CLICKED_SCROLL_DOWN )
m_nHoverOption = HOVEROPTION_OVER_SCROLL_UP ;
} else if ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH - 2 )
& & m_nMousePosY > SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 )
& & m_nMousePosY < SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM ) ) {
if ( m_nHoverOption ! = HOVEROPTION_CLICKED_SCROLL_UP & & m_nHoverOption ! = HOVEROPTION_CLICKED_SCROLL_DOWN )
m_nHoverOption = HOVEROPTION_OVER_SCROLL_DOWN ;
} else if ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH - 2 )
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 3 )
# ifdef FIX_BUGS
& & m_nMousePosY < MENU_Y ( PLAYERSETUP_LIST_BODY_TOP + m_nScrollbarTopMargin ) ) {
# else
& & m_nMousePosY < MENU_Y ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow + PLAYERSETUP_LIST_BODY_TOP - 3 + m_nScrollbarTopMargin ) ) {
# endif
m_nHoverOption = HOVEROPTION_PAGEUP ;
} else if ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 2 )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH - 2 )
# ifdef FIX_BUGS
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 8 + m_nScrollbarTopMargin + scrollbarHeight )
# else
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 3 + m_nScrollbarTopMargin + scrollbarHeight - SCROLLBAR_MAX_HEIGHT / m_nTotalListRow )
# endif
& & m_nMousePosY < SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM + PLAYERSETUP_SCROLLBUTTON_HEIGHT + 1 ) ) {
m_nHoverOption = HOVEROPTION_PAGEDOWN ;
} else if ( m_nMousePosX > MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 4 )
& & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - PLAYERSETUP_SCROLLBAR_WIDTH )
# ifdef FIX_BUGS
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_BODY_TOP + m_nScrollbarTopMargin )
& & m_nMousePosY < MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 8 + m_nScrollbarTopMargin + scrollbarHeight ) ) {
# else
& & m_nMousePosY > MENU_Y ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow + PLAYERSETUP_LIST_BODY_TOP - 3 + m_nScrollbarTopMargin )
& & m_nMousePosY < MENU_Y ( PLAYERSETUP_LIST_BODY_TOP - 3 + m_nScrollbarTopMargin + scrollbarHeight - SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ) ) {
# endif
m_nHoverOption = HOVEROPTION_HOLDING_SCROLLBAR ;
} else if ( m_nMousePosX > MENU_X_LEFT_ALIGNED ( PLAYERSETUP_LIST_LEFT ) & & m_nMousePosX < MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT )
& & m_nMousePosY > MENU_Y ( PLAYERSETUP_LIST_BODY_TOP + 1 ) & & m_nMousePosY < SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM ) ) {
m_nHoverOption = HOVEROPTION_LIST ;
} else {
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
}
}
CFont : : SetFontStyle ( FONT_HEADING ) ;
CFont : : SetScale ( MENU_X ( SMALLTEXT_X_SCALE ) , MENU_Y ( SMALLTEXT_Y_SCALE ) ) ;
CFont : : SetRightJustifyOn ( ) ;
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 90 ) ) ) ;
// Back button
for ( int i = 0 ; i < 2 ; i + + ) {
CFont : : PrintString ( MENU_X_RIGHT_ALIGNED ( PLAYERSETUP_LIST_RIGHT - 3 - i ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 5 - i ) , TheText . Get ( " FEDS_TB " ) ) ;
if ( m_nHoverOption = = HOVEROPTION_BACK ) {
CFont : : SetColor ( CRGBA ( 255 , 217 , 106 , FadeIn ( 255 ) ) ) ;
} else {
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
}
}
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 90 ) ) ) ;
// Use skin button
for ( int i = 0 ; i < 2 ; i + + ) {
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( i + PLAYERSETUP_LIST_LEFT ) , SCREEN_SCALE_FROM_BOTTOM ( PLAYERSETUP_LIST_BOTTOM - 5 - i ) , TheText . Get ( " FES_SET " ) ) ;
if ( ! strcmp ( m_aSkinName , m_PrefsSkinFile ) ) {
CFont : : SetColor ( CRGBA ( 155 , 117 , 6 , FadeIn ( 255 ) ) ) ;
} else if ( m_nHoverOption = = HOVEROPTION_USESKIN ) {
CFont : : SetColor ( CRGBA ( 255 , 217 , 106 , FadeIn ( 255 ) ) ) ;
} else {
CFont : : SetColor ( CRGBA ( 235 , 170 , 50 , FadeIn ( 255 ) ) ) ;
}
}
2019-06-25 02:34:29 +02:00
}
# endif
2019-07-14 12:46:36 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER int CMenuManager : : FadeIn ( int alpha ) { EAXJMP ( 0x48AC60 ) ; }
# else
int CMenuManager : : FadeIn ( int alpha )
{
2019-06-25 14:25:39 +02:00
if ( m_nCurrScreen = = MENUPAGE_LOADING_IN_PROGRESS | |
m_nCurrScreen = = MENUPAGE_SAVING_IN_PROGRESS | |
m_nCurrScreen = = MENUPAGE_DELETING )
2019-06-15 01:34:19 +02:00
return alpha ;
2020-03-17 19:03:13 +01:00
2019-08-27 20:50:59 +02:00
return min ( m_nMenuFadeAlpha , alpha ) ;
2019-06-15 01:34:19 +02:00
}
2019-06-25 02:34:29 +02:00
# endif
# if 1
WRAPPER void CMenuManager : : FilterOutColorMarkersFromString ( uint16 , CRGBA & ) { EAXJMP ( 0x4889C0 ) ; }
# else
void CMenuManager : : FilterOutColorMarkersFromString ( uint16 , CRGBA & )
{
}
# endif
# if 1
WRAPPER int CMenuManager : : GetStartOptionsCntrlConfigScreens ( ) { EAXJMP ( 0x489270 ) ; }
# else
int CMenuManager : : GetStartOptionsCntrlConfigScreens ( )
{
}
# endif
void CMenuManager : : InitialiseChangedLanguageSettings ( )
{
2019-07-03 17:26:15 +02:00
if ( m_bFrontEnd_ReloadObrTxtGxt ) {
m_bFrontEnd_ReloadObrTxtGxt = false ;
CTimer : : Stop ( ) ;
TheText . Unload ( ) ;
TheText . Load ( ) ;
CTimer : : Update ( ) ;
CGame : : frenchGame = false ;
CGame : : germanGame = false ;
2020-03-29 08:35:13 +02:00
# ifdef MORE_LANGUAGES
switch ( CMenuManager : : m_PrefsLanguage ) {
case LANGUAGE_RUSSIAN :
CFont : : ReloadFonts ( FONT_LANGSET_RUSSIAN ) ;
break ;
default :
CFont : : ReloadFonts ( FONT_LANGSET_EFIGS ) ;
break ;
}
# endif
2019-07-03 17:26:15 +02:00
switch ( CMenuManager : : m_PrefsLanguage ) {
case LANGUAGE_FRENCH :
CGame : : frenchGame = true ;
break ;
case LANGUAGE_GERMAN :
CGame : : germanGame = true ;
break ;
2020-03-29 08:35:13 +02:00
# ifdef MORE_LANGUAGES
case LANGUAGE_RUSSIAN :
CGame : : russianGame = true ;
break ;
# endif
2019-07-03 17:26:15 +02:00
default :
break ;
2019-07-10 13:42:48 +02:00
}
2019-07-03 17:26:15 +02:00
}
2019-06-25 02:34:29 +02:00
}
void CMenuManager : : LoadAllTextures ( )
{
2019-11-09 16:17:54 +01:00
if ( m_bSpritesLoaded )
return ;
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
CMenuManager : : CentreMousePointer ( ) ;
DMAudio . ChangeMusicMode ( MUSICMODE_FRONTEND ) ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_STARTING , 0 ) ;
m_nCurrOption = 0 ;
m_PrefsRadioStation = DMAudio . GetRadioInCar ( ) ;
if ( DMAudio . IsMP3RadioChannelAvailable ( ) ) {
if ( CMenuManager : : m_PrefsRadioStation > USERTRACK )
CMenuManager : : m_PrefsRadioStation = CGeneral : : GetRandomNumber ( ) % 10 ;
} else if ( CMenuManager : : m_PrefsRadioStation > CHATTERBOX )
CMenuManager : : m_PrefsRadioStation = CGeneral : : GetRandomNumber ( ) % 9 ;
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
CFileMgr : : SetDir ( " " ) ;
//CFileMgr::SetDir("");
CTimer : : Stop ( ) ;
CStreaming : : MakeSpaceFor ( 350 * CDSTREAM_SECTOR_SIZE ) ; // twice of it in mobile
CStreaming : : ImGonnaUseStreamingMemory ( ) ;
CGame : : TidyUpMemory ( false , true ) ;
CTxdStore : : PushCurrentTxd ( ) ;
int frontendTxdSlot = CTxdStore : : FindTxdSlot ( " frontend " ) ;
if ( frontendTxdSlot = = - 1 )
frontendTxdSlot = CTxdStore : : AddTxdSlot ( " frontend " ) ;
printf ( " LOAD frontend \n " ) ;
CTxdStore : : LoadTxd ( frontendTxdSlot , " MODELS/FRONTEND.TXD " ) ;
CTxdStore : : AddRef ( frontendTxdSlot ) ;
CTxdStore : : SetCurrentTxd ( frontendTxdSlot ) ;
CStreaming : : IHaveUsedStreamingMemory ( ) ;
CTimer : : Update ( ) ;
for ( int i = 0 ; i < ARRAY_SIZE ( FrontendFilenames ) ; i + + ) {
m_aFrontEndSprites [ i ] . SetTexture ( FrontendFilenames [ i ] [ 0 ] , FrontendFilenames [ i ] [ 1 ] ) ;
m_aFrontEndSprites [ i ] . SetAddressing ( rwTEXTUREADDRESSBORDER ) ;
}
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
int menuTxdSlot = CTxdStore : : FindTxdSlot ( " menu " ) ;
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
if ( menuTxdSlot = = - 1 )
menuTxdSlot = CTxdStore : : AddTxdSlot ( " menu " ) ;
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
printf ( " LOAD sprite \n " ) ;
CTxdStore : : LoadTxd ( menuTxdSlot , " MODELS/MENU.TXD " ) ;
CTxdStore : : AddRef ( menuTxdSlot ) ;
CTxdStore : : SetCurrentTxd ( menuTxdSlot ) ;
2019-06-25 02:34:29 +02:00
2019-11-09 16:17:54 +01:00
for ( int i = 0 ; i < ARRAY_SIZE ( MenuFilenames ) ; i + + ) {
m_aMenuSprites [ i ] . SetTexture ( MenuFilenames [ i ] [ 0 ] , MenuFilenames [ i ] [ 1 ] ) ;
m_aMenuSprites [ i ] . SetAddressing ( rwTEXTUREADDRESSBORDER ) ;
2019-06-25 02:34:29 +02:00
}
2019-11-09 16:17:54 +01:00
m_bSpritesLoaded = true ;
CTxdStore : : PopCurrentTxd ( ) ;
}
2019-07-14 12:46:36 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : LoadSettings ( ) { EAXJMP ( 0x488EE0 ) ; }
# else
void CMenuManager : : LoadSettings ( )
{
2019-07-03 17:26:15 +02:00
CFileMgr : : SetDirMyDocuments ( ) ;
2019-11-09 16:17:54 +01:00
int fileHandle = CFileMgr : : OpenFile ( " gta3.set " , " r " ) ;
2019-07-03 17:26:15 +02:00
2019-07-14 12:46:36 +02:00
int32 prevLang = m_PrefsLanguage ;
CMBlur : : BlurOn = true ;
2019-07-03 17:26:15 +02:00
MousePointerStateHelper . bInvertVertically = true ;
2019-11-09 16:17:54 +01:00
// 50 is silly
2019-10-30 00:14:59 +01:00
char Ver [ 50 ] ;
2019-11-09 16:17:54 +01:00
2019-07-03 17:26:15 +02:00
if ( fileHandle ) {
2019-10-30 00:14:59 +01:00
CFileMgr : : Read ( fileHandle , Ver , 29 ) ;
2019-07-03 17:26:15 +02:00
2019-10-30 00:14:59 +01:00
if ( strncmp ( Ver , TopLineEmptyFile , sizeof ( TopLineEmptyFile ) - 1 ) ) {
2019-07-03 17:26:15 +02:00
CFileMgr : : Seek ( fileHandle , 0 , 0 ) ;
ControlsManager . LoadSettings ( fileHandle ) ;
2019-07-14 12:46:36 +02:00
CFileMgr : : Read ( fileHandle , gString , 20 ) ;
CFileMgr : : Read ( fileHandle , gString , 20 ) ;
CFileMgr : : Read ( fileHandle , gString , 4 ) ;
CFileMgr : : Read ( fileHandle , gString , 4 ) ;
CFileMgr : : Read ( fileHandle , gString , 1 ) ;
CFileMgr : : Read ( fileHandle , gString , 1 ) ;
CFileMgr : : Read ( fileHandle , gString , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & TheCamera . m_bHeadBob , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & TheCamera . m_fMouseAccelHorzntl , 4 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & TheCamera . m_fMouseAccelVertical , 4 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & MousePointerStateHelper . bInvertVertically , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & CVehicle : : m_bDisableMouseSteering , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsSfxVolume , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsMusicVolume , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsRadioStation , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsSpeakers , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_nPrefsAudio3DProviderIndex , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsDMA , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsBrightness , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsLOD , 4 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsShowSubtitles , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsUseWideScreen , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsVsyncDisp , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsFrameLimiter , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_nDisplayVideoMode , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & CMBlur : : BlurOn , 1 ) ;
CFileMgr : : Read ( fileHandle , m_PrefsSkinFile , 256 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_ControlMethod , 1 ) ;
CFileMgr : : Read ( fileHandle , ( char * ) & m_PrefsLanguage , 1 ) ;
2019-07-03 17:26:15 +02:00
}
}
CFileMgr : : CloseFile ( fileHandle ) ;
CFileMgr : : SetDir ( " " ) ;
m_PrefsVsync = m_PrefsVsyncDisp ;
2019-07-14 12:46:36 +02:00
CRenderer : : ms_lodDistScale = m_PrefsLOD ;
2019-07-03 17:26:15 +02:00
if ( m_nPrefsAudio3DProviderIndex = = - 1 )
m_nPrefsAudio3DProviderIndex = - 2 ;
if ( m_PrefsLanguage = = prevLang )
m_bLanguageLoaded = false ;
else {
m_bLanguageLoaded = true ;
TheText . Unload ( ) ;
TheText . Load ( ) ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
InitialiseChangedLanguageSettings ( ) ;
2019-11-09 16:17:54 +01:00
OutputDebugString ( " The previously saved language is now in use " ) ;
2019-07-03 17:26:15 +02:00
}
2019-11-09 16:17:54 +01:00
WIN32_FIND_DATA FindFileData ;
char skinfile [ 256 + 16 ] ; // Stack analysis shows 16 bits gap, but I don't trust it. It may very well be MAX_PATH(260).
2019-07-03 17:26:15 +02:00
bool SkinFound = false ;
2019-11-09 16:17:54 +01:00
HANDLE handle = FindFirstFile ( " skins \\ *.bmp " , & FindFileData ) ;
for ( int i = 1 ; handle ! = INVALID_HANDLE_VALUE & & i ; i = FindNextFile ( handle , & FindFileData ) ) {
2019-07-14 12:46:36 +02:00
strcpy ( skinfile , m_PrefsSkinFile ) ;
strcat ( skinfile , " .bmp " ) ;
if ( strcmp ( FindFileData . cFileName , skinfile ) = = 0 )
2019-07-03 17:26:15 +02:00
SkinFound = true ;
}
2019-07-14 12:46:36 +02:00
FindClose ( handle ) ;
2019-07-03 17:26:15 +02:00
if ( ! SkinFound ) {
2019-11-09 16:17:54 +01:00
OutputDebugString ( " Default skin set as no other skins are available OR saved skin not found! " ) ;
2019-07-14 12:46:36 +02:00
strcpy ( m_PrefsSkinFile , " $$ \" \" " ) ;
2019-07-03 17:26:15 +02:00
strcpy ( m_aSkinName , " $$ \" \" " ) ;
2019-07-14 12:46:36 +02:00
}
}
# endif
#if 0
WRAPPER void CMenuManager : : SaveSettings ( ) { EAXJMP ( 0x488CC0 ) ; }
# else
void CMenuManager : : SaveSettings ( )
{
static char RubbishString [ 48 ] = " stuffmorestuffevenmorestuff etc " ;
CFileMgr : : SetDirMyDocuments ( ) ;
2019-11-09 16:17:54 +01:00
int fileHandle = CFileMgr : : OpenFile ( " gta3.set " , " w+ " ) ;
2019-07-14 12:46:36 +02:00
if ( fileHandle ) {
ControlsManager . SaveSettings ( fileHandle ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 20 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 20 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 4 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 4 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 1 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 1 ) ;
CFileMgr : : Write ( fileHandle , RubbishString , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & TheCamera . m_bHeadBob , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & TheCamera . m_fMouseAccelHorzntl , 4 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & TheCamera . m_fMouseAccelVertical , 4 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & MousePointerStateHelper . bInvertVertically , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & CVehicle : : m_bDisableMouseSteering , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsSfxVolume , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsMusicVolume , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsRadioStation , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsSpeakers , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_nPrefsAudio3DProviderIndex , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsDMA , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsBrightness , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsLOD , sizeof ( m_PrefsLOD ) ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsShowSubtitles , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsUseWideScreen , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsVsyncDisp , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsFrameLimiter , 1 ) ;
2019-11-09 16:17:54 +01:00
CFileMgr : : Write ( fileHandle , ( char * ) & m_nPrefsVideoMode , 1 ) ;
2019-07-14 12:46:36 +02:00
CFileMgr : : Write ( fileHandle , ( char * ) & CMBlur : : BlurOn , 1 ) ;
CFileMgr : : Write ( fileHandle , m_PrefsSkinFile , 256 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_ControlMethod , 1 ) ;
CFileMgr : : Write ( fileHandle , ( char * ) & m_PrefsLanguage , 1 ) ;
}
CFileMgr : : CloseFile ( fileHandle ) ;
CFileMgr : : SetDir ( " " ) ;
2019-06-25 02:34:29 +02:00
}
# endif
# if 1
WRAPPER void CMenuManager : : MessageScreen ( char * ) { EAXJMP ( 0x48B7E0 ) ; }
# else
void CMenuManager : : MessageScreen ( char * )
{
}
# endif
# if 1
WRAPPER void CMenuManager : : PickNewPlayerColour ( ) { EAXJMP ( 0x488C40 ) ; }
# else
void CMenuManager : : PickNewPlayerColour ( )
{
}
# endif
# if 1
WRAPPER void CMenuManager : : PrintBriefs ( ) { EAXJMP ( 0x484D60 ) ; }
# else
void CMenuManager : : PrintBriefs ( )
{
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : PrintErrorMessage ( ) { EAXJMP ( 0x484F70 ) ; }
# else
void CMenuManager : : PrintErrorMessage ( )
{
if ( ! CPad : : bDisplayNoControllerMessage & & ! CPad : : bObsoleteControllerMessage )
return ;
CSprite2d : : DrawRect ( CRect ( SCREEN_SCALE_X ( 20.0f ) , SCREEN_SCALE_Y ( 140.0f ) , SCREEN_WIDTH - SCREEN_SCALE_X ( 20.0f ) , SCREEN_HEIGHT - SCREEN_SCALE_Y ( 140.0f ) ) , CRGBA ( 64 , 16 , 16 , 224 ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
CFont : : SetBackgroundOff ( ) ;
CFont : : SetPropOn ( ) ;
CFont : : SetCentreOff ( ) ;
CFont : : SetJustifyOn ( ) ;
CFont : : SetRightJustifyOff ( ) ;
CFont : : SetBackGroundOnlyTextOn ( ) ;
CFont : : SetWrapx ( SCREEN_WIDTH - 40.0f ) ;
CFont : : SetColor ( CRGBA ( 165 , 165 , 165 , 255 ) ) ;
CFont : : SetScale ( SCREEN_SCALE_X ( 0.9f ) , SCREEN_SCALE_Y ( 0.9f ) ) ;
CFont : : PrintString ( SCREEN_SCALE_X ( 40.0f ) , ( SCREEN_HEIGHT / 2 ) - SCREEN_SCALE_Y ( 60.0f ) , TheText . Get ( CPad : : bDisplayNoControllerMessage ? " NOCONT " : " WRCONT " ) ) ;
CFont : : DrawFonts ( ) ;
}
# endif
# if 1
WRAPPER void CMenuManager : : PrintStats ( ) { EAXJMP ( 0x482100 ) ; }
# else
void CMenuManager : : PrintStats ( )
{
}
# endif
2019-07-14 12:46:36 +02:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : Process ( void ) { EAXJMP ( 0x485100 ) ; }
# else
void CMenuManager : : Process ( void )
{
2020-03-25 15:13:06 +01:00
m_bMenuStateChanged = false ;
2019-07-10 13:42:48 +02:00
if ( ! m_bSaveMenuActive & & TheCamera . GetScreenFadeStatus ( ) ! = FADE_0 )
2019-07-03 17:26:15 +02:00
return ;
2019-07-10 09:57:08 +02:00
m_bStartGameLoading = false ;
2019-07-03 17:26:15 +02:00
InitialiseChangedLanguageSettings ( ) ;
2019-07-14 12:46:36 +02:00
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) )
RequestFrontEndStartUp ( ) ;
2019-07-03 17:26:15 +02:00
SwitchMenuOnAndOff ( ) ;
2019-07-10 09:57:08 +02:00
// Be able to re-open menu correctly.
2019-07-14 12:46:36 +02:00
if ( m_bMenuActive ) {
2019-07-10 09:57:08 +02:00
2019-07-14 12:46:36 +02:00
// Load frontend textures.
LoadAllTextures ( ) ;
2019-07-03 17:26:15 +02:00
2019-07-14 12:46:36 +02:00
// Set save/delete game pages.
if ( m_nCurrScreen = = MENUPAGE_DELETING ) {
bool SlotPopulated = false ;
2019-07-03 17:26:15 +02:00
2019-07-14 12:46:36 +02:00
if ( PcSaveHelper . DeleteSlot ( m_nCurrSaveSlot ) ) {
PcSaveHelper . PopulateSlotInfo ( ) ;
SlotPopulated = true ;
}
2019-07-10 09:57:08 +02:00
2020-03-17 19:03:13 +01:00
if ( SlotPopulated )
ChangeScreen ( MENUPAGE_DELETE_SUCCESS , 0 , true , false ) ;
2019-07-14 12:46:36 +02:00
else
SaveLoadFileError_SetUpErrorScreen ( ) ;
2019-07-10 09:57:08 +02:00
}
2019-07-14 12:46:36 +02:00
if ( m_nCurrScreen = = MENUPAGE_SAVING_IN_PROGRESS ) {
int8 SaveSlot = PcSaveHelper . SaveSlot ( m_nCurrSaveSlot ) ;
PcSaveHelper . PopulateSlotInfo ( ) ;
2020-03-17 19:03:13 +01:00
if ( SaveSlot )
ChangeScreen ( MENUPAGE_SAVE_SUCCESSFUL , 0 , true , false ) ;
2019-07-14 12:46:36 +02:00
else
SaveLoadFileError_SetUpErrorScreen ( ) ;
2019-07-10 09:57:08 +02:00
}
2019-07-14 12:46:36 +02:00
if ( m_nCurrScreen = = MENUPAGE_LOADING_IN_PROGRESS ) {
if ( CheckSlotDataValid ( m_nCurrSaveSlot ) ) {
2020-04-02 12:48:01 +02:00
TheCamera . m_bUseMouse3rdPerson = m_ControlMethod = = CONTROL_STANDARD ;
2019-07-14 12:46:36 +02:00
if ( m_PrefsVsyncDisp ! = m_PrefsVsync )
m_PrefsVsync = m_PrefsVsyncDisp ;
DMAudio . Service ( ) ;
2019-11-09 16:17:54 +01:00
m_bStartGameLoading = true ;
2020-03-17 19:03:13 +01:00
RequestFrontEndShutDown ( ) ;
2019-11-09 16:17:54 +01:00
m_bLoadingSavedGame = true ;
b_FoundRecentSavedGameWantToLoad = true ;
2019-07-14 12:46:36 +02:00
DMAudio . SetEffectsFadeVol ( 0 ) ;
DMAudio . SetMusicFadeVol ( 0 ) ;
DMAudio . ResetTimers ( CTimer : : GetTimeInMilliseconds ( ) ) ;
}
else
SaveLoadFileError_SetUpErrorScreen ( ) ;
2019-07-10 09:57:08 +02:00
}
2019-07-14 12:46:36 +02:00
ProcessButtonPresses ( ) ;
2019-07-10 09:57:08 +02:00
2019-07-14 12:46:36 +02:00
// Set binding keys.
if ( pEditString & & CPad : : EditString ( pEditString , 0 ) = = nil ) {
if ( * pEditString = = 0 )
strcpy ( pEditString , " NoName " ) ;
pEditString = nil ;
SaveSettings ( ) ;
}
2019-07-10 09:57:08 +02:00
2020-03-17 19:03:13 +01:00
if ( m_bWaitingForNewKeyBind ) {
if ( m_bStartWaitingForKeyBind )
m_bStartWaitingForKeyBind = false ;
2019-07-11 23:29:59 +02:00
else {
2019-07-14 12:46:36 +02:00
pControlEdit = CPad : : EditCodesForControls ( pControlEdit , 1 ) ;
JoyButtonJustClicked = 0 ;
MouseButtonJustClicked = 0 ;
2020-03-17 19:03:13 +01:00
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) )
2019-07-14 12:46:36 +02:00
MouseButtonJustClicked = 1 ;
2020-03-17 19:03:13 +01:00
else if ( CPad : : GetPad ( 0 ) - > GetRightMouseJustUp ( ) )
2019-07-14 12:46:36 +02:00
MouseButtonJustClicked = 3 ;
2020-03-17 19:03:13 +01:00
else if ( CPad : : GetPad ( 0 ) - > GetMiddleMouseJustUp ( ) )
2019-07-14 12:46:36 +02:00
MouseButtonJustClicked = 2 ;
2020-03-17 19:03:13 +01:00
else if ( CPad : : GetPad ( 0 ) - > GetMouseWheelUpJustUp ( ) )
2019-07-14 12:46:36 +02:00
MouseButtonJustClicked = 4 ;
2020-03-17 19:03:13 +01:00
else if ( CPad : : GetPad ( 0 ) - > GetMouseWheelDownJustUp ( ) )
2019-07-14 12:46:36 +02:00
MouseButtonJustClicked = 5 ;
2020-03-17 19:03:13 +01:00
// TODO two more buttons
2019-07-14 12:46:36 +02:00
JoyButtonJustClicked = ControlsManager . GetJoyButtonJustDown ( ) ;
int32 TypeOfControl = 0 ;
if ( JoyButtonJustClicked )
TypeOfControl = 3 ;
if ( MouseButtonJustClicked )
TypeOfControl = 2 ;
if ( * pControlEdit ! = rsNULL )
TypeOfControl = 0 ;
2020-03-17 19:03:13 +01:00
if ( ! m_bKeyIsOK ) {
2019-07-14 12:46:36 +02:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_FAIL , 0 ) ;
pControlEdit = nil ;
2020-03-17 19:03:13 +01:00
m_bWaitingForNewKeyBind = false ;
2019-07-14 12:46:36 +02:00
m_KeyPressedCode = - 1 ;
2020-03-17 19:03:13 +01:00
m_bStartWaitingForKeyBind = false ;
2019-07-14 12:46:36 +02:00
}
else if ( ! m_bKeyChangeNotProcessed ) {
if ( * pControlEdit ! = rsNULL | | MouseButtonJustClicked | | JoyButtonJustClicked )
CheckCodesForControls ( TypeOfControl ) ;
2020-03-17 19:03:13 +01:00
field_535 = true ;
2019-07-14 12:46:36 +02:00
}
else {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
for ( int i = 0 ; i < 4 ; i + + )
2019-10-27 04:17:30 +01:00
ControlsManager . ClearSettingsAssociatedWithAction ( ( e_ControllerAction ) m_CurrCntrlAction , ( eControllerType ) i ) ;
2020-03-17 19:03:13 +01:00
m_bKeyIsOK = false ;
2019-07-14 12:46:36 +02:00
m_bKeyChangeNotProcessed = false ;
pControlEdit = nil ;
2020-03-17 19:03:13 +01:00
m_bWaitingForNewKeyBind = false ;
2019-07-14 12:46:36 +02:00
m_KeyPressedCode = - 1 ;
2020-03-17 19:03:13 +01:00
m_bStartWaitingForKeyBind = false ;
2019-07-14 12:46:36 +02:00
}
2019-07-11 23:29:59 +02:00
}
2019-07-10 09:57:08 +02:00
}
2019-07-10 13:42:48 +02:00
2019-07-14 12:46:36 +02:00
if ( ( m_nCurrScreen = = MENUPAGE_13 | | m_nCurrScreen = = MENUPAGE_16 ) & & CTimer : : GetTimeInMillisecondsPauseMode ( ) > field_558 ) {
m_nCurrScreen = m_nPrevScreen ;
m_nCurrOption = 0 ;
}
// Reset pad shaking.
2019-11-09 16:17:54 +01:00
if ( TimeToStopPadShaking & & TimeToStopPadShaking < CTimer : : GetTimeInMillisecondsPauseMode ( ) ) {
2019-07-14 12:46:36 +02:00
CPad : : StopPadsShaking ( ) ;
2019-11-09 16:17:54 +01:00
TimeToStopPadShaking = 0 ;
2019-07-14 12:46:36 +02:00
}
2019-07-11 23:29:59 +02:00
2019-07-14 12:46:36 +02:00
} else {
UnloadTextures ( ) ;
2020-01-07 15:23:09 +01:00
m_bRenderGameInMenu = false ;
2019-07-14 12:46:36 +02:00
// byte_5F33E4 = 1; // unused
2020-03-17 19:03:13 +01:00
ChangeScreen ( MENUPAGE_NONE , 0 , false , false ) ;
2019-07-14 12:46:36 +02:00
pEditString = nil ;
2020-03-17 19:03:13 +01:00
m_bWaitingForNewKeyBind = false ;
2019-07-10 13:42:48 +02:00
}
if ( ! m_bStartGameLoading ) {
if ( m_bGameNotLoaded )
DMAudio . Service ( ) ;
2019-07-03 17:26:15 +02:00
}
2019-06-25 02:34:29 +02:00
}
# endif
2020-03-17 19:03:13 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : ProcessButtonPresses ( ) { EAXJMP ( 0x4856F0 ) ; }
# else
2020-03-17 19:03:13 +01:00
void
CMenuManager : : ProcessButtonPresses ( void )
2019-06-25 02:34:29 +02:00
{
2019-07-11 23:29:59 +02:00
if ( pEditString | | pControlEdit )
2019-07-10 13:42:48 +02:00
return ;
2020-03-17 19:03:13 +01:00
bool goBack = false ;
bool optionSelected = false ;
bool goUp = false ;
bool goDown = false ;
# ifdef TIDY_UP_PBP
bool assumeIncrease = false ;
# endif
if ( ! m_bShowMouse & & ( m_nMouseOldPosX ! = m_nMousePosX | | m_nMouseOldPosY ! = m_nMousePosY ) ) {
m_bShowMouse = true ;
}
2019-07-03 17:26:15 +02:00
m_nMouseOldPosX = m_nMousePosX ;
m_nMouseOldPosY = m_nMousePosY ;
m_nMousePosX = m_nMouseTempPosX ;
m_nMousePosY = m_nMouseTempPosY ;
2020-03-17 19:03:13 +01:00
if ( m_nMousePosX < 0 ) m_nMousePosX = 0 ;
if ( m_nMousePosX > SCREEN_WIDTH ) m_nMousePosX = SCREEN_WIDTH ;
if ( m_nMousePosY < 0 ) m_nMousePosY = 0 ;
if ( m_nMousePosY > SCREEN_HEIGHT ) m_nMousePosY = SCREEN_HEIGHT ;
2019-07-10 09:57:08 +02:00
2020-03-17 19:03:13 +01:00
if ( m_nCurrScreen = = MENUPAGE_MULTIPLAYER_FIND_GAME | | m_nCurrScreen = = MENUPAGE_SKIN_SELECT
| | m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) {
2019-07-10 09:57:08 +02:00
2020-03-17 19:03:13 +01:00
if ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) {
m_nTotalListRow = m_nSkinsTotal ;
}
if ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) {
m_nTotalListRow = m_ControlMethod = = CONTROL_CLASSIC ? 30 : 25 ;
if ( m_nSelectedListRow > m_nTotalListRow )
m_nSelectedListRow = m_nTotalListRow - 1 ;
2019-07-10 09:57:08 +02:00
}
2020-03-17 19:03:13 +01:00
# ifndef TIDY_UP_PBP
if ( CPad : : GetPad ( 0 ) - > GetEnterJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustDown ( ) ) {
m_bShowMouse = 0 ;
optionSelected = true ;
}
# endif
if ( CPad : : GetPad ( 0 ) - > GetBackspaceJustDown ( ) & & m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS & & ! field_535 ) {
2020-04-04 13:39:58 +02:00
if ( m_nCurrExLayer = = HOVEROPTION_LIST ) {
2020-03-17 19:03:13 +01:00
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
m_bWaitingForNewKeyBind = true ;
m_bStartWaitingForKeyBind = true ;
m_bKeyChangeNotProcessed = true ;
pControlEdit = & m_KeyPressedCode ;
}
} else {
field_535 = false ;
2019-07-11 23:29:59 +02:00
}
2020-03-28 15:47:52 +01:00
static uint32 lastTimeClickedScrollButton = 0 ;
2020-03-17 19:03:13 +01:00
2020-03-28 15:47:52 +01:00
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - lastTimeClickedScrollButton > = 200 ) {
2020-03-17 19:03:13 +01:00
m_bPressedPgUpOnList = false ;
m_bPressedPgDnOnList = false ;
m_bPressedUpOnList = false ;
m_bPressedDownOnList = false ;
m_bPressedScrollButton = false ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2019-07-11 23:29:59 +02:00
}
2020-03-17 19:03:13 +01:00
if ( CPad : : GetPad ( 0 ) - > GetTabJustDown ( ) ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
m_bShowMouse = false ;
2019-07-11 23:29:59 +02:00
switch ( m_nCurrExLayer ) {
2020-04-04 13:39:58 +02:00
case HOVEROPTION_BACK :
2020-03-17 19:03:13 +01:00
default :
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_LIST :
m_nCurrExLayer = HOVEROPTION_USESKIN ;
2020-03-17 19:03:13 +01:00
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_USESKIN :
m_nCurrExLayer = HOVEROPTION_BACK ;
2019-07-11 23:29:59 +02:00
}
2020-04-04 13:39:58 +02:00
if ( ( ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) & & ( m_nCurrExLayer = = HOVEROPTION_USESKIN ) ) & & strcmp ( m_aSkinName , m_PrefsSkinFile ) = = 0 ) {
m_nCurrExLayer = HOVEROPTION_BACK ;
2019-07-11 23:29:59 +02:00
}
2020-04-04 13:39:58 +02:00
if ( ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) & & ( m_nCurrExLayer = = HOVEROPTION_USESKIN ) ) {
m_nCurrExLayer = HOVEROPTION_BACK ;
2020-03-17 19:03:13 +01:00
}
2019-07-11 23:29:59 +02:00
}
2020-03-17 19:03:13 +01:00
bool pressed = false ;
if ( CPad : : GetPad ( 0 ) - > GetUp ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadUp ( ) | | CPad : : GetPad ( 0 ) - > GetDPadUpJustDown ( ) ) {
m_bShowMouse = false ;
pressed = true ;
} else if ( CPad : : GetPad ( 0 ) - > GetMouseWheelUpJustUp ( ) ) {
m_bShowMouse = true ;
pressed = true ;
}
2019-07-10 09:57:08 +02:00
2020-03-17 19:03:13 +01:00
// Up
if ( pressed ) {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
if ( ! m_bPressedUpOnList ) {
m_bPressedUpOnList = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
ScrollUpListByOne ( ) ;
2019-07-10 13:42:48 +02:00
}
2020-03-17 19:03:13 +01:00
} else {
m_bPressedUpOnList = false ;
2019-07-10 09:57:08 +02:00
}
2019-07-03 17:26:15 +02:00
2020-03-17 19:03:13 +01:00
pressed = false ;
if ( CPad : : GetPad ( 0 ) - > GetDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadDown ( ) | | CPad : : GetPad ( 0 ) - > GetDPadDownJustDown ( ) ) {
m_bShowMouse = false ;
pressed = true ;
} else if ( CPad : : GetPad ( 0 ) - > GetMouseWheelDownJustDown ( ) ) {
m_bShowMouse = true ;
pressed = true ;
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
// Down
if ( pressed ) {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
if ( ! m_bPressedDownOnList ) {
m_bPressedDownOnList = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
ScrollDownListByOne ( ) ;
}
} else {
m_bPressedDownOnList = false ;
}
2019-07-11 23:29:59 +02:00
2020-03-17 19:03:13 +01:00
if ( m_nCurrScreen ! = MENUPAGE_KEYBOARD_CONTROLS ) {
if ( ! CPad : : GetPad ( 0 ) - > GetPageUp ( ) ) {
m_bPressedPgUpOnList = false ;
} else {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
if ( ! m_bPressedPgUpOnList ) {
m_bPressedPgUpOnList = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
PageUpList ( false ) ;
}
}
if ( ! CPad : : GetPad ( 0 ) - > GetPageDown ( ) ) {
m_bPressedPgDnOnList = false ;
} else {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
if ( ! m_bPressedPgDnOnList ) {
m_bPressedPgDnOnList = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
PageDownList ( false ) ;
}
}
if ( CPad : : GetPad ( 0 ) - > GetHome ( ) ) {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
if ( m_nTotalListRow > = MAX_VISIBLE_LIST_ROW ) {
m_nFirstVisibleRowOnList = 0 ;
}
m_nSelectedListRow = 0 ;
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin = ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ) * m_nFirstVisibleRowOnList ;
2020-03-17 19:03:13 +01:00
}
if ( CPad : : GetPad ( 0 ) - > GetEnd ( ) ) {
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
if ( m_nTotalListRow > = MAX_VISIBLE_LIST_ROW ) {
m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW ;
}
m_nSelectedListRow = m_nTotalListRow - 1 ;
2020-04-04 13:39:58 +02:00
m_nScrollbarTopMargin = ( SCROLLBAR_MAX_HEIGHT / m_nTotalListRow ) * m_nFirstVisibleRowOnList ;
2020-03-17 19:03:13 +01:00
}
}
2019-07-03 17:26:15 +02:00
2020-03-17 19:03:13 +01:00
# ifndef TIDY_UP_PBP
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetSquareJustDown ( ) ) {
m_bShowMouse = false ;
goBack = true ;
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
# endif
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) ) {
switch ( m_nHoverOption ) {
case HOVEROPTION_BACK :
goBack = true ;
break ;
case HOVEROPTION_PAGEUP :
PageUpList ( true ) ;
break ;
case HOVEROPTION_PAGEDOWN :
PageDownList ( true ) ;
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_USESKIN :
2020-03-17 19:03:13 +01:00
if ( m_nSkinsTotal > 0 ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2020-04-04 13:39:58 +02:00
m_pSelectedSkin = m_pSkinListHead . nextSkin ;
2020-03-17 19:03:13 +01:00
strcpy ( m_PrefsSkinFile , m_aSkinName ) ;
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
SaveSettings ( ) ;
}
}
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) ) {
switch ( m_nHoverOption ) {
case HOVEROPTION_OVER_SCROLL_UP :
m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_UP ;
break ;
case HOVEROPTION_OVER_SCROLL_DOWN :
m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_DOWN ;
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_LIST :
m_nHoverOption = HOVEROPTION_SKIN ;
2020-03-17 19:03:13 +01:00
}
} else if ( ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustUp ( ) )
& & ( ( m_nHoverOption = = HOVEROPTION_CLICKED_SCROLL_UP | | ( m_nHoverOption = = HOVEROPTION_CLICKED_SCROLL_DOWN ) ) ) ) {
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
}
2019-07-11 23:29:59 +02:00
2020-03-17 19:03:13 +01:00
if ( ! CPad : : GetPad ( 0 ) - > GetLeftMouse ( ) ) {
holdingScrollBar = false ;
} else {
if ( ( m_nHoverOption = = HOVEROPTION_HOLDING_SCROLLBAR ) | | holdingScrollBar ) {
holdingScrollBar = true ;
// TODO: This part is a bit hard to reverse. Not much code tho
2020-04-04 13:39:58 +02:00
assert ( 0 & & " Holding scrollbar isn't done yet " ) ;
2020-03-17 19:03:13 +01:00
} else {
switch ( m_nHoverOption ) {
case HOVEROPTION_OVER_SCROLL_UP :
case HOVEROPTION_CLICKED_SCROLL_UP :
if ( ! m_bPressedScrollButton ) {
m_bPressedScrollButton = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
ScrollUpListByOne ( ) ;
}
break ;
case HOVEROPTION_OVER_SCROLL_DOWN :
case HOVEROPTION_CLICKED_SCROLL_DOWN :
if ( ! m_bPressedScrollButton ) {
m_bPressedScrollButton = true ;
2020-03-28 15:47:52 +01:00
lastTimeClickedScrollButton = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
2020-03-17 19:03:13 +01:00
ScrollDownListByOne ( ) ;
}
break ;
default :
m_bPressedScrollButton = false ;
}
}
}
} else if ( isPlainTextScreen ( m_nCurrScreen ) ) {
# ifndef TIDY_UP_PBP
if ( CPad : : GetPad ( 0 ) - > GetEnterJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) ) {
optionSelected = true ;
}
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetSquareJustUp ( ) ) {
if ( m_nCurrScreen ! = MENUPAGE_START_MENU ) {
goBack = true ;
}
}
# endif
} else {
if ( CPad : : GetPad ( 0 ) - > GetDownJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadDown ( ) | | CPad : : GetPad ( 0 ) - > GetDPadDownJustDown ( ) ) {
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
goDown = true ;
} else if ( CPad : : GetPad ( 0 ) - > GetUpJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadUp ( ) | | CPad : : GetPad ( 0 ) - > GetDPadUpJustDown ( ) ) {
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
goUp = true ;
}
# ifndef TIDY_UP_PBP
if ( ( m_nCurrOption = = 0 ) & & ( m_nCurrScreen = = MENUPAGE_PAUSE_MENU ) ) {
if ( CPad : : GetPad ( 0 ) - > GetEnterJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustUp ( ) ) {
m_bShowMouse = false ;
optionSelected = true ;
}
} else {
if ( CPad : : GetPad ( 0 ) - > GetEnterJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustDown ( ) ) {
m_bShowMouse = false ;
optionSelected = true ;
}
}
# endif
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustUp ( ) ) {
# ifndef TIDY_UP_PBP
if ( ( ( m_nCurrOption = = 0 ) & & ( m_nCurrScreen = = MENUPAGE_PAUSE_MENU ) ) & &
# else
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action = = MENUACTION_RESUME & &
# endif
( m_nHoverOption = = HOVEROPTION_RANDOM_ITEM ) ) {
m_nCurrOption = m_nPrevOption ;
optionSelected = true ;
}
} else if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) ) {
# ifdef TIDY_UP_PBP
if ( m_nHoverOption > = HOVEROPTION_RADIO_0 & & m_nHoverOption < = HOVEROPTION_RADIO_9 ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = m_nHoverOption - HOVEROPTION_RADIO_0 ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
} else if ( m_nHoverOption = = HOVEROPTION_RANDOM_ITEM
& & aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ! = MENUACTION_RESUME ) {
m_nCurrOption = m_nPrevOption ;
optionSelected = true ;
}
# else
switch ( m_nHoverOption ) {
case HOVEROPTION_RADIO_0 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = HEAD_RADIO ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_1 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = DOUBLE_CLEF ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_2 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = JAH_RADIO ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_3 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = RISE_FM ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_4 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = LIPS_106 ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_5 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = GAME_FM ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_6 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = MSX_FM ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_7 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = FLASHBACK ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_8 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = CHATTERBOX ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RADIO_9 :
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : m_PrefsRadioStation = USERTRACK ;
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case HOVEROPTION_RANDOM_ITEM :
if ( ( ( m_nCurrOption ! = 0 ) | | ( m_nCurrScreen ! = MENUPAGE_PAUSE_MENU ) ) {
m_nCurrOption = m_nPrevOption ;
optionSelected = true ;
}
break ;
}
# endif
}
if ( CPad : : GetPad ( 0 ) - > GetLeftMouse ( ) ) {
# ifndef TIDY_UP_PBP
switch ( m_nHoverOption ) {
case HOVEROPTION_INCREASE_BRIGHTNESS :
CMenuManager : : m_PrefsBrightness = CMenuManager : : m_PrefsBrightness + 32 ;
if ( CMenuManager : : m_PrefsBrightness < 0 ) {
CMenuManager : : m_PrefsBrightness = 0 ;
}
if ( 510 < CMenuManager : : m_PrefsBrightness ) {
CMenuManager : : m_PrefsBrightness = 511 ;
}
SaveSettings ( ) ;
break ;
case HOVEROPTION_DECREASE_BRIGHTNESS :
CMenuManager : : m_PrefsBrightness = CMenuManager : : m_PrefsBrightness - 32 ;
if ( CMenuManager : : m_PrefsBrightness < 0 ) {
CMenuManager : : m_PrefsBrightness = 0 ;
}
if ( 510 < CMenuManager : : m_PrefsBrightness ) {
CMenuManager : : m_PrefsBrightness = 511 ;
}
SaveSettings ( ) ;
break ;
case HOVEROPTION_INCREASE_DRAWDIST :
CMenuManager : : m_PrefsLOD = CMenuManager : : m_PrefsLOD + ( 1.0f / 16 ) ;
m_PrefsLOD = min ( 1.8f , m_PrefsLOD ) ;
CRenderer : : ms_lodDistScale = CMenuManager : : m_PrefsLOD ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_DECREASE_DRAWDIST :
CMenuManager : : m_PrefsLOD = CMenuManager : : m_PrefsLOD - ( 1.0f / 16 ) ;
m_PrefsLOD = max ( 0.8f , m_PrefsLOD ) ;
CRenderer : : ms_lodDistScale = CMenuManager : : m_PrefsLOD ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_INCREASE_MUSICVOLUME :
CMenuManager : : m_PrefsMusicVolume = CMenuManager : : m_PrefsMusicVolume + 8 ;
m_PrefsMusicVolume = clamp ( m_PrefsMusicVolume , 0 , 127 ) ;
DMAudio . SetMusicMasterVolume ( uchar ) ( CMenuManager : : m_PrefsMusicVolume ) ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_DECREASE_MUSICVOLUME :
CMenuManager : : m_PrefsMusicVolume = CMenuManager : : m_PrefsMusicVolume - 8 ;
if ( CMenuManager : : m_PrefsMusicVolume < 0 ) {
CMenuManager : : m_PrefsMusicVolume = 0 ;
}
if ( 126 < CMenuManager : : m_PrefsMusicVolume ) {
CMenuManager : : m_PrefsMusicVolume = 127 ;
}
DMAudio . SetMusicMasterVolume ( uchar ) ( CMenuManager : : m_PrefsMusicVolume ) ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_INCREASE_SFXVOLUME :
CMenuManager : : m_PrefsSFXVolume = CMenuManager : : m_PrefsSFXVolume + 8 ;
if ( CMenuManager : : m_PrefsSFXVolume < 0 ) {
CMenuManager : : m_PrefsSFXVolume = 0 ;
}
if ( 126 < CMenuManager : : m_PrefsSFXVolume ) {
CMenuManager : : m_PrefsSFXVolume = 127 ;
}
DMAudio . SetEffectsMasterVolume ( uchar ) ( CMenuManager : : m_PrefsSFXVolume ) ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_DECREASE_SFXVOLUME :
CMenuManager : : m_PrefsSFXVolume = CMenuManager : : m_PrefsSFXVolume - 8 ;
if ( CMenuManager : : m_PrefsSFXVolume < 0 ) {
CMenuManager : : m_PrefsSFXVolume = 0 ;
}
if ( 126 < CMenuManager : : m_PrefsSFXVolume ) {
CMenuManager : : m_PrefsSFXVolume = 127 ;
}
DMAudio . SetEffectsMasterVolume ( uchar ) ( CMenuManager : : m_PrefsSFXVolume ) ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_INCREASE_MOUSESENS :
TheCamera . m_fMouseAccelHorzntl + = ( 1.0f / 3000 ) ;
TheCamera . m_fMouseAccelHorzntl = clamp ( TheCamera . m_fMouseAccelHorzntl , 1.0f / 3200 , 1.0f / 200 ) ;
TheCamera . m_fMouseAccelVertical = TheCamera . m_fMouseAccelHorzntl ;
SaveSettings ( ) ;
break ;
case HOVEROPTION_DECREASE_MOUSESENS :
TheCamera . m_fMouseAccelHorzntl - = ( 1.0f / 3000 ) ;
TheCamera . m_fMouseAccelHorzntl = clamp ( TheCamera . m_fMouseAccelHorzntl , 1.0f / 3200 , 1.0f / 200 ) ;
TheCamera . m_fMouseAccelVertical = TheCamera . m_fMouseAccelHorzntl ;
SaveSettings ( ) ;
break ;
}
# else
switch ( m_nHoverOption ) {
case HOVEROPTION_INCREASE_BRIGHTNESS :
case HOVEROPTION_INCREASE_DRAWDIST :
case HOVEROPTION_INCREASE_MUSICVOLUME :
case HOVEROPTION_INCREASE_SFXVOLUME :
case HOVEROPTION_INCREASE_MOUSESENS :
CheckSliderMovement ( 1 ) ;
break ;
case HOVEROPTION_DECREASE_BRIGHTNESS :
case HOVEROPTION_DECREASE_DRAWDIST :
case HOVEROPTION_DECREASE_MUSICVOLUME :
case HOVEROPTION_DECREASE_SFXVOLUME :
case HOVEROPTION_DECREASE_MOUSESENS :
CheckSliderMovement ( - 1 ) ;
break ;
}
# endif
}
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetLeftJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetRightJustUp ( )
| | CPad : : GetPad ( 0 ) - > GetDPadLeftJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetDPadRightJustUp ( )
| | CPad : : GetPad ( 0 ) - > GetAnaloguePadLeftJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadRightJustUp ( )
| | CPad : : GetPad ( 0 ) - > GetMouseWheelUpJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetMouseWheelDownJustDown ( ) ) {
int option = aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ;
if ( option = = MENUACTION_BRIGHTNESS | | option = = MENUACTION_DRAWDIST )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
else if ( option = = MENUACTION_SFXVOLUME )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_AUDIO_TEST , 0 ) ;
else if ( option = = MENUACTION_MOUSESENS )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
}
# ifndef TIDY_UP_PBP
if ( CPad : : GetPad ( 0 ) - > GetSquareJustDown ( ) ) {
if ( m_nCurrScreen ! = MENUPAGE_START_MENU & & m_nCurrScreen ! = MENUPAGE_PAUSE_MENU ) {
m_bShowMouse = false ;
goBack = true ;
}
}
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) ) {
if ( m_nCurrScreen ! = MENUPAGE_START_MENU ) {
m_bShowMouse = false ;
goBack = true ;
}
}
if ( ( ( goDown ) | | ( goUp ) ) | | ( optionSelected ) ) {
goBack = false ;
}
# endif
}
// Centralized enter/back (except some conditions)
# ifdef TIDY_UP_PBP
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ! = MENUACTION_RESUME ) {
if ( CPad : : GetPad ( 0 ) - > GetEnterJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustDown ( ) | |
( isPlainTextScreen ( m_nCurrScreen ) & & CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) ) ) {
if ( ! isPlainTextScreen ( m_nCurrScreen ) )
m_bShowMouse = false ;
optionSelected = true ;
}
} else {
if ( CPad : : GetPad ( 0 ) - > GetEnterJustUp ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustUp ( ) ) {
m_bShowMouse = false ;
optionSelected = true ;
}
2019-07-03 17:26:15 +02:00
}
2019-07-02 13:59:19 +02:00
2020-03-17 19:03:13 +01:00
if ( ! goDown & & ! goUp & & ! optionSelected ) {
if ( m_nCurrScreen ! = MENUPAGE_START_MENU ) {
if ( isPlainTextScreen ( m_nCurrScreen ) ) {
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetSquareJustUp ( ) ) {
goBack = true ;
}
} else {
if ( CPad : : GetPad ( 0 ) - > GetEscapeJustDown ( ) | | ( m_nCurrScreen ! = MENUPAGE_PAUSE_MENU & & CPad : : GetPad ( 0 ) - > GetSquareJustDown ( ) ) ) {
m_bShowMouse = false ;
goBack = true ;
}
2019-07-10 09:57:08 +02:00
}
2020-03-17 19:03:13 +01:00
}
}
# endif
2019-07-11 23:29:59 +02:00
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
if ( CPad : : GetPad ( 0 ) - > GetLeftMouseJustDown ( ) & & hoveredBottomBarOption ! = - 1 ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
bottomBarActive = false ;
curBottomBarOption = hoveredBottomBarOption ;
ChangeScreen ( bbNames [ curBottomBarOption ] . screenId , 0 , true , false ) ;
return ;
} else if ( bottomBarActive ) {
if ( CPad : : GetPad ( 0 ) - > GetEnterJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetCrossJustDown ( ) ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
bottomBarActive = false ;
2020-03-25 15:13:06 +01:00
// If there's a menu change with fade ongoing, finish it now
2020-03-17 19:03:13 +01:00
if ( reverseAlpha )
m_nMenuFadeAlpha = 0 ;
return ;
} else if ( CPad : : GetPad ( 0 ) - > GetLeftJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadLeft ( ) | | CPad : : GetPad ( 0 ) - > GetDPadLeftJustDown ( )
| | CPad : : GetPad ( 0 ) - > GetUpJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadUp ( ) | | CPad : : GetPad ( 0 ) - > GetDPadUpJustDown ( ) ) {
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
if ( curBottomBarOption > 0 )
curBottomBarOption - - ;
ChangeScreen ( bbNames [ curBottomBarOption ] . screenId , 0 , true , true ) ;
return ;
} else if ( CPad : : GetPad ( 0 ) - > GetRightJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadRight ( ) | | CPad : : GetPad ( 0 ) - > GetDPadRightJustDown ( )
| | CPad : : GetPad ( 0 ) - > GetDownJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadDown ( ) | | CPad : : GetPad ( 0 ) - > GetDPadDownJustDown ( ) ) {
m_bShowMouse = false ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
if ( curBottomBarOption < bbTabCount - 1 )
curBottomBarOption + + ;
ChangeScreen ( bbNames [ curBottomBarOption ] . screenId , 0 , true , true ) ;
return ;
2019-07-10 13:42:48 +02:00
}
2020-03-17 19:03:13 +01:00
optionSelected = false ;
goDown = false ;
goUp = false ;
}
# endif
2019-07-03 17:26:15 +02:00
2020-03-17 19:03:13 +01:00
if ( goDown & & ( m_nCurrScreen ! = MENUPAGE_MULTIPLAYER_FIND_GAME ) ) {
m_nCurrOption + + ;
if ( m_nCurrOption = = NUM_MENUROWS | | ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action = = MENUACTION_NOTHING ) ) {
m_nCurrOption = 0 ;
}
}
if ( goUp & & ( m_nCurrScreen ! = MENUPAGE_MULTIPLAYER_FIND_GAME ) ) {
if ( m_nCurrOption = = ( aScreens [ m_nCurrScreen ] . m_aEntries [ 0 ] . m_Action = = MENUACTION_LABEL ) ) {
while ( m_nCurrOption ! = NUM_MENUROWS - 1
& & aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption + 1 ] . m_Action ! = MENUACTION_NOTHING ) {
m_nCurrOption + + ;
}
} else {
m_nCurrOption - - ;
}
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
if ( optionSelected ) {
int option = aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ;
if ( ( option = = MENUACTION_CHANGEMENU ) | | ( option = = MENUACTION_POPULATESLOTS_CHANGEMENU ) ) {
if ( strncmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FEDS_TB " , 8 ) ! = 0 & &
strncmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FESZ_CA " , 8 ) ! = 0 ) {
if ( m_nCurrScreen = = MENUPAGE_CHOOSE_DELETE_SLOT ) {
if ( Slots [ aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_SaveSlot - 1 ] = = SLOT_EMPTY )
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_FAIL , 0 ) ;
else
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
} else
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_COMPLETED , 0 ) ;
} else {
// This is duplicate, back button already processed below
# ifndef TIDY_UP_PBP
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_EXIT , 0 ) ;
if ( m_nCurrScreen = = MENUPAGE_SOUND_SETTINGS ) {
DMAudio . StopFrontEndTrack ( ) ;
OutputDebugString ( " FRONTEND AUDIO TRACK STOPPED " ) ;
}
# endif
}
} else if ( option = = MENUACTION_CHECKSAVE ) {
if ( Slots [ aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_SaveSlot - 1 ] = = SLOT_EMPTY ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_FAIL , 0 ) ;
} else {
if ( m_nCurrScreen ! = MENUPAGE_NEW_GAME_RELOAD ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
}
}
} else if ( option ! = MENUACTION_CHANGEMENU & & option ! = MENUACTION_BRIGHTNESS & & option ! = MENUACTION_DRAWDIST
& & option ! = MENUACTION_MUSICVOLUME & & option ! = MENUACTION_SFXVOLUME
& & option ! = MENUACTION_CHECKSAVE & & option ! = MENUACTION_UNK24
& & option ! = MENUACTION_MOUSESENS & & option ! = MENUACTION_SCREENRES ) {
2019-07-03 17:26:15 +02:00
2020-03-17 19:03:13 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
}
if ( ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) | | ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) ) {
switch ( m_nCurrExLayer ) {
default :
goBack = true ;
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_LIST :
2020-03-17 19:03:13 +01:00
if ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) {
m_bWaitingForNewKeyBind = true ;
m_bStartWaitingForKeyBind = true ;
pControlEdit = & m_KeyPressedCode ;
}
if ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) {
strcpy ( m_PrefsSkinFile , m_aSkinName ) ;
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_BACK ;
2020-03-17 19:03:13 +01:00
CMenuManager : : SaveSettings ( ) ;
}
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
break ;
2020-04-04 13:39:58 +02:00
case HOVEROPTION_USESKIN :
2020-03-17 19:03:13 +01:00
m_nHoverOption = HOVEROPTION_NOT_HOVERING ;
strcpy ( m_PrefsSkinFile , m_aSkinName ) ;
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_BACK ;
2020-03-17 19:03:13 +01:00
SaveSettings ( ) ;
break ;
}
} else if ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_TargetMenu = = MENUPAGE_NEW_GAME_RELOAD & & m_bGameNotLoaded ) {
DoSettingsBeforeStartingAGame ( ) ;
/* } else if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
// .. either empty or there was some outer if. :shrug: pointless anyway, keyboard_controls is handled in first if.
*/
} else if ( m_nCurrScreen = = MENUPAGE_SKIN_SELECT ) {
2019-07-10 09:57:08 +02:00
if ( m_nSkinsTotal > 0 ) {
2020-04-04 13:39:58 +02:00
m_pSelectedSkin = m_pSkinListHead . nextSkin ;
2019-07-10 09:57:08 +02:00
strcpy ( m_PrefsSkinFile , m_aSkinName ) ;
2020-03-17 19:03:13 +01:00
CWorld : : Players [ 0 ] . SetPlayerSkin ( m_PrefsSkinFile ) ;
2019-07-10 09:57:08 +02:00
SaveSettings ( ) ;
2020-03-17 19:03:13 +01:00
} else {
if ( ! m_bGameNotLoaded )
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_PreviousPage [ 1 ] , aScreens [ m_nCurrScreen ] . m_ParentEntry [ 1 ] , true , true ) ;
else
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_PreviousPage [ 0 ] , aScreens [ m_nCurrScreen ] . m_ParentEntry [ 0 ] , true , true ) ;
}
} else if ( m_nCurrScreen ! = MENUPAGE_MULTIPLAYER_FIND_GAME ) {
option = aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ;
switch ( option ) {
case MENUACTION_RADIO :
# ifdef TIDY_UP_PBP
assumeIncrease = true ;
# else
+ + CMenuManager : : m_PrefsRadioStation ;
2020-04-04 13:39:58 +02:00
if ( DMAudio . IsMP3RadioChannelAvailable ( ) ) {
2020-03-17 19:03:13 +01:00
if ( CMenuManager : : m_PrefsRadioStation > USERTRACK )
CMenuManager : : m_PrefsRadioStation = HEAD_RADIO ;
} else if ( CMenuManager : : m_PrefsRadioStation > CHATTERBOX ) {
CMenuManager : : m_PrefsRadioStation = USERTRACK ;
}
SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
# endif
break ;
case MENUACTION_LANG_ENG :
m_PrefsLanguage = LANGUAGE_AMERICAN ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
CMenuManager : : SaveSettings ( ) ;
break ;
case MENUACTION_LANG_FRE :
m_PrefsLanguage = LANGUAGE_FRENCH ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
CMenuManager : : SaveSettings ( ) ;
break ;
case MENUACTION_LANG_GER :
m_PrefsLanguage = LANGUAGE_GERMAN ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
CMenuManager : : SaveSettings ( ) ;
break ;
case MENUACTION_LANG_ITA :
m_PrefsLanguage = LANGUAGE_ITALIAN ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
CMenuManager : : SaveSettings ( ) ;
break ;
case MENUACTION_LANG_SPA :
m_PrefsLanguage = LANGUAGE_SPANISH ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
SaveSettings ( ) ;
break ;
2020-03-29 08:35:13 +02:00
# ifdef MORE_LANGUAGES
case MENUACTION_LANG_RUS :
m_PrefsLanguage = LANGUAGE_RUSSIAN ;
m_bFrontEnd_ReloadObrTxtGxt = true ;
CMenuManager : : InitialiseChangedLanguageSettings ( ) ;
SaveSettings ( ) ;
break ;
# endif
2020-03-17 19:03:13 +01:00
case MENUACTION_POPULATESLOTS_CHANGEMENU :
PcSaveHelper . PopulateSlotInfo ( ) ;
// fall through
case MENUACTION_CHANGEMENU :
{
bool changeMenu = true ;
int saveSlot = aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_SaveSlot ;
// This should be unused.
if ( saveSlot > = 2 & & saveSlot < = 9 ) {
m_nCurrSaveSlot = saveSlot - 2 ;
switch ( m_nCurrScreen ) {
case MENUPAGE_CHOOSE_LOAD_SLOT :
if ( Slots [ m_nCurrSaveSlot + 1 ] ! = SLOT_EMPTY )
changeMenu = false ;
break ;
case MENUPAGE_CHOOSE_DELETE_SLOT :
if ( Slots [ m_nCurrSaveSlot + 1 ] = = SLOT_EMPTY )
changeMenu = false ;
break ;
}
}
if ( changeMenu ) {
if ( strncmp ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_EntryName , " FEDS_TB " , 8 ) = = 0 ) {
# ifndef TIDY_UP_PBP
CMenuManager : : ResetHelperText ( ) ;
if ( ! m_bGameNotLoaded )
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_PreviousPage [ 1 ] , aScreens [ m_nCurrScreen ] . m_ParentEntry [ 1 ] , true , true ) ;
else
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_PreviousPage [ 0 ] , aScreens [ m_nCurrScreen ] . m_ParentEntry [ 0 ] , true , true ) ;
# else
goBack = true ;
break ;
# endif
} else {
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_TargetMenu , 0 , true , true ) ;
}
}
break ;
}
case MENUACTION_CHECKSAVE :
{
int saveSlot = aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_SaveSlot ;
if ( saveSlot > = 2 & & saveSlot < = 9 ) {
m_nCurrSaveSlot = saveSlot - 2 ;
if ( Slots [ m_nCurrSaveSlot + 1 ] ! = SLOT_EMPTY & & Slots [ m_nCurrSaveSlot + 1 ] ! = SLOT_CORRUPTED ) {
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_TargetMenu , 0 , true , true ) ;
}
}
break ;
}
case MENUACTION_NEWGAME :
CMenuManager : : DoSettingsBeforeStartingAGame ( ) ;
break ;
case MENUACTION_RELOADIDE :
// TODO
// CFileLoader::ReloadObjectTypes("GTA3.IDE");
break ;
case MENUACTION_RELOADIPL :
CGame : : ReloadIPLs ( ) ;
break ;
case MENUACTION_SHOWCULL :
gbShowCullZoneDebugStuff = ! gbShowCullZoneDebugStuff ;
break ;
case MENUACTION_MEMCARDSAVECONFIRM :
return ;
case MENUACTION_RESUME_FROM_SAVEZONE :
CMenuManager : : RequestFrontEndShutDown ( ) ;
break ;
case MENUACTION_MPMAP_LIBERTY :
case MENUACTION_MPMAP_REDLIGHT :
case MENUACTION_MPMAP_CHINATOWN :
case MENUACTION_MPMAP_TOWER :
case MENUACTION_MPMAP_SEWER :
case MENUACTION_MPMAP_INDUSTPARK :
case MENUACTION_MPMAP_DOCKS :
case MENUACTION_MPMAP_STAUNTON :
sthWithButtons = option - MENUACTION_MPMAP_LIBERTY ;
CMenuManager : : SaveSettings ( ) ;
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_TargetMenu , 0 , true , true ) ;
break ;
case MENUACTION_MPMAP_DEATHMATCH1 :
case MENUACTION_MPMAP_DEATHMATCH2 :
case MENUACTION_MPMAP_TEAMDEATH1 :
case MENUACTION_MPMAP_TEAMDEATH2 :
case MENUACTION_MPMAP_STASH :
case MENUACTION_MPMAP_CAPTURE :
case MENUACTION_MPMAP_RATRACE :
case MENUACTION_MPMAP_DOMINATION :
sthWithButtons2 = option - MENUACTION_MPMAP_DEATHMATCH1 ;
CMenuManager : : SaveSettings ( ) ;
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_TargetMenu , 0 , true , true ) ;
break ;
case MENUACTION_REDEFCTRL :
ChangeScreen ( MENUPAGE_KEYBOARD_CONTROLS , 0 , true , true ) ;
m_nSelectedListRow = 0 ;
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
2020-03-17 19:03:13 +01:00
break ;
case MENUACTION_GETKEY :
m_CurrCntrlAction = GetStartOptionsCntrlConfigScreens ( ) + m_nCurrOption ;
m_bKeyIsOK = true ;
m_bWaitingForNewKeyBind = true ;
m_bStartWaitingForKeyBind = true ;
pControlEdit = & m_KeyPressedCode ;
break ;
case MENUACTION_CANCELGAME :
DMAudio . Service ( ) ;
RsEventHandler ( rsQUITAPP , nil ) ;
break ;
case MENUACTION_RESUME :
# ifndef TIDY_UP_PBP
if ( CMenuManager : : m_PrefsVsyncDisp ! = CMenuManager : : m_PrefsVsync ) {
CMenuManager : : m_PrefsVsync = CMenuManager : : m_PrefsVsyncDisp ;
}
CMenuManager : : RequestFrontEndShutDown ( ) ;
# else
goBack = true ;
# endif
break ;
case MENUACTION_DONTCANCEL :
ChangeScreen ( aScreens [ m_nCurrScreen ] . m_PreviousPage [ 1 ] , aScreens [ m_nCurrScreen ] . m_ParentEntry [ 1 ] , true , true ) ;
break ;
case MENUACTION_SCREENRES :
if ( m_nDisplayVideoMode ! = m_nPrefsVideoMode ) {
m_nPrefsVideoMode = m_nDisplayVideoMode ;
_psSelectScreenVM ( m_nPrefsVideoMode ) ;
SetHelperText ( 0 ) ;
SaveSettings ( ) ;
}
break ;
case MENUACTION_AUDIOHW :
{
int selectedProvider = m_nPrefsAudio3DProviderIndex ;
if ( selectedProvider ! = - 1 ) {
m_nPrefsAudio3DProviderIndex = DMAudio . SetCurrent3DProvider ( m_nPrefsAudio3DProviderIndex ) ;
if ( selectedProvider = = m_nPrefsAudio3DProviderIndex ) {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
SetHelperText ( 0 ) ;
} else {
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_FAIL , 0 ) ;
SetHelperText ( 4 ) ;
}
SaveSettings ( ) ;
}
break ;
}
case MENUACTION_SPEAKERCONF :
# ifndef TIDY_UP_PBP
if ( m_nPrefsAudio3DProviderIndex ! = - 1 ) {
if ( - - m_PrefsSpeakers < 0 )
m_PrefsSpeakers = 2 ;
DMAudio . SetSpeakerConfig ( m_PrefsSpeakers ) ;
SaveSettings ( ) ;
}
# else
assumeIncrease = true ;
# endif
break ;
case MENUACTION_PLAYERSETUP :
CPlayerSkin : : BeginFrontendSkinEdit ( ) ;
ChangeScreen ( MENUPAGE_SKIN_SELECT , 0 , true , true ) ;
2020-04-04 13:39:58 +02:00
m_nCurrExLayer = HOVEROPTION_LIST ;
m_bSkinsEnumerated = false ;
2020-03-17 19:03:13 +01:00
break ;
case MENUACTION_RESTOREDEF :
if ( m_nCurrScreen = = MENUPAGE_SOUND_SETTINGS ) {
CMenuManager : : m_PrefsSfxVolume = 102 ;
m_PrefsSpeakers = 0 ;
CMenuManager : : m_PrefsMusicVolume = 102 ;
// unused
// byte_95CDB5 = 0;
CMenuManager : : m_PrefsRadioStation = HEAD_RADIO ;
DMAudio . SetMusicMasterVolume ( 102 ) ;
DMAudio . SetEffectsMasterVolume ( CMenuManager : : m_PrefsSfxVolume ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
SaveSettings ( ) ;
} else if ( m_nCurrScreen = = MENUPAGE_GRAPHICS_SETTINGS ) {
CMenuManager : : m_PrefsFrameLimiter = true ;
CMenuManager : : m_PrefsBrightness = 256 ;
CMenuManager : : m_PrefsVsyncDisp = true ;
CMenuManager : : m_PrefsLOD = 1.2f ;
CMenuManager : : m_PrefsVsync = true ;
CRenderer : : ms_lodDistScale = 1.2f ;
CMenuManager : : m_PrefsUseWideScreen = false ;
CMenuManager : : m_PrefsShowSubtitles = true ;
m_nDisplayVideoMode = m_nPrefsVideoMode ;
CMBlur : : BlurOn = true ;
SaveSettings ( ) ;
} else if ( ( m_nCurrScreen ! = MENUPAGE_SKIN_SELECT_OLD ) & & ( m_nCurrScreen = = MENUPAGE_CONTROLLER_PC ) ) {
ControlsManager . MakeControllerActionsBlank ( ) ;
ControlsManager . InitDefaultControlConfiguration ( ) ;
ControlsManager . InitDefaultControlConfigMouse ( MousePointerStateHelper . GetMouseSetUp ( ) ) ;
if ( AllValidWinJoys . m_aJoys [ 0 ] . m_bInitialised ) {
DIDEVCAPS devCaps ;
devCaps . dwSize = sizeof ( DIDEVCAPS ) ;
PSGLOBAL ( joy1 ) - > GetCapabilities ( & devCaps ) ;
ControlsManager . InitDefaultControlConfigJoyPad ( devCaps . dwButtons ) ;
}
2020-04-02 12:48:01 +02:00
CMenuManager : : m_ControlMethod = CONTROL_STANDARD ;
2020-03-17 19:03:13 +01:00
MousePointerStateHelper . bInvertVertically = false ;
TheCamera . m_fMouseAccelHorzntl = 0.0025f ;
2020-03-31 04:54:19 +02:00
CVehicle : : m_bDisableMouseSteering = true ;
2020-03-17 19:03:13 +01:00
TheCamera . m_bHeadBob = false ;
SaveSettings ( ) ;
}
CMenuManager : : SetHelperText ( 2 ) ;
break ;
case MENUACTION_CTRLMETHOD :
# ifndef TIDY_UP_PBP
if ( CMenuManager : : m_ControlMethod = = CONTROL_CLASSIC ) {
CCamera : : m_bUseMouse3rdPerson = true ;
2020-04-02 12:48:01 +02:00
CMenuManager : : m_ControlMethod = CONTROL_STANDARD ;
2020-03-17 19:03:13 +01:00
} else {
CCamera : : m_bUseMouse3rdPerson = false ;
CMenuManager : : m_ControlMethod = CONTROL_CLASSIC ;
}
SaveSettings ( ) ;
# else
assumeIncrease = true ;
# endif
break ;
case MENUACTION_LOADRADIO :
ChangeScreen ( MENUPAGE_SOUND_SETTINGS , 0 , true , true ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " STARTED PLAYING FRONTEND AUDIO TRACK " ) ;
break ;
2019-07-10 09:57:08 +02:00
}
2019-07-10 13:42:48 +02:00
}
2020-03-17 19:03:13 +01:00
ProcessOnOffMenuOptions ( ) ;
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
if ( goBack ) {
CMenuManager : : ResetHelperText ( ) ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_EXIT , 0 ) ;
# ifdef PS2_LIKE_MENU
2020-03-25 15:13:06 +01:00
if ( m_nCurrScreen = = MENUPAGE_PAUSE_MENU | | bottomBarActive ) {
# else
if ( m_nCurrScreen = = MENUPAGE_PAUSE_MENU ) {
# endif
if ( ! m_bGameNotLoaded & & ! m_bMenuStateChanged ) {
2020-03-17 19:03:13 +01:00
if ( CMenuManager : : m_PrefsVsyncDisp ! = CMenuManager : : m_PrefsVsync ) {
CMenuManager : : m_PrefsVsync = CMenuManager : : m_PrefsVsyncDisp ;
}
CMenuManager : : RequestFrontEndShutDown ( ) ;
}
2020-03-25 15:13:06 +01:00
// We're already resuming, we don't need further processing.
# if defined(FIX_BUGS) || defined(PS2_LIKE_MENU)
2020-03-17 19:03:13 +01:00
return ;
2020-03-25 15:13:06 +01:00
# endif
}
# ifdef PS2_LIKE_MENU
else if ( m_nCurrScreen = = MENUPAGE_CHOOSE_SAVE_SLOT | | m_nCurrScreen = = MENUPAGE_SAVE ) {
# else
else if ( m_nCurrScreen = = MENUPAGE_CHOOSE_SAVE_SLOT ) {
# endif
CMenuManager : : RequestFrontEndShutDown ( ) ;
}
// It's now in ThingsToDoBeforeLeavingPage()
# ifndef TIDY_UP_PBP
else if ( m_nCurrScreen = = MENUPAGE_SOUND_SETTINGS ) {
DMAudio . StopFrontEndTrack ( ) ;
OutputDebugString ( " FRONTEND AUDIO TRACK STOPPED " ) ;
2020-03-17 19:03:13 +01:00
}
# endif
2020-03-25 15:13:06 +01:00
int oldScreen = ! m_bGameNotLoaded ? aScreens [ m_nCurrScreen ] . m_PreviousPage [ 1 ] : aScreens [ m_nCurrScreen ] . m_PreviousPage [ 0 ] ;
int oldOption = ! m_bGameNotLoaded ? aScreens [ m_nCurrScreen ] . m_ParentEntry [ 1 ] : aScreens [ m_nCurrScreen ] . m_ParentEntry [ 0 ] ;
2020-03-17 19:03:13 +01:00
if ( oldScreen ! = - 1 ) {
2020-03-25 15:13:06 +01:00
ThingsToDoBeforeLeavingPage ( ) ;
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
if ( ! bottomBarActive & &
( oldScreen = = MENUPAGE_NONE | | oldScreen = = MENUPAGE_OPTIONS ) ) {
bottomBarActive = true ;
} else
# endif
2020-03-25 15:13:06 +01:00
{
2020-03-17 19:03:13 +01:00
ChangeScreen ( oldScreen , oldOption , true , true ) ;
}
// We will go back for sure at this point, why process other things?!
# ifdef FIX_BUGS
return ;
# endif
}
2019-07-03 17:26:15 +02:00
}
2020-03-17 19:03:13 +01:00
# ifdef PS2_LIKE_MENU
if ( bottomBarActive )
return ;
# endif
int changeValueBy = 0 ;
bool decrease = false ;
# ifdef TIDY_UP_PBP
bool increase = assumeIncrease ;
# else
bool increase = false ;
# endif
if ( CPad : : GetPad ( 0 ) - > GetLeft ( ) | | CPad : : GetPad ( 0 ) - > GetPedWalkLeftRight ( ) < 0 | | CPad : : GetPad ( 0 ) - > GetDPadLeft ( ) ) {
static uint32 lastSliderDecrease = 0 ;
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - lastSliderDecrease > 150 ) {
CMenuManager : : CheckSliderMovement ( - 1 ) ;
lastSliderDecrease = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
}
} else if ( CPad : : GetPad ( 0 ) - > GetRight ( ) | | CPad : : GetPad ( 0 ) - > GetPedWalkLeftRight ( ) > 0 | | CPad : : GetPad ( 0 ) - > GetDPadRight ( ) ) {
static uint32 lastSliderIncrease = 0 ;
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) - lastSliderIncrease > 150 ) {
CMenuManager : : CheckSliderMovement ( 1 ) ;
lastSliderIncrease = CTimer : : GetTimeInMillisecondsPauseMode ( ) ;
}
}
if ( CPad : : GetPad ( 0 ) - > GetRightJustDown ( ) | | CPad : : GetPad ( 0 ) - > GetAnaloguePadRight ( ) | | CPad : : GetPad ( 0 ) - > GetDPadRightJustDown ( ) ) {
m_bShowMouse = false ;
increase = true ;
} else if ( CPad : : GetPad ( 0 ) - > GetMouseWheelUpJustDown ( ) & & m_nCurrScreen ! = MENUPAGE_KEYBOARD_CONTROLS ) {
increase = true ;
CMenuManager : : CheckSliderMovement ( 1 ) ;
m_bShowMouse = true ;
}
if ( ! CPad : : GetPad ( 0 ) - > GetLeftJustDown ( ) & & ! CPad : : GetPad ( 0 ) - > GetAnaloguePadLeft ( ) & & ! CPad : : GetPad ( 0 ) - > GetDPadLeftJustDown ( ) ) {
if ( CPad : : GetPad ( 0 ) - > GetMouseWheelDownJustDown ( ) ) {
if ( m_nCurrScreen ! = MENUPAGE_KEYBOARD_CONTROLS ) {
decrease = true ;
CMenuManager : : CheckSliderMovement ( - 1 ) ;
m_bShowMouse = true ;
}
}
} else {
m_bShowMouse = false ;
decrease = true ;
}
if ( increase )
changeValueBy + + ;
else if ( decrease )
changeValueBy - - ;
if ( changeValueBy ! = 0 ) {
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ) {
case MENUACTION_RADIO :
CMenuManager : : m_PrefsRadioStation + = changeValueBy ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
if ( DMAudio . IsMP3RadioChannelAvailable ( ) ) {
if ( CMenuManager : : m_PrefsRadioStation < HEAD_RADIO )
CMenuManager : : m_PrefsRadioStation = USERTRACK ;
if ( CMenuManager : : m_PrefsRadioStation > USERTRACK )
CMenuManager : : m_PrefsRadioStation = HEAD_RADIO ;
} else {
if ( CMenuManager : : m_PrefsRadioStation < HEAD_RADIO )
CMenuManager : : m_PrefsRadioStation = CHATTERBOX ;
if ( CMenuManager : : m_PrefsRadioStation > CHATTERBOX )
CMenuManager : : m_PrefsRadioStation = HEAD_RADIO ;
}
CMenuManager : : SaveSettings ( ) ;
DMAudio . SetRadioInCar ( CMenuManager : : m_PrefsRadioStation ) ;
DMAudio . PlayFrontEndTrack ( CMenuManager : : m_PrefsRadioStation , 1 ) ;
OutputDebugString ( " FRONTEND RADIO STATION CHANGED " ) ;
break ;
case MENUACTION_SCREENRES :
if ( m_bGameNotLoaded ) {
RwChar * * videoMods = _psGetVideoModeList ( ) ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
if ( changeValueBy > 0 ) {
do {
+ + m_nDisplayVideoMode ;
if ( m_nDisplayVideoMode > = _psGetNumVideModes ( ) )
m_nDisplayVideoMode = 0 ;
} while ( ! videoMods [ m_nDisplayVideoMode ] ) ;
} else {
do {
- - m_nDisplayVideoMode ;
if ( m_nDisplayVideoMode < 0 )
m_nDisplayVideoMode = _psGetNumVideModes ( ) - 1 ;
} while ( ! videoMods [ m_nDisplayVideoMode ] ) ;
}
}
break ;
case MENUACTION_AUDIOHW :
if ( m_nPrefsAudio3DProviderIndex ! = - 1 ) {
m_nPrefsAudio3DProviderIndex + = changeValueBy ;
m_nPrefsAudio3DProviderIndex = clamp ( m_nPrefsAudio3DProviderIndex , 0 , DMAudio . GetNum3DProvidersAvailable ( ) - 1 ) ;
}
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
break ;
case MENUACTION_SPEAKERCONF :
if ( m_nPrefsAudio3DProviderIndex ! = - 1 ) {
m_PrefsSpeakers - = changeValueBy ;
m_PrefsSpeakers = clamp ( m_PrefsSpeakers , 0 , 2 ) ;
DMAudio . SetSpeakerConfig ( m_PrefsSpeakers ) ;
CMenuManager : : SaveSettings ( ) ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
}
break ;
case MENUACTION_CTRLMETHOD :
CMenuManager : : m_ControlMethod = ! m_ControlMethod ;
CCamera : : m_bUseMouse3rdPerson = ! m_ControlMethod ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
CMenuManager : : SaveSettings ( ) ;
break ;
}
ProcessOnOffMenuOptions ( ) ;
if ( m_nCurrScreen = = MENUPAGE_KEYBOARD_CONTROLS ) {
if ( changeValueBy < 1 ) {
2020-04-04 13:39:58 +02:00
m_nSelectedContSetupColumn = CONTSETUP_PED_COLUMN ;
2020-03-17 19:03:13 +01:00
} else {
2020-04-04 13:39:58 +02:00
m_nSelectedContSetupColumn = CONTSETUP_VEHICLE_COLUMN ;
2020-03-17 19:03:13 +01:00
}
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_DENIED , 0 ) ;
}
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
}
# endif
2020-01-07 15:23:09 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : ProcessOnOffMenuOptions ( ) { EAXJMP ( 0x48AE60 ) ; }
# else
void CMenuManager : : ProcessOnOffMenuOptions ( )
{
2019-07-03 17:26:15 +02:00
switch ( aScreens [ m_nCurrScreen ] . m_aEntries [ m_nCurrOption ] . m_Action ) {
case MENUACTION_CTRLVIBRATION :
2020-01-07 15:23:09 +01:00
m_PrefsUseVibration = ! m_PrefsUseVibration ;
2019-07-03 17:26:15 +02:00
if ( m_PrefsUseVibration ) {
CPad : : GetPad ( 0 ) - > StartShake ( 350 , 150 ) ;
2019-11-09 16:17:54 +01:00
TimeToStopPadShaking = CTimer : : GetTimeInMillisecondsPauseMode ( ) + 500 ;
2019-07-03 17:26:15 +02:00
}
2020-01-07 15:23:09 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
break ;
case MENUACTION_CTRLCONFIG :
CPad : : GetPad ( 0 ) - > Mode + + ;
if ( CPad : : GetPad ( 0 ) - > Mode > 3 )
CPad : : GetPad ( 0 ) - > Mode = 0 ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
break ;
case MENUACTION_CTRLDISPLAY :
m_DisplayControllerOnFoot = ! m_DisplayControllerOnFoot ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
break ;
case MENUACTION_FRAMESYNC :
2020-01-07 15:23:09 +01:00
m_PrefsVsyncDisp = ! m_PrefsVsyncDisp ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
case MENUACTION_FRAMELIMIT :
2020-01-07 15:23:09 +01:00
m_PrefsFrameLimiter = ! m_PrefsFrameLimiter ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
case MENUACTION_TRAILS :
2020-01-07 15:23:09 +01:00
CMBlur : : BlurOn = ! CMBlur : : BlurOn ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
SaveSettings ( ) ;
2019-07-03 17:26:15 +02:00
if ( CMBlur : : BlurOn )
CMBlur : : MotionBlurOpen ( Scene . camera ) ;
else
CMBlur : : MotionBlurClose ( ) ;
break ;
case MENUACTION_SUBTITLES :
2020-01-07 15:23:09 +01:00
m_PrefsShowSubtitles = ! m_PrefsShowSubtitles ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
case MENUACTION_WIDESCREEN :
# ifndef ASPECT_RATIO_SCALE
2020-01-07 15:23:09 +01:00
m_PrefsUseWideScreen = ! m_PrefsUseWideScreen ;
2019-07-03 17:26:15 +02:00
# else
2020-01-07 15:23:09 +01:00
m_PrefsUseWideScreen + + ;
2020-03-17 19:03:13 +01:00
if ( m_PrefsUseWideScreen > 2 )
2020-01-07 15:23:09 +01:00
m_PrefsUseWideScreen = 0 ;
2019-07-03 17:26:15 +02:00
# endif
2020-01-07 15:23:09 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
case MENUACTION_SETDBGFLAG :
2020-02-23 11:12:44 +01:00
CTheScripts : : InvertDebugFlag ( ) ;
2020-01-07 15:23:09 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_SWITCHBIGWHITEDEBUGLIGHT :
gbBigWhiteDebugLightSwitchedOn = ! gbBigWhiteDebugLightSwitchedOn ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_PEDROADGROUPS :
gbShowPedRoadGroups = ! gbShowPedRoadGroups ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-10 09:57:08 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_CARROADGROUPS :
gbShowCarRoadGroups = ! gbShowCarRoadGroups ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_COLLISIONPOLYS :
gbShowCollisionPolys = ! gbShowCollisionPolys ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_MP_PLAYERCOLOR :
assert ( 0 & & " Not implemented " ) ;
2019-07-03 17:26:15 +02:00
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_SHOWHEADBOB :
TheCamera . m_bHeadBob = ! TheCamera . m_bHeadBob ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_INVVERT :
MousePointerStateHelper . bInvertVertically = ! MousePointerStateHelper . bInvertVertically ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
2020-03-17 19:03:13 +01:00
case MENUACTION_DYNAMICACOUSTIC :
2020-01-07 15:23:09 +01:00
m_PrefsDMA = ! m_PrefsDMA ;
DMAudio . SetDynamicAcousticModelingStatus ( m_PrefsDMA ) ;
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
2020-01-07 15:23:09 +01:00
case MENUACTION_MOUSESTEER :
2020-03-31 04:54:19 +02:00
CVehicle : : m_bDisableMouseSteering = ! CVehicle : : m_bDisableMouseSteering ;
2020-01-07 15:23:09 +01:00
DMAudio . PlayFrontEndSound ( SOUND_FRONTEND_MENU_SUCCESS , 0 ) ;
2019-07-03 17:26:15 +02:00
SaveSettings ( ) ;
break ;
2019-07-10 13:42:48 +02:00
}
2019-06-25 02:34:29 +02:00
}
# endif
2020-03-17 19:03:13 +01:00
void CMenuManager : : RequestFrontEndShutDown ( )
2019-06-25 02:34:29 +02:00
{
m_bShutDownFrontEndRequested = true ;
2019-10-26 15:02:59 +02:00
DMAudio . ChangeMusicMode ( MUSICMODE_GAME ) ;
2019-06-25 02:34:29 +02:00
}
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : RequestFrontEndStartUp ( ) { EAXJMP ( 0x488770 ) ; }
# else
void CMenuManager : : RequestFrontEndStartUp ( )
{
2020-03-17 19:03:13 +01:00
m_bStartUpFrontEndRequested = true ;
2019-06-25 02:34:29 +02:00
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : ResetHelperText ( ) { EAXJMP ( 0x48B470 ) ; }
# else
void CMenuManager : : ResetHelperText ( )
{
m_nHelperTextMsgId = 0 ;
m_nHelperTextAlpha = 300 ;
}
# endif
void CMenuManager : : SaveLoadFileError_SetUpErrorScreen ( )
{
2020-01-14 00:13:42 +01:00
switch ( PcSaveHelper . nErrorCode ) {
case SAVESTATUS_ERR_SAVE_CREATE :
case SAVESTATUS_ERR_SAVE_WRITE :
case SAVESTATUS_ERR_SAVE_CLOSE :
2020-03-17 19:03:13 +01:00
ChangeScreen ( MENUPAGE_SAVE_FAILED , 0 , true , false ) ;
2019-11-09 16:17:54 +01:00
break ;
2020-01-14 00:13:42 +01:00
case SAVESTATUS_ERR_LOAD_OPEN :
case SAVESTATUS_ERR_LOAD_READ :
case SAVESTATUS_ERR_LOAD_CLOSE :
2020-03-17 19:03:13 +01:00
ChangeScreen ( MENUPAGE_LOAD_FAILED , 0 , true , false ) ;
2019-11-09 16:17:54 +01:00
break ;
2020-01-14 00:13:42 +01:00
case SAVESTATUS_ERR_DATA_INVALID :
2020-03-17 19:03:13 +01:00
ChangeScreen ( MENUPAGE_LOAD_FAILED_2 , 0 , true , false ) ;
2019-11-09 16:17:54 +01:00
break ;
2020-01-14 00:13:42 +01:00
case SAVESTATUS_DELETEFAILED8 :
case SAVESTATUS_DELETEFAILED9 :
case SAVESTATUS_DELETEFAILED10 :
2020-03-17 19:03:13 +01:00
ChangeScreen ( MENUPAGE_DELETE_FAILED , 0 , true , false ) ;
2019-11-09 16:17:54 +01:00
break ;
2019-07-03 17:26:15 +02:00
}
2019-06-25 02:34:29 +02:00
}
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-07-10 13:42:48 +02:00
WRAPPER void CMenuManager : : SetHelperText ( int text ) { EAXJMP ( 0x48B450 ) ; }
2019-06-25 02:34:29 +02:00
# else
void CMenuManager : : SetHelperText ( int text )
{
m_nHelperTextMsgId = text ;
m_nHelperTextAlpha = 300 ;
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : ShutdownJustMenu ( ) { EAXJMP ( 0x488920 ) ; }
# else
void CMenuManager : : ShutdownJustMenu ( )
{
m_bMenuActive = false ;
CTimer : : EndUserPause ( ) ;
}
# endif
float CMenuManager : : StretchX ( float x )
{
2019-11-09 16:17:54 +01:00
if ( SCREEN_WIDTH = = DEFAULT_SCREEN_WIDTH )
2019-06-25 02:34:29 +02:00
return x ;
else
2019-11-09 16:17:54 +01:00
// We won't make this SCREEN_SCALE, because many cases relies on stretching and we want the code to be portable.
// Instead we will use MENU_X_LEFT_ALIGNED or SCREEN_SCALE_X when needed.
return SCREEN_STRETCH_X ( x ) ;
2019-06-25 02:34:29 +02:00
}
float CMenuManager : : StretchY ( float y )
{
2019-11-09 16:17:54 +01:00
if ( SCREEN_HEIGHT = = DEFAULT_SCREEN_HEIGHT )
2019-06-25 02:34:29 +02:00
return y ;
else
2019-11-09 16:17:54 +01:00
return SCREEN_STRETCH_Y ( y ) ;
2019-06-25 02:34:29 +02:00
}
2020-01-07 15:23:09 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : SwitchMenuOnAndOff ( ) { EAXJMP ( 0x488790 ) ; }
# else
void CMenuManager : : SwitchMenuOnAndOff ( )
{
2020-03-25 15:13:06 +01:00
bool menuWasActive = ! ! m_bMenuActive ;
2020-01-07 15:23:09 +01:00
2020-03-25 15:13:06 +01:00
// Reminder: You need REGISTER_START_BUTTON defined to make it work.
if ( CPad : : GetPad ( 0 ) - > GetStartJustDown ( )
# ifdef FIX_BUGS
& & ! m_bGameNotLoaded
# endif
| | m_bShutDownFrontEndRequested | | m_bStartUpFrontEndRequested ) {
m_bMenuActive = ! m_bMenuActive ;
2019-07-03 17:26:15 +02:00
if ( m_bShutDownFrontEndRequested )
m_bMenuActive = false ;
if ( m_bStartUpFrontEndRequested )
m_bMenuActive = true ;
if ( m_bMenuActive ) {
CTimer : : StartUserPause ( ) ;
2020-03-25 15:13:06 +01:00
} else {
# ifdef PS2_LIKE_MENU
bottomBarActive = false ;
# endif
# ifdef FIX_BUGS
ThingsToDoBeforeLeavingPage ( ) ;
# endif
2019-07-03 17:26:15 +02:00
ShutdownJustMenu ( ) ;
SaveSettings ( ) ;
m_bStartUpFrontEndRequested = false ;
2019-07-10 13:42:48 +02:00
pControlEdit = nil ;
2019-07-03 17:26:15 +02:00
m_bShutDownFrontEndRequested = false ;
DisplayComboButtonErrMsg = 0 ;
CPad : : GetPad ( 0 ) - > Clear ( 0 ) ;
CPad : : GetPad ( 1 ) - > Clear ( 0 ) ;
2020-01-07 15:23:09 +01:00
m_nCurrScreen = MENUPAGE_NONE ;
2019-07-03 17:26:15 +02:00
}
}
2020-03-17 19:03:13 +01:00
// Just entered the save/safe zone
2019-07-03 17:26:15 +02:00
if ( m_bSaveMenuActive & & ! m_bQuitGameNoCD ) {
m_bSaveMenuActive = false ;
m_bMenuActive = true ;
CTimer : : StartUserPause ( ) ;
2020-01-07 15:23:09 +01:00
# ifdef PS2_SAVE_DIALOG
m_nCurrScreen = MENUPAGE_SAVE ;
m_bRenderGameInMenu = true ;
# else
m_nCurrScreen = MENUPAGE_CHOOSE_SAVE_SLOT ;
# endif
2019-07-03 17:26:15 +02:00
PcSaveHelper . PopulateSlotInfo ( ) ;
2020-01-07 15:23:09 +01:00
m_nCurrOption = 0 ;
2019-07-03 17:26:15 +02:00
}
2020-03-28 15:47:52 +01:00
/* // PS2 leftover
2020-01-07 15:23:09 +01:00
if ( m_nCurrScreen ! = MENUPAGE_SOUND_SETTINGS & & gMusicPlaying )
{
DMAudio . StopFrontEndTrack ( ) ;
OutputDebugString ( " FRONTEND AUDIO TRACK STOPPED " ) ;
gMusicPlaying = 0 ;
}
*/
2020-03-25 15:13:06 +01:00
if ( m_bMenuActive ! = menuWasActive )
m_bMenuStateChanged = true ;
2019-07-03 17:26:15 +02:00
m_bStartUpFrontEndRequested = false ;
m_bShutDownFrontEndRequested = false ;
2019-06-25 02:34:29 +02:00
}
# endif
2020-01-07 15:23:09 +01:00
#if 0
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : UnloadTextures ( ) { EAXJMP ( 0x47A440 ) ; }
# else
void CMenuManager : : UnloadTextures ( )
{
2020-01-07 15:23:09 +01:00
if ( ! m_bSpritesLoaded )
return ;
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
printf ( " REMOVE frontend \n " ) ;
for ( int i = 0 ; i < ARRAY_SIZE ( FrontendFilenames ) ; + + i )
m_aFrontEndSprites [ i ] . Delete ( ) ;
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
int frontend = CTxdStore : : FindTxdSlot ( " frontend " ) ;
CTxdStore : : RemoveTxd ( frontend ) ;
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
printf ( " REMOVE menu textures \n " ) ;
for ( int i = 0 ; i < ARRAY_SIZE ( MenuFilenames ) ; + + i )
m_aMenuSprites [ i ] . Delete ( ) ;
2019-06-25 02:34:29 +02:00
2020-01-07 15:23:09 +01:00
int menu = CTxdStore : : FindTxdSlot ( " menu " ) ;
CTxdStore : : RemoveTxd ( menu ) ;
m_bSpritesLoaded = false ;
2019-06-25 02:34:29 +02:00
}
# endif
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-06-25 02:34:29 +02:00
WRAPPER void CMenuManager : : WaitForUserCD ( void ) { EAXJMP ( 0x48ADD0 ) ; }
# else
void CMenuManager : : WaitForUserCD ( )
{
2019-07-03 17:26:15 +02:00
LoadSplash ( 0 ) ;
if ( ! RsGlobal . quit ) {
HandleExit ( ) ;
CPad : : UpdatePads ( ) ;
MessageScreen ( " NO_PCCD " ) ;
if ( GetPadBack ( ) ) {
m_bQuitGameNoCD = true ;
RsEventHandler ( rsQUITAPP , 0 ) ;
}
}
2019-07-02 21:22:16 +02:00
}
2019-07-02 22:05:11 +02:00
# endif
2019-07-02 21:22:16 +02:00
2020-04-04 13:39:58 +02:00
void
CMenuManager : : PrintController ( void )
{
// FIX: Originally this function doesn't have StretchX/Y, everything had constant pixel size (due to screen was abandoned early?)
// Also texts and their alignment were very bad, so I tried to make them readable (commented out the original code, and marked the ones I added with X)
m_aFrontEndSprites [ FE_CONTROLLERSH ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 240.0f ) , MENU_Y ( 180.0f ) , CRGBA ( 0 , 0 , 0 , 255 ) ) ;
m_aFrontEndSprites [ FE_CONTROLLER ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 235.2f ) , MENU_Y ( 175.2f ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
if ( m_DisplayControllerOnFoot ) {
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) & 0x400 )
m_aFrontEndSprites [ FE_ARROWS1 ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 235.2f ) , MENU_Y ( 175.2f ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
else
m_aFrontEndSprites [ FE_ARROWS3 ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 235.2f ) , MENU_Y ( 175.2f ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
} else {
if ( CTimer : : GetTimeInMillisecondsPauseMode ( ) & 0x400 )
m_aFrontEndSprites [ FE_ARROWS2 ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 235.2f ) , MENU_Y ( 175.2f ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
else
m_aFrontEndSprites [ FE_ARROWS4 ] . Draw ( MENU_X_LEFT_ALIGNED ( 160.0f ) , MENU_Y ( 160.0f ) , MENU_X ( 235.2f ) , MENU_Y ( 175.2f ) , CRGBA ( 255 , 255 , 255 , 255 ) ) ;
}
CFont : : SetFontStyle ( FONT_BANK ) ; // X
// CFont::SetScale(0.4f, 0.4f);
CFont : : SetScale ( MENU_X ( SMALLTEXT_X_SCALE ) , MENU_Y ( SMALLTEXT_Y_SCALE ) ) ; // X
// CFont::SetColor(CRGBA(128, 128, 128, FadeIn(255)));
CFont : : SetDropColor ( CRGBA ( 0 , 0 , 0 , FadeIn ( 255 ) ) ) ; // X
CFont : : SetDropShadowPosition ( 1 ) ; // X
CFont : : SetColor ( CRGBA ( 255 , 255 , 255 , FadeIn ( 255 ) ) ) ; // X
if ( m_DisplayControllerOnFoot ) {
switch ( CPad : : GetPad ( 0 ) - > Mode ) {
case 0 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LOF " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_TAR " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_JUM " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_ENV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_ATT " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_RUN " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_FPC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_LB3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_R3 " ) ) ;
break ;
case 1 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LOF " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_NA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_TAR " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_JUM " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_ENV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_ATT " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_RUN " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_FPC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_LB3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_R3 " ) ) ;
break ;
case 2 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_ENV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_TAR " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_JUM " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_LOF " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_RUN " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_ATT " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_FPC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_LB3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_R3 " ) ) ;
break ;
case 3 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_TAR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_NA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_MOV " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_CWR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_TAR " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_JUM " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_LOF " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_RUN " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_ATT " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_FPC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_LB3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_R3 " ) ) ;
break ;
default :
return ;
}
} else {
switch ( CPad : : GetPad ( 0 ) - > Mode ) {
case 0 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_LL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_RSC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_HO3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LB " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_LR " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_HAB " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_BRA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_EXV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_CAW " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_ACC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_TUC " ) ) ;
// FIX: Coordinates of this line is undefined in PC...
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 304.0f ) , TheText . Get ( " FEC_SM3 " ) ) ;
break ;
case 1 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_LL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_HOR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_NA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_RSC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LB " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_LR " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_HAB " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_BRA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_EXV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_CAW " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_ACC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_TUC " ) ) ;
// FIX: Coordinates of this line is undefined in PC...
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 304.0f ) , TheText . Get ( " FEC_SM3 " ) ) ;
break ;
case 2 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_LL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_EXV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_RS3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LB " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_LR " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_HOR " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_BRA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_HAB " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_CAW " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_ACC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_TUC " ) ) ;
// FIX: Coordinates of this line is undefined in PC...
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 304.0f ) , TheText . Get ( " FEC_SM3 " ) ) ;
break ;
case 3 :
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 210.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_LL " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_HAB " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_TUC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 156.0f ) , MENU_Y ( 257.0f ) , TheText . Get ( " FEC_VES " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 263.0f ) , MENU_Y ( 301.0f ) , TheText . Get ( " FEC_HO3 " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 290.0f ) , MENU_Y ( 288.0f ) , TheText . Get ( " FEC_CAM " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 344.0f ) , MENU_Y ( 146.0f ) , TheText . Get ( " FEC_PAU " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 185.0f ) , TheText . Get ( " FEC_LB " ) ) ;
CFont : : SetRightJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 304.0f ) , MENU_Y ( 178.0f ) , TheText . Get ( " FEC_LR " ) ) ;
CFont : : SetJustifyOn ( ) ; // X
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 212.0f ) , TheText . Get ( " FEC_CAW " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 225.0f ) , TheText . Get ( " FEC_SMT " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 238.0f ) , TheText . Get ( " FEC_EXV " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 254.0f ) , TheText . Get ( " FEC_RSC " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 269.0f ) , TheText . Get ( " FEC_NA " ) ) ;
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 282.0f ) , TheText . Get ( " FEC_ACC " ) ) ;
// FIX: Coordinates of this line is undefined in PC...
CFont : : PrintString ( MENU_X_LEFT_ALIGNED ( 398.0f ) , MENU_Y ( 304.0f ) , TheText . Get ( " FEC_BRA " ) ) ;
break ;
default :
return ;
}
}
}
2019-07-14 12:46:36 +02:00
#if 0
2019-07-03 17:26:15 +02:00
uint8 CMenuManager : : GetNumberOfMenuOptions ( )
{
2019-07-14 12:46:36 +02:00
uint8 Rows = - 1 ;
for ( int i = 0 ; i < NUM_MENUROWS ; i + + ) {
2019-07-03 17:26:15 +02:00
if ( aScreens [ m_nCurrScreen ] . m_aEntries [ i ] . m_Action = = MENUACTION_NOTHING )
break ;
+ + Rows ;
2019-07-10 13:42:48 +02:00
}
2019-07-03 17:26:15 +02:00
return Rows ;
}
2019-07-14 12:46:36 +02:00
# endif
2019-07-03 17:26:15 +02:00
2019-06-15 01:34:19 +02:00
STARTPATCHES
2020-03-17 19:03:13 +01:00
# if DONT_USE_SUSPICIOUS_FUNCS
2019-07-11 23:29:59 +02:00
# else
2019-06-25 02:34:29 +02:00
for ( int i = 1 ; i < ARRAY_SIZE ( aScreens ) ; i + + )
Patch ( 0x611930 + sizeof ( CMenuScreen ) * i , aScreens [ i ] ) ;
2019-07-10 13:42:48 +02:00
# endif
2020-03-17 19:03:13 +01:00
InjectHook ( 0x4856F0 , & CMenuManager : : ProcessButtonPresses , PATCH_JUMP ) ;
2019-11-09 16:17:54 +01:00
InjectHook ( 0x485100 , & CMenuManager : : Process , PATCH_JUMP ) ;
InjectHook ( 0x47A230 , & CMenuManager : : LoadAllTextures , PATCH_JUMP ) ;
InjectHook ( 0x47A540 , & CMenuManager : : DrawFrontEnd , PATCH_JUMP ) ;
2019-07-14 12:46:36 +02:00
2019-11-09 16:17:54 +01:00
InjectHook ( 0x48ABE0 , & CMenuManager : : StretchX , PATCH_JUMP ) ;
InjectHook ( 0x48AC20 , & CMenuManager : : StretchY , PATCH_JUMP ) ;
2019-07-14 12:46:36 +02:00
InjectHook ( 0x488EE0 , & CMenuManager : : LoadSettings , PATCH_JUMP ) ;
InjectHook ( 0x488CC0 , & CMenuManager : : SaveSettings , PATCH_JUMP ) ;
2020-01-07 15:23:09 +01:00
InjectHook ( 0x47A440 , & CMenuManager : : UnloadTextures , PATCH_JUMP ) ;
InjectHook ( 0x48AB40 , & CMenuManager : : DoSettingsBeforeStartingAGame , PATCH_JUMP ) ;
InjectHook ( 0x48AE60 , & CMenuManager : : ProcessOnOffMenuOptions , PATCH_JUMP ) ;
2020-04-04 13:39:58 +02:00
InjectHook ( 0x489710 , & CMenuManager : : DrawControllerBound , PATCH_JUMP ) ;
2019-06-15 01:34:19 +02:00
ENDPATCHES