aboutsummaryrefslogtreecommitdiffstats
path: root/src/skel/win/win.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/skel/win/win.cpp')
-rw-r--r--src/skel/win/win.cpp296
1 files changed, 238 insertions, 58 deletions
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index 83860f04..5c5c7ece 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -19,7 +19,12 @@
#pragma warning( push )
#pragma warning( disable : 4005)
+
+#ifdef USE_D3D9
+#include <d3d9.h>
+#else
#include <d3d8.h>
+#endif
#include <ddraw.h>
#include <dinput.h>
#include <DShow.h>
@@ -27,7 +32,9 @@
#define WM_GRAPHNOTIFY WM_USER+13
+#ifndef USE_D3D9
#pragma comment( lib, "d3d8.lib" )
+#endif
#pragma comment( lib, "ddraw.lib" )
#pragma comment( lib, "Winmm.lib" )
#pragma comment( lib, "dxguid.lib" )
@@ -76,7 +83,6 @@ static psGlobalType PsGlobal;
{debug(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n"), hr); return;}
#include "common.h"
-#include "patcher.h"
#include "main.h"
#include "FileMgr.h"
#include "Text.h"
@@ -87,8 +93,10 @@ static psGlobalType PsGlobal;
#include "Frontend.h"
#include "Game.h"
#include "PCSave.h"
+#include "MemoryCard.h"
#include "Sprite2d.h"
#include "AnimViewer.h"
+#include "Font.h"
VALIDATE_SIZE(psGlobalType, 0x28);
@@ -101,7 +109,7 @@ IMediaSeeking *pMS = nil;
DWORD dwDXVersion;
SIZE_T _dwMemTotalPhys;
-SIZE_T _dwMemAvailPhys;
+size_t _dwMemAvailPhys;
SIZE_T _dwMemTotalVirtual;
SIZE_T _dwMemAvailVirtual;
DWORD _dwMemTotalVideo;
@@ -304,34 +312,6 @@ psNativeTextureSupport(void)
/*
*****************************************************************************
*/
-static BOOL
-InitApplication(HANDLE instance)
-{
- /*
- * Perform any necessary MS Windows application initialization. Basically,
- * this means registering the window class for this application.
- */
-
- WNDCLASS windowClass;
-
- windowClass.style = CS_BYTEALIGNWINDOW;
- windowClass.lpfnWndProc = (WNDPROC) MainWndProc;
- windowClass.cbClsExtra = 0;
- windowClass.cbWndExtra = 0;
- windowClass.hInstance = (HINSTANCE)instance;
- windowClass.hIcon = nil;
- windowClass.hCursor = LoadCursor(nil, IDC_ARROW);
- windowClass.hbrBackground = nil;
- windowClass.lpszMenuName = NULL;
- windowClass.lpszClassName = AppClassName;
-
- return RegisterClass(&windowClass);
-}
-
-
-/*
- *****************************************************************************
- */
static HWND
InitInstance(HANDLE instance)
{
@@ -448,6 +428,16 @@ DWORD GetDXVersion()
dwDXVersion = 0x700;
pDD7->Release();
+#ifdef USE_D3D9
+ HINSTANCE hD3D9DLL = LoadLibrary("D3D9.DLL");
+ if (hD3D9DLL != nil) {
+ FreeLibrary(hDDrawDLL);
+ FreeLibrary(hD3D9DLL);
+
+ dwDXVersion = 0x900;
+ return dwDXVersion;
+ }
+#endif
//-------------------------------------------------------------------------
// DirectX 8.0 Checks
@@ -497,6 +487,7 @@ DWORD GetDXVersion()
/*
*****************************************************************************
*/
+#ifndef _WIN64
static char cpuvendor[16] = "UnknownVendr";
__declspec(naked) const char * _psGetCpuVendr()
{
@@ -570,6 +561,7 @@ void _psPrintCpuInfo()
if ( FeaturesEx & 0x80000000 )
debug("with 3DNow");
}
+#endif
/*
*****************************************************************************
@@ -598,19 +590,56 @@ psInitialize(void)
PsGlobal.joy2 = nil;
CFileMgr::Initialise();
+
+#ifdef PS2_MENU
+ CPad::Initialise();
+ CPad::GetPad(0)->Mode = 0;
+
+ CGame::frenchGame = false;
+ CGame::germanGame = false;
+ CGame::nastyGame = true;
+ CMenuManager::m_PrefsAllowNastyGame = true;
+ WORD lang = PRIMARYLANGID(GetSystemDefaultLCID());
+ if ( lang == LANG_ITALIAN )
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_ITALIAN;
+ else if ( lang == LANG_SPANISH )
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_SPANISH;
+ else if ( lang == LANG_GERMAN )
+ {
+ CGame::germanGame = true;
+ CGame::nastyGame = false;
+ CMenuManager::m_PrefsAllowNastyGame = false;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_GERMAN;
+ }
+ else if ( lang == LANG_FRENCH )
+ {
+ CGame::frenchGame = true;
+ CGame::nastyGame = false;
+ CMenuManager::m_PrefsAllowNastyGame = false;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_FRENCH;
+ }
+ else
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_AMERICAN;
+
+ FrontEndMenuManager.InitialiseMenuContentsAfterLoadingGame();
+
+ TheMemoryCard.Init();
+#else
C_PcSave::SetSaveDirectory(_psGetUserFilesFolder());
InitialiseLanguage();
#ifndef GTA3_1_1_PATCH
FrontEndMenuManager.LoadSettings();
#endif
+
+#endif
gGameState = GS_START_UP;
TRACE("gGameState = GS_START_UP");
-
+#ifndef _WIN64
_psPrintCpuInfo();
-
+#endif
OSVERSIONINFO verInfo;
verInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
@@ -650,10 +679,14 @@ psInitialize(void)
}
}
+#ifndef PS2_MENU
+
#ifdef GTA3_1_1_PATCH
FrontEndMenuManager.LoadSettings();
#endif
+#endif
+
dwDXVersion = GetDXVersion();
debug("DirectX version 0x%x\n", dwDXVersion);
@@ -1234,6 +1267,34 @@ MainWndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam)
/*
*****************************************************************************
*/
+static BOOL
+InitApplication(HANDLE instance)
+{
+ /*
+ * Perform any necessary MS Windows application initialization. Basically,
+ * this means registering the window class for this application.
+ */
+
+ WNDCLASS windowClass;
+
+ windowClass.style = CS_BYTEALIGNWINDOW;
+ windowClass.lpfnWndProc = (WNDPROC)MainWndProc;
+ windowClass.cbClsExtra = 0;
+ windowClass.cbWndExtra = 0;
+ windowClass.hInstance = (HINSTANCE)instance;
+ windowClass.hIcon = nil;
+ windowClass.hCursor = LoadCursor(nil, IDC_ARROW);
+ windowClass.hbrBackground = nil;
+ windowClass.lpszMenuName = NULL;
+ windowClass.lpszClassName = AppClassName;
+
+ return RegisterClass(&windowClass);
+}
+
+
+/*
+ *****************************************************************************
+ */
RwBool IsForegroundApp()
{
@@ -1242,8 +1303,11 @@ RwBool IsForegroundApp()
UINT GetBestRefreshRate(UINT width, UINT height, UINT depth)
{
+#ifdef USE_D3D9
+ LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION);
+#else
LPDIRECT3D8 d3d = Direct3DCreate8(D3D_SDK_VERSION);
-
+#endif
ASSERT(d3d != nil);
UINT refreshRate = INT_MAX;
@@ -1256,14 +1320,21 @@ UINT GetBestRefreshRate(UINT width, UINT height, UINT depth)
else
format = D3DFMT_R5G6B5;
+#ifdef USE_D3D9
+ UINT modeCount = d3d->GetAdapterModeCount(GcurSel, format);
+#else
UINT modeCount = d3d->GetAdapterModeCount(GcurSel);
-
+#endif
+
for ( UINT i = 0; i < modeCount; i++ )
{
D3DDISPLAYMODE mode;
+#ifdef USE_D3D9
+ d3d->EnumAdapterModes(GcurSel, format, i, &mode);
+#else
d3d->EnumAdapterModes(GcurSel, i, &mode);
-
+#endif
if ( mode.Width == width && mode.Height == height && mode.Format == format )
{
if ( mode.RefreshRate == 0 )
@@ -1437,7 +1508,9 @@ psSelectDevice()
FrontEndMenuManager.m_nPrefsDepth = vm.depth;
#endif
+#ifndef PS2_MENU
FrontEndMenuManager.m_nCurrOption = 0;
+#endif
/* Set up the video mode and set the apps window
* dimensions to match */
@@ -1555,7 +1628,7 @@ CommandLineToArgv(RwChar *cmdLine, RwInt32 *argCount)
RwInt32 i, len;
RwChar *res, *str, **aptr;
- len = strlen(cmdLine);
+ len = (int)strlen(cmdLine);
/*
* Count the number of arguments...
@@ -1643,11 +1716,11 @@ void InitialiseLanguage()
{
WORD primUserLCID = PRIMARYLANGID(GetSystemDefaultLCID());
WORD primSystemLCID = PRIMARYLANGID(GetUserDefaultLCID());
- WORD primLayout = PRIMARYLANGID((DWORD)GetKeyboardLayout(0));
+ WORD primLayout = PRIMARYLANGID((DWORD_PTR)GetKeyboardLayout(0));
WORD subUserLCID = SUBLANGID(GetSystemDefaultLCID());
WORD subSystemLCID = SUBLANGID(GetUserDefaultLCID());
- WORD subLayout = SUBLANGID((DWORD)GetKeyboardLayout(0));
+ WORD subLayout = SUBLANGID((DWORD_PTR)GetKeyboardLayout(0));
if ( primUserLCID == LANG_GERMAN
|| primSystemLCID == LANG_GERMAN
@@ -1715,27 +1788,27 @@ void InitialiseLanguage()
{
case LANG_GERMAN:
{
- CMenuManager::m_PrefsLanguage = LANGUAGE_GERMAN;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_GERMAN;
break;
}
case LANG_SPANISH:
{
- CMenuManager::m_PrefsLanguage = LANGUAGE_SPANISH;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_SPANISH;
break;
}
case LANG_FRENCH:
{
- CMenuManager::m_PrefsLanguage = LANGUAGE_FRENCH;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_FRENCH;
break;
}
case LANG_ITALIAN:
{
- CMenuManager::m_PrefsLanguage = LANGUAGE_ITALIAN;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_ITALIAN;
break;
}
default:
{
- CMenuManager::m_PrefsLanguage = LANGUAGE_AMERICAN;
+ CMenuManager::m_PrefsLanguage = CMenuManager::LANGUAGE_AMERICAN;
break;
}
}
@@ -1881,16 +1954,15 @@ WinMain(HINSTANCE instance,
RwV2d pos;
RwInt32 argc, i;
RwChar **argv;
- StaticPatcher::Apply();
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
-/*
+#if 0
// TODO: make this an option somewhere
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
-*/
+#endif
/*
* Initialize the platform independent data.
@@ -2033,24 +2105,35 @@ WinMain(HINSTANCE instance,
SetErrorMode(SEM_FAILCRITICALERRORS);
- if (!TurnOnAnimViewer) {
-#ifdef NO_MOVIES
- gGameState = GS_INIT_FRONTEND;
- TRACE("gGameState = GS_INIT_FRONTEND");
-
+
+#ifdef PS2_MENU
+ int32 r = TheMemoryCard.CheckCardStateAtGameStartUp(CARD_ONE);
+ if ( r == CMemoryCard::ERR_DIRNOENTRY || r == CMemoryCard::ERR_NOFORMAT
+ && r != CMemoryCard::ERR_OPENNOENTRY && r != CMemoryCard::ERR_NONE )
+ {
LoadingScreen(nil, nil, "loadsc0");
- if (!CGame::InitialiseOnceAfterRW())
- RsGlobal.quit = TRUE;
+
+ TheText.Unload();
+ TheText.Load();
+
+ CFont::Initialise();
+
+ FrontEndMenuManager.DrawMemoryCardStartUpMenus();
+ }
#endif
- } else {
+
+ if (TurnOnAnimViewer)
+ {
#ifndef MASTER
CAnimViewer::Initialise();
+#ifndef PS2_MENU
FrontEndMenuManager.m_bGameNotLoaded = false;
+#endif
gGameState = GS_ANIMVIEWER;
TurnOnAnimViewer = false;
#endif
}
-
+
while ( TRUE )
{
RwInitialised = TRUE;
@@ -2069,8 +2152,18 @@ WinMain(HINSTANCE instance,
/*
* Enter the message processing loop...
*/
-
+#ifdef PS2_MENU
+ if (TheMemoryCard.m_bWantToLoad)
+ LoadSplash(GetLevelSplashScreen(CGame::currLevel));
+
+ TheMemoryCard.m_bWantToLoad = false;
+
+ CTimer::Update();
+
+ while( !RsGlobal.quit && !(FrontEndMenuManager.m_bWantToRestart || TheMemoryCard.b_FoundRecentSavedGameWantToLoad) )
+#else
while( !RsGlobal.quit && !FrontEndMenuManager.m_bWantToRestart )
+#endif
{
if( PeekMessage(&message, nil, 0U, 0U, PM_REMOVE|PM_NOYIELD) )
{
@@ -2090,7 +2183,11 @@ WinMain(HINSTANCE instance,
{
case GS_START_UP:
{
+#ifdef NO_MOVIES
+ gGameState = GS_INIT_ONCE;
+#else
gGameState = GS_INIT_LOGO_MPEG;
+#endif
TRACE("gGameState = GS_INIT_LOGO_MPEG");
break;
}
@@ -2165,16 +2262,35 @@ WinMain(HINSTANCE instance,
CloseClip();
CoUninitialize();
- LoadingScreen(nil, nil, "loadsc0");
+#ifdef FIX_BUGS
+ // draw one frame because otherwise we'll end up looking at black screen for a while if vsync is on
+ RsCameraShowRaster(Scene.camera);
+#endif
+
+#ifdef PS2_MENU
+ extern char version_name[64];
+ if ( CGame::frenchGame || CGame::germanGame )
+ LoadingScreen(NULL, version_name, "loadsc24");
+ else
+ LoadingScreen(NULL, version_name, "loadsc0");
+ printf("Into TheGame!!!\n");
+#else
+ LoadingScreen(nil, nil, "loadsc0");
+#endif
if ( !CGame::InitialiseOnceAfterRW() )
RsGlobal.quit = TRUE;
-
+
+#ifdef PS2_MENU
+ gGameState = GS_INIT_PLAYING_GAME;
+#else
gGameState = GS_INIT_FRONTEND;
TRACE("gGameState = GS_INIT_FRONTEND;");
+#endif
break;
}
+#ifndef PS2_MENU
case GS_INIT_FRONTEND:
{
LoadingScreen(nil, nil, "loadsc0");
@@ -2202,13 +2318,21 @@ WinMain(HINSTANCE instance,
if (wp.showCmd != SW_SHOWMINIMIZED)
RsEventHandler(rsFRONTENDIDLE, nil);
+#ifdef PS2_MENU
+ if ( !FrontEndMenuManager.m_bMenuActive || TheMemoryCard.m_bWantToLoad )
+#else
if ( !FrontEndMenuManager.m_bMenuActive || FrontEndMenuManager.m_bWantToLoad )
+#endif
{
gGameState = GS_INIT_PLAYING_GAME;
TRACE("gGameState = GS_INIT_PLAYING_GAME;");
}
+#ifdef PS2_MENU
+ if (TheMemoryCard.m_bWantToLoad )
+#else
if ( FrontEndMenuManager.m_bWantToLoad )
+#endif
{
InitialiseGame();
FrontEndMenuManager.m_bGameNotLoaded = false;
@@ -2217,11 +2341,37 @@ WinMain(HINSTANCE instance,
}
break;
}
+#endif
case GS_INIT_PLAYING_GAME:
{
+#ifdef PS2_MENU
+ CGame::Initialise("DATA\\GTA3.DAT");
+
+ //LoadingScreen("Starting Game", NULL, GetRandomSplashScreen());
+
+ if ( TheMemoryCard.CheckCardInserted(CARD_ONE) == CMemoryCard::NO_ERR_SUCCESS
+ && TheMemoryCard.ChangeDirectory(CARD_ONE, TheMemoryCard.Cards[CARD_ONE].dir)
+ && TheMemoryCard.FindMostRecentFileName(CARD_ONE, TheMemoryCard.MostRecentFile) == true
+ && TheMemoryCard.CheckDataNotCorrupt(TheMemoryCard.MostRecentFile))
+ {
+ strcpy(TheMemoryCard.LoadFileName, TheMemoryCard.MostRecentFile);
+ TheMemoryCard.b_FoundRecentSavedGameWantToLoad = true;
+
+ if (CMenuManager::m_PrefsLanguage != TheMemoryCard.GetLanguageToLoad())
+ {
+ CMenuManager::m_PrefsLanguage = TheMemoryCard.GetLanguageToLoad();
+ TheText.Unload();
+ TheText.Load();
+ }
+
+ CGame::currLevel = (eLevelName)TheMemoryCard.GetLevelToLoad();
+ }
+#else
InitialiseGame();
+
FrontEndMenuManager.m_bGameNotLoaded = false;
+#endif
gGameState = GS_PLAYING_GAME;
TRACE("gGameState = GS_PLAYING_GAME;");
break;
@@ -2271,16 +2421,45 @@ WinMain(HINSTANCE instance,
RwInitialised = FALSE;
FrontEndMenuManager.UnloadTextures();
+#ifdef PS2_MENU
+ if ( !(FrontEndMenuManager.m_bWantToRestart || TheMemoryCard.b_FoundRecentSavedGameWantToLoad))
+ break;
+#else
if ( !FrontEndMenuManager.m_bWantToRestart )
break;
+#endif
CPad::ResetCheats();
CPad::StopPadsShaking();
DMAudio.ChangeMusicMode(MUSICMODE_DISABLE);
+#ifdef PS2_MENU
+ CGame::ShutDownForRestart();
+#endif
CTimer::Stop();
+#ifdef PS2_MENU
+ if (FrontEndMenuManager.m_bWantToRestart || TheMemoryCard.b_FoundRecentSavedGameWantToLoad)
+ {
+ if (TheMemoryCard.b_FoundRecentSavedGameWantToLoad)
+ {
+ FrontEndMenuManager.m_bWantToRestart = true;
+ TheMemoryCard.m_bWantToLoad = true;
+ }
+
+ CGame::InitialiseWhenRestarting();
+ DMAudio.ChangeMusicMode(MUSICMODE_GAME);
+ FrontEndMenuManager.m_bWantToRestart = false;
+
+ continue;
+ }
+
+ CGame::ShutDown();
+ CTimer::Stop();
+
+ break;
+#else
if ( FrontEndMenuManager.m_bWantToLoad )
{
CGame::ShutDownForRestart();
@@ -2312,6 +2491,7 @@ WinMain(HINSTANCE instance,
FrontEndMenuManager.m_bFirstTime = false;
FrontEndMenuManager.m_bWantToRestart = false;
+#endif
}