www.pudn.com > coolMEMORY.rar > Memory.cpp
//-----------------------------------------------------------------------------
// File: Memory.cpp
//-----------------------------------------------------------------------------
#include "AS\AS_Engine.h"
#include "ModuleHeaders.h"
// Variables: *****************************************************************
AS_CAMERA *pCamera; // The main game camera
HWND hWndCredits; // The dialog handle of the credits dialog
BOOL bOnlyConfig; // Should only the config dialog be shown? (no game run after this...)
SETUP Setup; // Some game setups
BOOL bCheatsActivated; // Are the cheats active?
///////////////////////////////////////////////////////////////////////////////
// Functions: *****************************************************************
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
void ChangeDisplayMode(void);
void OpenCreditsDialog(HWND);
LRESULT CALLBACK CreditsProc(HWND, UINT, WPARAM, LPARAM);
void OpenHelp(void);
///////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int iCmdShow)
{ // begin WinMain()
BOOL bOpenConfig, bLanguage;
char byTemp[MAX_PATH];
LPSTR lpTemp;
// Startup the engine:
_AS = new AS_ENGINE(hInstance, lpCmdLine, iCmdShow, TRUE);
if(_AS->GetShutDown())
return 1;
// Setup the camera:
_ASCamera = pCamera = new AS_CAMERA;
memset(pCamera, 0, sizeof(AS_CAMERA));
// Check if the selected language is available:
bLanguage = FALSE;
for(int i = 0; i < iASLanguages; i++)
if(!strcmp(pbyASLanguage[i], _ASConfig->byLanguage))
{
bLanguage = TRUE;
break;
}
if(!bLanguage)
{ // No this language isn't available:
if(!iASLanguages)
{ // Oh, no! There is no other language!!
MessageBox(NULL, "There are no languages!!\nAs result there are no text's!",
GAME_NAME, MB_OK | MB_ICONINFORMATION);
}
else
{ // Change to the first best language:
sprintf(byTemp, "The selected language (%s) isn't available!!\nPlease choose an other language.\n",
_ASConfig->byLanguage);
MessageBox(NULL, byTemp, GAME_NAME, MB_OK | MB_ICONINFORMATION);
strcpy(_ASConfig->byLanguage, pbyASLanguage[0]);
SetLanguage(_ASConfig->byLanguage);
}
}
else
SetLanguage(_ASConfig->byLanguage);
// Is this the first program start?:
if(_ASConfig->bFirstRun)
{ // Yep!
_AS->WriteLogMessage("First program start detected");
MessageBox(NULL, M_FirstProgramStart, GAME_NAME, MB_OK | MB_ICONINFORMATION);
}
// Check the given program parameters:
bOpenConfig = FALSE;
bOnlyConfig = FALSE;
bCheatsActivated = FALSE;
lpTemp = lpCmdLine;
for(;;)
{
if(sscanf(lpTemp, "%s", byTemp) == EOF)
break;
// Check the program parameter:
if(!strcmp(byTemp, "-config"))
bOpenConfig = TRUE;
if(!strcmp(byTemp, "-onlyconfig"))
bOnlyConfig = TRUE;
// Check the cheats:
if(!strcmp(byTemp, "-clairvoyant"))
{
_AS->WriteLogMessage("Cheats activated");
bCheatsActivated = TRUE;
}
if(*(lpTemp+strlen(byTemp)) == 0)
break;
lpTemp += strlen(byTemp)+1;
}
// Is an error detected? (from the last run)
if(_ASConfig->bError)
MessageBox(NULL, M_ProgramWasNotSutDownCorrectlyAtLastTime, GAME_NAME, MB_OK | MB_ICONINFORMATION);
// Check if we want to show the config dialog:
if(bOpenConfig || bOnlyConfig || !bLanguage || _ASConfig->bFirstRun || _ASConfig->bError)
{
bFirstRunConfigDialog = TRUE;
OpenConfigDialog(NULL);
bFirstRunConfigDialog = FALSE;
}
if(!bOnlyConfig)
{
// Set a pointer to the current card style:
pcCardStyle = &cGameConfig.cStyle;
cGameConfig.SetStandart();
sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath);
cGameConfig.LoadAdvancedSettings(byTemp);
// Set the current program module:
_AS->SetModule(MODULE_INTRO);
// _AS->SetModule(MODULE_MENU);
// _AS->SetModule(MODULE_GAME);
// Load stuff which is always used:
InitGameObjects();
LoadGameTextures();
// Create the game window and create the DirectInput stuff:
_AS->ASCreateWindow(WindowProc, GAME_WINDOW_NAME, GAME_WINDOW_NAME, _ASConfig->iWindowWidth,
_ASConfig->iWindowHeight, LoadMenu(_AS->GetInstance(), MAKEINTRESOURCE(IDR_GAME)),
_ASConfig->bFullScreen, GameDraw, GameCheck, NULL, TRUE);
GAME_WINDOW_ID = _AS->GetWindows()-1;
ASInitOpenGL(&_AS->pWindow[GAME_WINDOW_ID],
NULL,
_AS->pWindow[GAME_WINDOW_ID].GethDC(),
_AS->pWindow[GAME_WINDOW_ID].GethRC(), _ASConfig->bFullScreen);
_AS->CreateDXInputDevices(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), FALSE, TRUE, TRUE, FALSE);
ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOW);
SetGameLanguage();
// Setup textures and other stuff:
ASGenOpenGLTextures(GAME_TEXTURES, GameTexture);
ASGenOpenGLTextures(CAUST_1_STEPS, Caust1Texture);
CreateBlurTexture();
CreateGameLists();
// Load all sound samples:
LoadSamples();
EnumerateMusic();
if(!strcmp(byCurrentMusic, ""))
{ // The standart music isn't available, start another:
if(pbyFoundMusic)
StartMusic(pbyFoundMusic[0]);
}
if(bCheatsActivated)
ShowSmallMessage(T_CheatsActivated, 3000);
// Go into the main loop:
_ASConfig->bError = TRUE;
_AS->WriteLogMessage("Go into program loop");
for(;;)
{
if(_AS->GetShutDown())
break;
_AS->SetModule(_AS->GetNextModule());
// Go into the current program module:
switch(_AS->GetModule())
{
case MODULE_INTRO: Intro(); break;
case MODULE_MENU: GameMenu(); break;
case MODULE_GAME: Game(); break;
}
}
sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath);
cGameConfig.SaveAdvancedSettings(byTemp);
pcCardStyle->Destroy();
// Destroy all sound samples:
ASDestroyFmodSamples(GAME_SAMPLES, GameSample);
StopMusic();
DestroyFoundMusic();
// Save the configuration:
sprintf(byTemp, "%s%s", _AS->byProgramPath, _AS->byConfigFilename);
_ASConfig->Save(byTemp);
// Destroy the game objects and textures:
DestroyBlurTexture();
ASDestroyOpenGLTextures(GAME_TEXTURES, GameTexture);
ASDestroyOpenGLTextures(CAUST_1_STEPS, Caust1Texture);
ASDestroyTextures(GAME_TEXTURES, GameTexture);
ASDestroyTextures(GAME_TEXTURES, Caust1Texture);
DestroyGameObjects();
DestroyGameLists();
// Destroy the game window and the corresponding DirectInput stuff:
_AS->FreeDXInputDevices();
ASDestroyOpenGL(&_AS->pWindow[GAME_WINDOW_ID],
NULL,
*_AS->pWindow[GAME_WINDOW_ID].GethDC(),
*_AS->pWindow[GAME_WINDOW_ID].GethRC());
_AS->ASDestroyWindow(_AS->pWindow[GAME_WINDOW_ID].GethWnd(), GAME_WINDOW_NAME);
}
// Delete the rest:
delete pCamera;
delete _AS;
// That's all!
return 0;
} // end WinMain()
void ChangeDisplayMode(void)
{ // begin ChangeDisplayMode()
switch(_AS->GetModule())
{
case MODULE_INTRO: case MODULE_MENU: case MODULE_GAME:
// Destroy the old window:
_AS->FreeDXInputDevices();
DestroyBlurTexture();
ASDestroyOpenGLTextures(GAME_TEXTURES, GameTexture);
ASDestroyOpenGLTextures(CAUST_1_STEPS, Caust1Texture);
pcCardStyle->DestroyOpenGLTextures();
DestroyGameLists();
ASDestroyOpenGL(&_AS->pWindow[GAME_WINDOW_ID],
NULL,
*_AS->pWindow[GAME_WINDOW_ID].GethDC(),
*_AS->pWindow[GAME_WINDOW_ID].GethRC());
_AS->ASDestroyWindow(_AS->pWindow[GAME_WINDOW_ID].GethWnd(), GAME_WINDOW_NAME);
// Create the new window:
_AS->ASCreateWindow(WindowProc, GAME_WINDOW_NAME, GAME_WINDOW_NAME, _ASConfig->iWindowWidth,
_ASConfig->iWindowHeight, LoadMenu(_AS->GetInstance(), MAKEINTRESOURCE(IDR_GAME)),
_ASConfig->bFullScreen, GameDraw, GameCheck, NULL, TRUE);
GAME_WINDOW_ID = _AS->GetWindows()-1;
if(_AS->GetModule() == MODULE_MENU)
{
_AS->pWindow[GAME_WINDOW_ID].SetDrawFunction(GameMenuDraw);
_AS->pWindow[GAME_WINDOW_ID].SetCheckFunction(GameMenuCheck);
}
if(_AS->GetModule() == MODULE_INTRO)
{
_AS->pWindow[GAME_WINDOW_ID].SetDrawFunction(IntroDraw);
_AS->pWindow[GAME_WINDOW_ID].SetCheckFunction(IntroCheck);
}
_AS->CreateDXInputDevices(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), FALSE, TRUE, TRUE, FALSE);
ASInitOpenGL(&_AS->pWindow[GAME_WINDOW_ID],
NULL,
_AS->pWindow[GAME_WINDOW_ID].GethDC(),
_AS->pWindow[GAME_WINDOW_ID].GethRC(), _ASConfig->bFullScreen);
ASGenOpenGLTextures(GAME_TEXTURES, GameTexture);
ASGenOpenGLTextures(CAUST_1_STEPS, Caust1Texture);
CreateBlurTexture();
pcCardStyle->GenOpenGLTextures();
CreateGameLists();
ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOW);
ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOWNORMAL);
UpdateWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd());
SetForegroundWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd());
SetFocus(*_AS->pWindow[GAME_WINDOW_ID].GethWnd());
SetGameLanguage();
break;
}
} // end ChangeDisplayMode()
void OpenCreditsDialog(HWND hWnd)
{ // begin OpenCreditsDialog()
DialogBox(_AS->GetInstance(), MAKEINTRESOURCE(IDD_CREDITS), hWnd, (DLGPROC) CreditsProc);
} // end OpenCreditsDialog()
LRESULT CALLBACK CreditsProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{ // begin CreditsProc()
switch(iMessage)
{
case WM_INITDIALOG:
_AS->WriteLogMessage("Open credits dialog");
hWndCredits = hWnd;
ShowWindow(hWnd, _AS->GetCmdShow());
UpdateWindow(hWnd);
SetDlgItemText(hWnd, IDC_CREDITS_VERSION, _ASProgramInfo.byVersion);
SetDlgItemText(hWnd, IDC_CREDITS_BUILD_DATE, _ASProgramInfo.byDate);
SetDlgItemText(hWnd, IDC_CREDITS_BUILD_TIME, _ASProgramInfo.byTime);
// Texts:
SetWindowText(hWnd, T_Credits);
SetDlgItemText(hWnd, IDC_CREDITS_VERSION_TEXT, T_Version_);
SetDlgItemText(hWnd, IDC_CREDITS_PROGRAMMING_AND_DESIGN, T_ProgrammingAndDesign_);
SetDlgItemText(hWnd, IDC_CREDITS_MUSIC, T_Music_);
SetDlgItemText(hWnd, IDC_CREDITS_GRAPHIC_AND_DESIGN, T_GraphicAndDesign_);
SetDlgItemText(hWnd, IDC_CREDITS_PROGRAM_INFO, T_ProgramInfo_);
SetDlgItemText(hWnd, IDC_CREDITS_BUILD, T_Build_);
SetDlgItemText(hWnd, IDC_CREDITS_OK, T_Ok);
SetDlgItemText(hWnd, IDC_CREDITS_MORE, T_MoreCredits);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_CREDITS_OK:
EndDialog(hWnd, FALSE);
hWndCredits = NULL;
_AS->WriteLogMessage("Close credits dialog(OK)");
return TRUE;
case IDC_CREDITS_MORE: OpenHelp(); break;
}
break;
case WM_CLOSE: SendMessage(hWnd, WM_COMMAND, IDC_CREDITS_OK, 0); break;
}
return FALSE;
} // end CreditsProc()
void OpenHelp(void)
{ // begin OpenHelp()
char byTemp[256];
_AS->WriteLogMessage("Open help file");
SendMessage(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
sprintf(byTemp, "%s%s", _AS->byProgramPath, T_HelpFile);
ShellExecute(0, "open", byTemp, 0, 0, SW_SHOW);
} // end OpenHelp()
///////////////////////////////////////////////////////////////////////////////
// SETUP functions:
SETUP::SETUP(void)
{ // begin SETUP::SETUP()
bShowHud = TRUE;
} // end SETUP::SETUP()
///////////////////////////////////////////////////////////////////////////////