mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
- Fixed some compilation warnings git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2655 3b4a5df2-a311-0410-b5c6-a8a6f20db521
638 lines
20 KiB
C++
638 lines
20 KiB
C++
#ifdef PRECOMPILEDHEADERS
|
|
#include "JA2 All.h"
|
|
#include "Intro.h"
|
|
#else
|
|
#include "Types.h"
|
|
#include "MPScoreScreen.h"
|
|
#include "GameSettings.h"
|
|
#include "Utilities.h"
|
|
#include "wCheck.h"
|
|
#include "Font Control.h"
|
|
#include "WordWrap.h"
|
|
#include "Render Dirty.h"
|
|
#include "Input.h"
|
|
#include "Options Screen.h"
|
|
#include "English.h"
|
|
#include "Sysutil.h"
|
|
#include "Fade Screen.h"
|
|
#include "Cursor Control.h"
|
|
#include "Music Control.h"
|
|
#include "cursors.h"
|
|
#include "Intro.h"
|
|
#include "Text.h"
|
|
#include "Text Input.h"
|
|
#include "_Ja25EnglishText.h"
|
|
#include "Soldier Profile.h"
|
|
#endif
|
|
|
|
#include "gameloop.h"
|
|
#include "Game Init.h"
|
|
#include "connect.h"
|
|
#include "network.h" // for client name
|
|
#include "saveloadscreen.h"
|
|
|
|
|
|
////////////////////////////////////////////
|
|
//
|
|
// Global Defines
|
|
//
|
|
///////////////////////////////////////////
|
|
|
|
#define MPS_TITLE_FONT FONT14ARIAL//FONT16ARIAL
|
|
#define MPS_TITLE_COLOR FONT_MCOLOR_WHITE
|
|
|
|
#define MPS_LABEL_TEXT_FONT FONT12ARIAL//FONT16ARIAL
|
|
#define MPS_LABEL_TEXT_COLOR FONT_MCOLOR_WHITE
|
|
|
|
//buttons
|
|
#define MPS_BTN_CONTINUE_X iScreenWidthOffset + 320 + 143
|
|
#define MPS_BTN_CONTINUE_Y iScreenHeightOffset + 435
|
|
//#define MPJ_BTN_HOST_X MPJ_BTN_JOIN_X-180
|
|
//#define MPJ_BTN_HOST_Y iScreenHeightOffset + 435
|
|
#define MPS_BTN_CANCEL_X iScreenWidthOffset + ((320 - 115) / 2)
|
|
#define MPS_BTN_CANCEL_Y MPS_BTN_CONTINUE_Y
|
|
|
|
//main title
|
|
#define MPS_MAIN_TITLE_X 0
|
|
#define MPS_MAIN_TITLE_Y iScreenHeightOffset + 10
|
|
#define MPS_MAIN_TITLE_WIDTH SCREEN_WIDTH
|
|
|
|
//labels
|
|
#define MPS_LABEL_PLAYER_X iScreenWidthOffset + 80
|
|
#define MPS_LABEL_PLAYER_Y iScreenHeightOffset + 80
|
|
#define MPS_LABEL_PLAYER_WIDTH 80
|
|
#define MPS_LABEL_KILLS_X MPS_LABEL_PLAYER_X + MPS_LABEL_PLAYER_WIDTH + 20
|
|
#define MPS_LABEL_KILLS_Y MPS_LABEL_PLAYER_Y
|
|
#define MPS_LABEL_KILLS_WIDTH 50
|
|
#define MPS_LABEL_DEATHS_X MPS_LABEL_KILLS_X + MPS_LABEL_KILLS_WIDTH + 20
|
|
#define MPS_LABEL_DEATHS_Y MPS_LABEL_PLAYER_Y
|
|
#define MPS_LABEL_DEATHS_WIDTH 50
|
|
#define MPS_LABEL_HITS_X MPS_LABEL_DEATHS_X + MPS_LABEL_DEATHS_WIDTH + 20
|
|
#define MPS_LABEL_HITS_Y MPS_LABEL_PLAYER_Y
|
|
#define MPS_LABEL_HITS_WIDTH 50
|
|
#define MPS_LABEL_MISSES_X MPS_LABEL_HITS_X + MPS_LABEL_HITS_WIDTH + 20
|
|
#define MPS_LABEL_MISSES_Y MPS_LABEL_PLAYER_Y
|
|
#define MPS_LABEL_MISSES_WIDTH 50
|
|
#define MPS_LABEL_ACCURACY_X MPS_LABEL_MISSES_X + MPS_LABEL_MISSES_WIDTH + 20
|
|
#define MPS_LABEL_ACCURACY_Y MPS_LABEL_PLAYER_Y
|
|
#define MPS_LABEL_ACCURACY_WIDTH 70
|
|
|
|
|
|
#define MPS_PLAYERLIST_Y MPS_LABEL_PLAYER_Y + 30
|
|
#define MPS_PLAYER_GAP 17
|
|
|
|
|
|
|
|
////////////////////////////////////////////
|
|
//
|
|
// Global Variables
|
|
//
|
|
///////////////////////////////////////////
|
|
|
|
BOOLEAN gfMPSScreenEntry = TRUE;
|
|
BOOLEAN gfMPSScreenExit = FALSE;
|
|
BOOLEAN gfReRenderMPSScreen=TRUE;
|
|
BOOLEAN gfMPSButtonsAllocated = FALSE;
|
|
|
|
//enum for different states of screen
|
|
enum
|
|
{
|
|
MPS_NOTHING,
|
|
MPS_CANCEL,
|
|
MPS_CONTINUE,
|
|
};
|
|
|
|
UINT8 gubMPSScreenHandler=MPS_NOTHING; // State changer for HandleMPJScreen()
|
|
|
|
UINT32 gubMPSExitScreen = MP_SCORE_SCREEN; // The screen that is in control next iteration of the game_loop
|
|
|
|
UINT32 guiMPSMainBackGroundImage;
|
|
|
|
////////////////////////////////////////////
|
|
//
|
|
// Screen Controls
|
|
//
|
|
///////////////////////////////////////////
|
|
|
|
// Cancel Button
|
|
void BtnMPSCancelCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiMPSCancelButton;
|
|
INT32 giMPSCancelBtnImage;
|
|
|
|
// Continue Button
|
|
void BtnMPSContinueCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiMPSContinueButton;
|
|
INT32 giMPSContinueBtnImage;
|
|
|
|
// Message Box handle
|
|
INT8 giMPSMessageBox = -1;
|
|
|
|
|
|
////////////////////////////////////////////
|
|
//
|
|
// Local Function Prototypes
|
|
//
|
|
///////////////////////////////////////////
|
|
|
|
extern void ClearMainMenu();
|
|
|
|
BOOLEAN EnterMPSScreen();
|
|
BOOLEAN ExitMPSScreen();
|
|
void HandleMPSScreen();
|
|
BOOLEAN RenderMPSScreen();
|
|
|
|
void GetMPSScreenUserInput();
|
|
void DoneFadeOutForExitMPSScreen( void );
|
|
void DoneFadeInForExitMPSScreen( void );
|
|
|
|
UINT32 MPScoreScreenInit( void )
|
|
{
|
|
return (1);
|
|
}
|
|
|
|
UINT32 MPScoreScreenHandle( void )
|
|
{
|
|
StartFrameBufferRender();
|
|
|
|
if( gfMPSScreenEntry )
|
|
{
|
|
// PauseGame();
|
|
|
|
EnterMPSScreen();
|
|
gfMPSScreenEntry = FALSE;
|
|
gfMPSScreenExit = FALSE;
|
|
InvalidateRegion( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
}
|
|
|
|
GetMPSScreenUserInput();
|
|
|
|
|
|
HandleMPSScreen();
|
|
|
|
// render buttons marked dirty
|
|
MarkButtonsDirty( );
|
|
RenderButtons( );
|
|
|
|
// render text boxes
|
|
RenderAllTextFields(); // textbox system call
|
|
|
|
// render help
|
|
// RenderFastHelp( );
|
|
// RenderButtonsFastHelp( );
|
|
|
|
|
|
ExecuteBaseDirtyRectQueue();
|
|
EndFrameBufferRender();
|
|
|
|
// handle fades in and out
|
|
if ( HandleFadeOutCallback( ) )
|
|
{
|
|
ClearMainMenu();
|
|
return( gubMPSExitScreen );
|
|
}
|
|
|
|
if ( HandleBeginFadeOut( gubMPSExitScreen ) )
|
|
{
|
|
return( gubMPSExitScreen );
|
|
}
|
|
|
|
if ( HandleFadeInCallback( ) )
|
|
{
|
|
// Re-render the scene!
|
|
RenderMPSScreen();
|
|
}
|
|
|
|
if ( HandleBeginFadeIn( gubMPSExitScreen ) )
|
|
{
|
|
|
|
}
|
|
|
|
if( gfMPSScreenExit ) // we are exiting this screen
|
|
{
|
|
ExitMPSScreen(); // perform destruction
|
|
}
|
|
|
|
return( gubMPSExitScreen );
|
|
} // end MPScoreScreenHandle()
|
|
|
|
UINT32 MPScoreScreenShutdown( void )
|
|
{
|
|
return( 1 );
|
|
}
|
|
|
|
BOOLEAN EnterMPSScreen()
|
|
{
|
|
VOBJECT_DESC VObjectDesc;
|
|
|
|
if( gfMPSButtonsAllocated )
|
|
return( TRUE );
|
|
|
|
SetCurrentCursorFromDatabase( CURSOR_NORMAL );
|
|
|
|
// load the Main trade screen backgroiund image
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
|
|
if (iResolution == 0)
|
|
{
|
|
FilenameForBPP("INTERFACE\\OptionsScreenBackGround.sti", VObjectDesc.ImageFile);
|
|
}
|
|
else if (iResolution == 1)
|
|
{
|
|
FilenameForBPP("INTERFACE\\OptionsScreenBackGround_800x600.sti", VObjectDesc.ImageFile);
|
|
}
|
|
else if (iResolution == 2)
|
|
{
|
|
FilenameForBPP("INTERFACE\\OptionsScreenBackGround_1024x768.sti", VObjectDesc.ImageFile);
|
|
}
|
|
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiMPSMainBackGroundImage ));
|
|
|
|
//Cancel button
|
|
giMPSCancelBtnImage = LoadButtonImage("INTERFACE\\PreferencesButtons.sti", -1,0,-1,2,-1 );
|
|
guiMPSCancelButton = CreateIconAndTextButton( giMPSCancelBtnImage, gzMPSScreenText[MPS_CANCEL_TEXT], OPT_BUTTON_FONT,
|
|
OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
|
|
OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
|
|
TEXT_CJUSTIFIED,
|
|
MPS_BTN_CANCEL_X, MPS_BTN_CANCEL_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnMPSCancelCallback);
|
|
|
|
SpecifyButtonSoundScheme( guiMPSCancelButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
|
|
SpecifyDisabledButtonStyle( guiMPSCancelButton, DISABLED_STYLE_NONE );
|
|
|
|
//Continue button
|
|
giMPSContinueBtnImage = UseLoadedButtonImage( giMPSCancelBtnImage, -1,1,-1,3,-1 );
|
|
guiMPSContinueButton = CreateIconAndTextButton( giMPSContinueBtnImage, gzMPSScreenText[MPS_CONTINUE_TEXT], OPT_BUTTON_FONT,
|
|
OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
|
|
OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
|
|
TEXT_CJUSTIFIED,
|
|
MPS_BTN_CONTINUE_X, MPS_BTN_CONTINUE_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnMPSContinueCallback);
|
|
|
|
SpecifyButtonSoundScheme( guiMPSContinueButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
|
|
SpecifyDisabledButtonStyle( guiMPSContinueButton, DISABLED_STYLE_NONE );
|
|
|
|
//Reset the exit screen - screen the main game loop will call next iteration
|
|
gubMPSExitScreen = MP_SCORE_SCREEN;
|
|
|
|
//REnder the screen once so we can blt ot to ths save buffer
|
|
RenderMPSScreen();
|
|
|
|
BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
|
|
gfMPSButtonsAllocated = TRUE;
|
|
|
|
return( TRUE );
|
|
|
|
} // End of EnterMPSScreen()
|
|
|
|
|
|
BOOLEAN ExitMPSScreen()
|
|
{
|
|
if( !gfMPSButtonsAllocated )
|
|
return( TRUE );
|
|
|
|
//Delete the main options screen background
|
|
DeleteVideoObjectFromIndex( guiMPSMainBackGroundImage );
|
|
|
|
RemoveButton( guiMPSContinueButton );
|
|
RemoveButton( guiMPSCancelButton );
|
|
|
|
|
|
UnloadButtonImage( giMPSCancelBtnImage );
|
|
UnloadButtonImage( giMPSContinueBtnImage );
|
|
|
|
// exit text input mode in this screen and clean up text boxes
|
|
//KillAllTextInputModes();
|
|
SetTextInputCursor( CURSOR_IBEAM );
|
|
|
|
gfMPSButtonsAllocated = FALSE;
|
|
|
|
//If we are starting the game stop playing the music
|
|
if( gubMPSScreenHandler == MPS_CONTINUE )
|
|
SetMusicMode( MUSIC_NONE );
|
|
|
|
gfMPSScreenExit = FALSE;
|
|
gfMPSScreenEntry = TRUE;
|
|
|
|
return( TRUE );
|
|
|
|
} // End of ExitMPJScreen()
|
|
|
|
|
|
void HandleMPSScreen()
|
|
{
|
|
if( gubMPSScreenHandler != MPS_NOTHING )
|
|
{
|
|
switch( gubMPSScreenHandler )
|
|
{
|
|
case MPS_CANCEL:
|
|
gubMPSExitScreen = MAINMENU_SCREEN;
|
|
gfMPSScreenExit = TRUE;
|
|
break;
|
|
|
|
/*case MPJ_HOST:
|
|
gubMPJExitScreen = MP_HOST_SCREEN;
|
|
gfMPJScreenExit = TRUE;
|
|
break;*/
|
|
|
|
|
|
case MPS_CONTINUE:
|
|
{
|
|
//if we are already fading out, get out of here
|
|
if( gFadeOutDoneCallback != DoneFadeOutForExitMPSScreen )
|
|
{
|
|
//Disable the ok button
|
|
DisableButton( guiMPSCancelButton );
|
|
DisableButton( guiMPSContinueButton );
|
|
|
|
gFadeOutDoneCallback = DoneFadeOutForExitMPSScreen;
|
|
|
|
FadeOutNextFrame( );
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
gubMPSScreenHandler = MPS_NOTHING;
|
|
}
|
|
|
|
|
|
if( gfReRenderMPSScreen )
|
|
{
|
|
RenderMPSScreen();
|
|
gfReRenderMPSScreen = FALSE;
|
|
}
|
|
|
|
// <TODO> add restore backgrounds in...
|
|
//RestoreGIOButtonBackGrounds();
|
|
} // end of HandleMPJScreen
|
|
|
|
|
|
BOOLEAN RenderMPSScreen()
|
|
{
|
|
HVOBJECT hPixHandle;
|
|
UINT16 usPosY;
|
|
|
|
//Get the main background screen graphic and blt it
|
|
GetVideoObject(&hPixHandle, guiMPSMainBackGroundImage );
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0,0,0, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
//Shade the background
|
|
ShadowVideoSurfaceRect( FRAME_BUFFER, iScreenWidthOffset, iScreenHeightOffset, iScreenWidthOffset + 640, iScreenHeightOffset + 480 );
|
|
|
|
//Display the title
|
|
DrawTextToScreen( gzMPSScreenText[ MPS_TITLE_TEXT ], MPS_MAIN_TITLE_X, MPS_MAIN_TITLE_Y, MPS_MAIN_TITLE_WIDTH, MPS_TITLE_FONT, MPS_TITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
|
|
|
|
// Player Column
|
|
DisplayWrappedString( MPS_LABEL_PLAYER_X, MPS_LABEL_PLAYER_Y, MPS_LABEL_PLAYER_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_PLAYER_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
// Kills Column
|
|
DisplayWrappedString( MPS_LABEL_KILLS_X, MPS_LABEL_KILLS_Y, MPS_LABEL_KILLS_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_KILLS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
// Deaths Column
|
|
DisplayWrappedString( MPS_LABEL_DEATHS_X, MPS_LABEL_DEATHS_Y, MPS_LABEL_DEATHS_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_DEATHS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
// Hits Column
|
|
DisplayWrappedString( MPS_LABEL_HITS_X, MPS_LABEL_HITS_Y, MPS_LABEL_HITS_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_HITS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
// Misses Column
|
|
DisplayWrappedString( MPS_LABEL_MISSES_X, MPS_LABEL_MISSES_Y, MPS_LABEL_MISSES_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_MISSES_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
// Accuracy Column
|
|
DisplayWrappedString( MPS_LABEL_ACCURACY_X, MPS_LABEL_ACCURACY_Y, MPS_LABEL_ACCURACY_WIDTH, 2, MPS_TITLE_FONT, MPS_TITLE_COLOR, gzMPSScreenText[ MPS_ACCURACY_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw players
|
|
wchar_t szPlayerName[30];
|
|
wchar_t szPlayerKills[3];
|
|
wchar_t szPlayerDeaths[3];
|
|
wchar_t szPlayerHits[3];
|
|
wchar_t szPlayerMisses[3];
|
|
wchar_t szPlayerAccuracy[8];
|
|
float flAccuracy = 0;
|
|
for(int i=0; i < 4; i++)
|
|
{
|
|
if (client_names[i] != NULL)
|
|
{
|
|
if (strcmp(client_names[i],"")!=0)
|
|
{
|
|
// valid player
|
|
usPosY = MPS_PLAYERLIST_Y + (i * MPS_PLAYER_GAP);
|
|
|
|
// Draw Player Name Column
|
|
memset(szPlayerName,0,30*sizeof(wchar_t));
|
|
mbstowcs( szPlayerName,client_names[i],30);
|
|
|
|
DisplayWrappedString( MPS_LABEL_PLAYER_X, usPosY, MPS_LABEL_PLAYER_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerName, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Kills Column
|
|
memset(szPlayerKills,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[i].kills,szPlayerKills,10);
|
|
DisplayWrappedString( MPS_LABEL_KILLS_X, usPosY, MPS_LABEL_KILLS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerKills, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Deaths Column
|
|
memset(szPlayerDeaths,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[i].deaths,szPlayerDeaths,10);
|
|
DisplayWrappedString( MPS_LABEL_DEATHS_X, usPosY, MPS_LABEL_DEATHS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerDeaths, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Hits Column
|
|
memset(szPlayerHits,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[i].hits,szPlayerHits,10);
|
|
DisplayWrappedString( MPS_LABEL_HITS_X, usPosY, MPS_LABEL_HITS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerHits, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Misses Column
|
|
memset(szPlayerMisses,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[i].misses,szPlayerMisses,10);
|
|
DisplayWrappedString( MPS_LABEL_MISSES_X, usPosY, MPS_LABEL_MISSES_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerMisses, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Accuracy Column
|
|
if ( gMPPlayerStats[i].misses + gMPPlayerStats[i].hits > 0 )
|
|
flAccuracy = ((float)gMPPlayerStats[i].hits / (float)(gMPPlayerStats[i].misses + gMPPlayerStats[i].hits)) * 100.0f;
|
|
else
|
|
flAccuracy = 0;
|
|
memset(szPlayerAccuracy,0,8*sizeof(wchar_t));
|
|
swprintf(szPlayerAccuracy,L"%i%%%%%%%%",(int)flAccuracy); // this thing goes through like three printfs before being rendered....
|
|
DisplayWrappedString( MPS_LABEL_ACCURACY_X, usPosY, MPS_LABEL_ACCURACY_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerAccuracy, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (PLAYER_BSIDE==MP_TYPE_COOP)
|
|
{
|
|
// CO-OP Mode, show stats for queens army
|
|
usPosY = MPS_PLAYERLIST_Y + (5 * MPS_PLAYER_GAP); // leave a space between players and AI
|
|
|
|
// Draw AI Team Name
|
|
DisplayWrappedString( MPS_LABEL_PLAYER_X, usPosY, MPS_LABEL_PLAYER_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, gzMPSScreenText[MPS_AITEAM_TEXT], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Kills Column
|
|
memset(szPlayerKills,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[4].kills,szPlayerKills,10);
|
|
DisplayWrappedString( MPS_LABEL_KILLS_X, usPosY, MPS_LABEL_KILLS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerKills, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Deaths Column
|
|
memset(szPlayerDeaths,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[4].deaths,szPlayerDeaths,10);
|
|
DisplayWrappedString( MPS_LABEL_DEATHS_X, usPosY, MPS_LABEL_DEATHS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerDeaths, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Hits Column
|
|
memset(szPlayerHits,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[4].hits,szPlayerHits,10);
|
|
DisplayWrappedString( MPS_LABEL_HITS_X, usPosY, MPS_LABEL_HITS_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerHits, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Misses Column
|
|
memset(szPlayerMisses,0,3*sizeof(wchar_t));
|
|
_itow(gMPPlayerStats[4].misses,szPlayerMisses,10);
|
|
DisplayWrappedString( MPS_LABEL_MISSES_X, usPosY, MPS_LABEL_MISSES_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerMisses, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Draw Accuracy Column
|
|
if ( gMPPlayerStats[4].misses + gMPPlayerStats[4].hits > 0 )
|
|
flAccuracy = ((float)gMPPlayerStats[4].hits / (float)(gMPPlayerStats[4].misses + gMPPlayerStats[4].hits)) * 100.0f;
|
|
else
|
|
flAccuracy = 0;
|
|
memset(szPlayerAccuracy,0,8*sizeof(wchar_t));
|
|
swprintf(szPlayerAccuracy,L"%i%%%%%%%%",(int)flAccuracy);
|
|
DisplayWrappedString( MPS_LABEL_ACCURACY_X, usPosY, MPS_LABEL_ACCURACY_WIDTH, 2, MPS_LABEL_TEXT_FONT, MPS_LABEL_TEXT_COLOR, szPlayerAccuracy, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
}
|
|
|
|
/*
|
|
// Player name text label
|
|
DisplayWrappedString( MPJ_LABEL_HANDLE_X, MPJ_LABEL_HANDLE_Y, MPJ_LABEL_HANDLE_WIDTH, 2, MPJ_LABEL_TEXT_FONT, MPJ_LABEL_TEXT_COLOR, gzMPJScreenText[ MPJ_HANDLE_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Server IP text label
|
|
DisplayWrappedString( MPJ_LABEL_IP_X, MPJ_LABEL_IP_Y, MPJ_LABEL_IP_WIDTH, 2, MPJ_LABEL_TEXT_FONT, MPJ_LABEL_TEXT_COLOR, gzMPJScreenText[ MPJ_SERVERIP_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
// Server Port text label
|
|
DisplayWrappedString( MPJ_LABEL_PORT_X, MPJ_LABEL_PORT_Y, MPJ_LABEL_PORT_WIDTH, 2, MPJ_LABEL_TEXT_FONT, MPJ_LABEL_TEXT_COLOR, gzMPJScreenText[ MPJ_SERVERPORT_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
*/
|
|
return( TRUE );
|
|
} // end of RenderMPSScreen()
|
|
|
|
|
|
|
|
void GetMPSScreenUserInput()
|
|
{
|
|
InputAtom Event;
|
|
// POINT MousePos;
|
|
|
|
// GetCursorPos(&MousePos);
|
|
|
|
while( DequeueEvent( &Event ) )
|
|
{
|
|
// check if this event is swallowed by text input, otherwise process key
|
|
if( !HandleTextInput( &Event ) && Event.usEvent == KEY_DOWN )
|
|
{
|
|
switch( Event.usParam )
|
|
{
|
|
|
|
case ESC:
|
|
//Exit out of the screen
|
|
gubMPSScreenHandler = MPS_CANCEL;
|
|
break;
|
|
|
|
case ENTER:
|
|
/*if (ValidateJoinSettings(false))
|
|
{
|
|
SaveJoinSettings();
|
|
gubMPSScreenHandler = MPS_JOIN;
|
|
}*/
|
|
gubMPSScreenHandler = MPS_CONTINUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} // end of GetMPSScreenUserInput()
|
|
|
|
void DoneFadeOutForExitMPSScreen( void )
|
|
{
|
|
// As we bypassed the GIO screen, set up some game options for multiplayer here
|
|
// <TODO> most things i have left as thier defaults here for testing.
|
|
is_networked = true;
|
|
|
|
ReStartingGame();
|
|
|
|
if (is_client)
|
|
{
|
|
client_disconnect();
|
|
}
|
|
|
|
if(is_server)
|
|
{
|
|
server_disconnect();
|
|
}
|
|
|
|
//NetworkAutoStart will handle reconnection in Map Screen
|
|
// reset client auto_retry for NetworkAutoStart called in MapScreenHandle
|
|
auto_retry = true;
|
|
giNumTries = 5;
|
|
|
|
if (is_networked)
|
|
gGameOptions.fTurnTimeLimit = TRUE;
|
|
else
|
|
gGameOptions.fTurnTimeLimit = FALSE;
|
|
|
|
// Bobby Rays - why would we want anything less than the best
|
|
gGameOptions.ubBobbyRay = BR_AWESOME;
|
|
|
|
|
|
gubMPSExitScreen = INTRO_SCREEN;
|
|
|
|
//set the fact that we should do the intro videos
|
|
// gbIntroScreenMode = INTRO_BEGINING;
|
|
#ifdef JA2TESTVERSION
|
|
if( gfKeyState[ ALT ] )
|
|
{
|
|
if( gfKeyState[ CTRL ] )
|
|
{
|
|
gMercProfiles[ MIGUEL ].bMercStatus = MERC_IS_DEAD;
|
|
gMercProfiles[ SKYRIDER ].bMercStatus = MERC_IS_DEAD;
|
|
}
|
|
|
|
SetIntroType( INTRO_ENDING );
|
|
}
|
|
else
|
|
#endif
|
|
SetIntroType( INTRO_BEGINING );
|
|
|
|
ExitMPSScreen(); // cleanup please, if we called a fadeout then we didnt do it above
|
|
|
|
SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
|
|
}
|
|
|
|
void DoneFadeInForExitMPSScreen( void )
|
|
{
|
|
SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
|
|
}
|
|
|
|
void BtnMPSCancelCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
|
|
gubMPSScreenHandler = MPS_CANCEL;
|
|
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
|
|
}
|
|
|
|
void BtnMPSContinueCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
|
|
gubMPSScreenHandler = MPS_CONTINUE;
|
|
|
|
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
} |