![]() |
|
c++ NKSP.EXE - Printable Version +- LCKB (https://lckb.dev/forum) +-- Forum: ** OLD LCKB DATABASE ** (https://lckb.dev/forum/forumdisplay.php?fid=109) +--- Forum: Programmers Gateway (https://lckb.dev/forum/forumdisplay.php?fid=196) +---- Forum: Coders Talk (https://lckb.dev/forum/forumdisplay.php?fid=192) +---- Thread: c++ NKSP.EXE (/showthread.php?tid=409) |
- CyberClaus - 10-24-2012 Hi, im going to leave here the source code of nksp.exe, almost ready to start lastchaos. Im not going to leave credits has i dont know who released it, but if who realeased it sees it here, i say thank you, it gave me a really good help. And now i hope it helps this community too. /* * Last Chaos * Copyright © 1998, CroTeam. All rights reserved. * */ #include "StdH.h" #include <io.h> #include <fcntl.h> #include <sys/stat.h> #include <process.h> #include <Engine/CurrentVersion.h> #include <Engine/Templates/Stock_CEntityClass.h> #include <Engine/Templates/Stock_CFontData.h> #include <Engine/Interface/UIManager.h> // yjpark #include <Engine/Interface/UIMouseCursor.h> #include <Engine/GameState.h> #include <Engine/GlobalDefinition.h> #define DECL_DLL #include <EntitiesMP/Global.h> #include "resource.h" //#include "SplashScreen.h" #include "Mainwindow.h" #include "GlSettings.h" //#include "LevelInfo.h" //#include "LCDDrawing.h" #include "CmdLine.h" //#include "Credits.h" #include <Engine/Base/Protection.h> #if COPY_PROTECTION #include <Engine/Base/Protection.cpp> #endif #include <Engine/Network/Web.h> #include <TlHelp32.h> #include <float.h> #include <Ext_ipc_event.h> // IPC ENGINE_API extern cWeb g_web; extern ENGINE_API char *g_szExitError; #ifdef XTRAP_SECURE_CKBANG_2010_07_20 #include "xTrapWrapper.h" #endif //#undef XTRAP_SECURE_CKBANG_2010_07_20 #ifndef NO_GAMEGUARD #include <Nksp/GameGuard.h> #endif #ifndef NO_GAMEGUARD extern ENGINE_API CTString g_szHackMsg; #endif //CTString _fnmForCDCheck = "Bin\\SeriousSam.exe"; // application state variables by NSP extern BOOL g_bTcp = TRUE; // end of .. extern CGame *_pGame = NULL; // application state variables //extern BOOL _bRunning = TRUE; //extern BOOL _bQuitScreen = TRUE; //extern BOOL _bMenuActive = FALSE; //extern BOOL _bMenuRendering = FALSE; #pragma comment(lib, "SharedMemoryDll.lib") static PIX _apixRes[][2] = { 640, 480, 800, 500, 800, 600, 1024, 768, 1152, 864, 1280, 800, 1280, 960, 1280, 1024, 1600,1200, }; extern void enableFPExceptions() { int i = _controlfp (0,0); i &= ~ (EM_ZERODIVIDE); _controlfp (i, MCW_EM); } // helper for limiting window size when changing mode out of full screen extern void FindMaxResolution( PIX &pixSizeI, PIX &pixSizeJ) { const INDEX ctResolutions = ARRAYCOUNT(_apixRes); for( INDEX iRes=(ctResolutions-1); iRes>=0; iRes--) { if( pixSizeI>_apixRes[iRes][0] && pixSizeJ>_apixRes[iRes][1]) { pixSizeI = _apixRes[iRes][0]; pixSizeJ = _apixRes[iRes][1]; return; } } // should not end up here ASSERTALWAYS( "Desktop resolution too low!"); pixSizeI = _apixRes[0][0]; pixSizeJ = _apixRes[0][1]; } //extern BOOL _bDefiningKey; // ¿øº». extern BOOL _bDefiningKey = FALSE; //static BOOL _bReconsiderInput = FALSE; extern PIX _pixDesktopWidth = 0; extern PIX _pixDesktopHeight = 0; static INDEX sam_iMaxFPSActive = 500; static INDEX sam_iMaxFPSInactive = 10; static INDEX sam_bPauseOnMinimize = TRUE; // auto-pause when window has been minimized extern ENGINE_API INDEX sam_bWideScreen; // yjpark extern FLOAT sam_fPlayerOffset = 0.0f; // Window handle extern ENGINE_API HWND _hwndMain; // display mode settings extern ENGINE_API BOOL _bWindowChanging; // yjpark |<-- extern ENGINE_API INDEX sam_bFullScreenActive; extern ENGINE_API INDEX sam_iScreenSizeI; extern ENGINE_API INDEX sam_iScreenSizeJ; extern ENGINE_API INDEX sam_iDisplayDepth; extern ENGINE_API INDEX sam_iDisplayAdapter; extern ENGINE_API INDEX sam_iGfxAPI; // 0==OpenGL // yjpark -->| extern INDEX sam_bFirstStarted = FALSE; extern FLOAT sam_tmDisplayModeReport = 5.0f; //extern INDEX sam_bShowAllLevels = FALSE; //extern INDEX sam_bMentalActivated = FALSE; // network settings extern CTString sam_strNetworkSettings = ""; // command line extern CTString sam_strCommandLine = ""; // 0...app started for the first time // 1...all ok // 2...automatic fallback static INDEX _iDisplayModeChangeFlag = 0; static TIME _tmDisplayModeChanged = 100.0f; // when display mode was last changed // rendering preferences for automatic settings extern INDEX sam_iVideoSetup = 1; // 0==speed, 1==normal, 2==quality, 3==custom // automatic adjustment of audio quality extern BOOL sam_bAutoAdjustAudio = TRUE; extern INDEX sam_bAutoPlayDemos = TRUE; static INDEX _bInAutoPlayLoop = TRUE; // menu calling /* extern INDEX sam_bMenuSave = FALSE; extern INDEX sam_bMenuLoad = FALSE; extern INDEX sam_bMenuControls = FALSE; extern INDEX sam_bMenuHiScore = FALSE; */ extern INDEX sam_bToggleConsole = FALSE; //extern INDEX sam_iStartCredits = FALSE; // for mod re-loading extern CTFileName _fnmModToLoad = CTString(""); extern CTString _strModServerJoin = CTString(""); extern CTString _strURLToVisit = CTString(""); // state variables fo addon execution // 0 - nothing // 1 - start (invoke console) // 2 - console invoked, waiting for one redraw extern INDEX _iAddonExecState = 0; extern CTFileName _fnmAddonToExec = CTString(""); // logo textures //static CTextureObject _toLogoCT; //static CTextureObject _toLogoODI; //static CTextureObject _toLogoGSpy; //static CTextureObject _toLogoEAX; //extern CTextureObject *_ptoLogoCT = NULL; //extern CTextureObject *_ptoLogoODI = NULL; //extern CTextureObject *_ptoLogoGSpy = NULL; //extern CTextureObject *_ptoLogoEAX = NULL; extern CTString sam_strVersion = "0.5"; //extern CTString sam_strModName = TRANS("Prologue"); /* #if _SE_DEMO extern CTString sam_strFirstLevel = "Levels\\KarnakDemo.wld"; #else extern CTString sam_strFirstLevel = "Levels\\01_Hatshepsut.wld"; #endif */ extern CTString sam_strIntroLevel = "Levels\\Intro.wld"; extern CTString sam_strGameName = "serioussam"; //extern CTString sam_strTechTestLevel = "Levels\\TechTest.wld"; //extern CTString sam_strTrainingLevel = "Levels\\KarnakDemo.wld"; ENGINE_API extern INDEX snd_iFormat; // main window canvas /*CDrawPort *pdp; CDrawPort *pdpNormal; CDrawPort *pdpWideScreen; CViewPort *pvpViewPort; HINSTANCE _hInstance;*/ // ypark // main window canvas // yjpark extern ENGINE_API CDrawPort *_pdpMain; extern ENGINE_API CDrawPort *_pdpNormalMain; extern ENGINE_API CDrawPort *_pdpWideScreenMain; extern ENGINE_API CViewPort *_pvpViewPortMain; extern ENGINE_API HINSTANCE _hInstanceMain; /* static void PlayDemo(const CTString &strDemoFilename) { // ¾²Ãƒâ‚¬ÃƒÅ’ÃÂö ¾ÃƒÅ À½. _gmMenuGameMode = GM_DEMO; CTFileName fnDemo = "demos\\" + strDemoFilename + ".dem"; extern BOOL LSLoadDemo(const CTFileName &fnm); LSLoadDemo(fnDemo); } */ ENGINE_API extern INDEX g_iCountry; // WSS_NPROTECT 070402 -------------------------->> /* #ifndef NO_GAMEGUARD extern ENGINE_API CTString g_szHackMsg; #endif /**/ // ----------------------------------------------<< void GetNM(LPSTR lpCmdLine) { // wooss 060209 NetMable_JP extern BOOL g_bAutoLogin; extern CTString g_nmVER; extern CTString g_nmCID; extern CTString g_nmID; extern CTString g_nmPW; // wooss NetMable_JP Auto login 060209 CTString strTemp((CHAR*)lpCmdLine); // MessageBox(NULL, strTemp, "CommandLine", MB_OK); for(INDEX ii = 0; ii < 4; ii++) { INDEX tempPos = strTemp.FindSubstr(" "); CTString strInsert = strTemp; strInsert.TrimRight(tempPos); switch(ii) { case 0 : g_nmVER.PrintF("%s", strInsert); break; case 1 : g_nmCID.PrintF("%s", strInsert); break; case 2 : g_nmID.PrintF("%s", strInsert); break; case 3 : g_nmPW.PrintF("%s", strTemp); break; } if(ii < 3) strTemp.DeleteChars(0, tempPos + 1); } // MessageBox(NULL, g_nmID, "loginID", MB_OK); // MessageBox(NULL, g_nmPW, "loginPW", MB_OK); if(g_nmID.Length()!=0 && g_nmPW.Length()!=0 ) { switch(g_iCountry) { case KOREA : //if(g_nmCID.IsEqualCaseSensitive("em") || g_nmCID.IsEqualCaseSensitive("nt")) //if(g_nmCID.IsEqualCaseSensitive("or")) if(g_nmCID.Length() > 0) g_bAutoLogin = TRUE; // MessageBox(NULL, "g_bAutoLogin is True", "autologin", MB_OK); break; case TAIWAN : break; case CHINA : break; case THAILAND : break; case TAIWAN2: break; case JAPAN : g_bAutoLogin = TRUE; break; case MALAYSIA : break; case USA: break; case BRAZIL: break; case HONGKONG: g_bAutoLogin = TRUE; break; } } } /*********************************************************************************************** * IsRunning() * ÃÂߺ¹ ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ ¹ÃƒÂ¦ÃƒÂö ÇÃ‼ö * ÇöÀç ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ ÃÂßÀÎ Ç÷μ¼½Ã‚ºÂ¸Â¦ °Ë»öÇÿ© Nksp.exe°¡ ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ µÇ¾ÃƒÂ® ÀÖ´Â °ÃÂÀÌ ÀÖ´ÂÃÂö È®ÀÎÇÿ© TRUE, FALSE¸¦ * ¸®ÅàÇÑ´Ù. *************************************************************************************************/ BOOL IsRunning(void) { PROCESSENTRY32 peNext; // â±Ù Ç÷μ¼½Ã‚º ÇÚµéÀ» »ý¼Ã‚ºÃ‡Ã‘´Ù. HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapShot == INVALID_HANDLE_VALUE ) { if( g_iCountry == RUSSIA ) { MessageBox(NULL, "Îøèáêàçàïóñê?ïðîãðàìì?LastChaos!", "LastChaos Run", MB_OK); } else { MessageBox(NULL, "Fail Execute LastChaos!", "LastChaos Run", MB_OK); } return TRUE; } peNext.dwSize = sizeof(PROCESSENTRY32); int nFindNum = 0; int nSize = 0; DWORD dwTemp = GetCurrentProcessId(); BOOL bCurrentProcess = FALSE; Process32First(hSnapShot, &peNext); // ù¹ÃƒÂ¸Ãƒâ€šÃ‚° Ç÷μ¼½Ã‚ºÂ¸Â¦ °¡Ã®¿Â´Ù. while(Process32Next(hSnapShot, &peNext)) // ¸ðµç Ç÷μ¼½Ã‚ºÂ¸Â¦ °Ë»öÇÑ´Ù. { if (peNext.th32ProcessID == dwTemp) { bCurrentProcess = TRUE; continue; } nSize = strlen(peNext.szExeFile); if ( nSize > 8 ) { nSize -= 8; } else { nSize = 0; } if (stricmp(peNext.szExeFile+(nSize), "Nksp.exe") == 0) { nFindNum++; if (nFindNum > 0) { CloseHandle(hSnapShot); return TRUE; } } } CloseHandle(hSnapShot); if (!bCurrentProcess) { if( g_iCountry == RUSSIA ) { MessageBox(NULL, "Îøèáêàçàïóñê?ïðîãðàìì?LastChaos!", "LastChaos Run", MB_OK); } else { MessageBox(NULL, "Fail Execute LastChaos!", "LastChaos Run", MB_OK); } return TRUE; } return FALSE; } static void ApplyRenderingPreferences(void) { ApplyGLSettings(TRUE); } /* extern void ApplyVideoMode(void) { StartNewMode( (GfxAPIType)sam_iGfxAPI, sam_iDisplayAdapter, sam_iScreenSizeI, sam_iScreenSizeJ, (enum DisplayDepth)sam_iDisplayDepth, IsFullScreen( sam_bFullScreenActive) ); } */ static void BenchMark(void) { _pGfx->Benchmark(_pvpViewPortMain, _pdpMain); } static void QuitGame(void) { _pGameState->Running() = FALSE; _pGameState->QuitScreen() = FALSE; } // check if another app is already running static HANDLE _hLock = NULL; static CTFileName _fnmLock; static void DirectoryLockOn(void) { // create lock filename _fnmLock = _fnmApplicationPath+"nksp.loc"; // try to open lock file _hLock = CreateFile( _fnmLock, GENERIC_WRITE, 0/*no sharing*/, NULL, // pointer to security attributes CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_DELETE_ON_CLOSE, // file attributes NULL); // if failed if (_hLock==NULL || GetLastError()!=0) { // report warning CPrintF(TRANS("WARNING: Last Chaos didn't shut down properly last time!\n")); } } static void DirectoryLockOff(void) { // if lock is open if (_hLock!=NULL) { // close it CloseHandle(_hLock); } } //°Âµ¿¹ÃƒÅ½ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ ½ÃƒÆ’½Ã‚ºÃ…Û ¸¶Ã‚¿Ã¬½Ã‚º À۾÷ 09.09 // NOTE : ¾Ãƒâ€“´Ã¸ÞÀ̼Ç Ä¿¼Ã‚¸¦ ¸®¼Ãƒâ€™½Ã‚º·ÃƒÅ½Ã‚ºÃŽÃ…àÀþî¿È. static HCURSOR LoadAnimationCursor(HINSTANCE hInstance, UINT nID) { HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(nID), "CURSORS"); DWORD dwSize = SizeofResource(hInstance, hRes); HGLOBAL hGlob = LoadResource(hInstance, hRes); LPBYTE pBytes = (LPBYTE)LockResource(hGlob); return (HCURSOR)CreateIconFromResource(pBytes, dwSize, FALSE, 0x00030000); } //°Âµ¿¹ÃƒÅ½ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ ½ÃƒÆ’½Ã‚ºÃ…Û ¸¶Ã‚¿Ã¬½Ã‚º À۾÷ 09.09 void End(void); // automaticaly manage input enable/disable toggling //static BOOL _bInputEnabled = FALSE; /*void UpdateInputEnabledState(void) { // do nothing if window is invalid if( _hwndMain==NULL) return; // input should be enabled if application is active // and no menu is active and no console is active BOOL bShouldBeEnabled = ( !IsIconic(_hwndMain) && !_pGameState->m_bMenuActive && _pGame->gm_csConsoleState==CS_OFF ) || _bDefiningKey; // if should be turned off if( (!bShouldBeEnabled && _bInputEnabled) || _bReconsiderInput) { // disable it and remember new state _pInput->DisableInput(); _bInputEnabled = FALSE; } // if should be turned on if( bShouldBeEnabled && !_bInputEnabled) { // enable it and remember new state _pInput->EnableInput(_hwndMain); _bInputEnabled = TRUE; } _bReconsiderInput = FALSE; }*/ // automaticaly manage pause toggling void UpdatePauseState(void) { // ¾²Ãƒâ‚¬ÃƒÅ’ÃÂö ¾ÃƒÅ ´Â ºÎºÃÂ. /* BOOL bShouldPause = ( _gmRunningGameMode == GM_SINGLE_PLAYER ) && ( _pGameState->m_bMenuActive || _pGame->gm_csConsoleState == CS_ON || _pGame->gm_csConsoleState == CS_TURNINGON || _pGame->gm_csConsoleState == CS_TURNINGOFF ); _pNetwork->SetLocalPause(bShouldPause); */ } // limit current frame rate if neeeded void LimitFrameRate(void) { // measure passed time for each loop static CTimerValue tvLast(-1.0f); CTimerValue tvNow = _pTimer->GetHighPrecisionTimer(); TIME tmCurrentDelta = (tvNow-tvLast).GetSeconds(); // limit maximum frame rate sam_iMaxFPSActive = ClampDn( (INDEX)sam_iMaxFPSActive, 1L); sam_iMaxFPSInactive = ClampDn( (INDEX)sam_iMaxFPSInactive, 1L); INDEX iMaxFPS = sam_iMaxFPSActive; if( IsIconic(_hwndMain)) iMaxFPS = sam_iMaxFPSInactive; /* if(_pGame->gm_CurrentSplitScreenCfg==CGame::SSC_DEDICATED) { iMaxFPS = ClampDn(iMaxFPS, 60L); // never go very slow if dedicated server } */ TIME tmWantedDelta = 1.0f / iMaxFPS; if( tmCurrentDelta<tmWantedDelta) Sleep( (tmWantedDelta-tmCurrentDelta)*1000.0f); // remember new time tvLast = _pTimer->GetHighPrecisionTimer(); } /* // load first demo void StartNextDemo(void) { // ¾Ã‚µÂ¸Ã°¾ÃƒÂ¸Ã‚´Ã‚ ºÎºÃÂÀ̹ǷÃŽ ÃÂּ®Ã³Ã‚¸Â®ÂµÃŠ. if (!sam_bAutoPlayDemos || !_bInAutoPlayLoop) { _bInAutoPlayLoop = FALSE; return; } // skip if no demos if(_lhAutoDemos.IsEmpty()) { _bInAutoPlayLoop = FALSE; return; } // get first demo level and cycle the list CLevelInfo *pli = LIST_HEAD(_lhAutoDemos, CLevelInfo, li_lnNode); pli->li_lnNode.Remove(); _lhAutoDemos.AddTail(pli->li_lnNode); // if intro if (pli->li_fnLevel==sam_strIntroLevel) { // start intro _gmRunningGameMode = GM_NONE; _pGame->gm_aiStartLocalPlayers[0] = 0; _pGame->gm_aiStartLocalPlayers[1] = -1; _pGame->gm_aiStartLocalPlayers[2] = -1; _pGame->gm_aiStartLocalPlayers[3] = -1; _pGame->gm_strNetworkProvider = "Local"; _pGame->gm_StartSplitScreenCfg = CGame::SSC_PLAY1; _pShell->SetINDEX("gam_iStartDifficulty", CSessionProperties::GD_NORMAL); _pShell->SetINDEX("gam_iStartMode", CSessionProperties::GM_FLYOVER); CUniversalSessionProperties sp; _pGame->SetSinglePlayerSession(sp); _pGame->gm_bFirstLoading = TRUE; if ( _pGame->PreNewGame() && _pGame->NewGame( sam_strIntroLevel, sam_strIntroLevel, sp)) { _gmRunningGameMode = GM_INTRO; } // if not intro } else { // start the demo _pGame->gm_StartSplitScreenCfg = CGame::SSC_OBSERVER; _pGame->gm_aiStartLocalPlayers[0] = -1; _pGame->gm_aiStartLocalPlayers[1] = -1; _pGame->gm_aiStartLocalPlayers[2] = -1; _pGame->gm_aiStartLocalPlayers[3] = -1; // play the demo _pGame->gm_strNetworkProvider = "Local"; _gmRunningGameMode = GM_NONE; if( _pGame->StartDemoPlay( pli->li_fnLevel)) { _gmRunningGameMode = GM_DEMO; CON_DiscardLastLineTimes(); } } if (_gmRunningGameMode==GM_NONE) { _bInAutoPlayLoop = FALSE; } } // set registry key for GameSpy void RegisterGameSpy(void) { char strExePath[MAX_PATH+1] = ""; // get full path to the exe GetModuleFileName( NULL, strExePath, sizeof(strExePath)-1); // create the registry key HKEY hkey; DWORD dwDisposition; LONG lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\GameSpy\\games",0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwDisposition); if (lRes!=ERROR_SUCCESS) { return; } // set the value to current application #if !TECHTESTONLY #if _SE_DEMO RegSetValueEx(hkey, "serioussamdemo", 0, REG_SZ, (UBYTE*)strExePath, strlen(strExePath)); #else RegSetValueEx(hkey, sam_strGameName, 0, REG_SZ, (UBYTE*)strExePath, strlen(strExePath)); #endif #endif // close the key RegCloseKey(hkey); } */ BOOL _bCDPathFound = FALSE; BOOL FileExistsOnHD(const CTString &strFile) { FILE *f = fopen(_fnmApplicationPath+strFile, "rb"); if (f!=NULL) { fclose(f); return TRUE; } else { return FALSE; } } /* // find possible cd path BOOL FindCDPath(void) { // if no specified cdpath if (_fnmCDPath=="") { // use default one _fnmCDPath = CTString("C:\\Install\\"); } // for each drive for(INDEX chDrive='C'; chDrive<='Z'; chDrive++) { char strDrive[4]; strDrive[0] = chDrive; strDrive[1] = ':'; strDrive[2] = '\\'; strDrive[3] = 0; // if not cdrom if (GetDriveType(strDrive) != DRIVE_CDROM) { // skip it continue; } // substitute the drive letter ((char*)(const char*)_fnmCDPath)[0] = chDrive; // if the path is valid FILE *f = fopen(_fnmCDPath+_fnmForCDCheck, "rb"); _bCDPathFound = (BOOL)f; if (f!=NULL) { // we have found the cd fclose(f); return TRUE; } } return FALSE; } BOOL IsCDInDrive(void) { CTFileName fnmExpanded; INDEX iType = ExpandFilePath(EFP_READ, CTString("Setup.exe"), fnmExpanded); if (iType!=EFP_FILE || fnmExpanded.HasPrefix(_fnmCDPath)) { return FALSE; } fnmExpanded = fnmExpanded.FileDir()+_fnmForCDCheck; FILE *f = fopen(fnmExpanded, "rb"); if (f==NULL) { return FALSE; } fclose(f); return TRUE; } */ void TrimString(char *str) { int i = strlen(str); if (str[i-1]=='\n' || str[i-1]=='\r') { str[i-1]=0; } } /* BOOL PerformCDCheck(void) { // default message char strTitle[256] = "CD check"; char strMessage[256] = "Please insert the game CD"; // first get the application filename char strTmpPath[MAX_PATH] = ""; GetModuleFileName( NULL, strTmpPath, sizeof(strTmpPath)-1); int iLen = strlen(strTmpPath); // generate 'insert-cd' text filename strTmpPath[iLen-3] = 'c'; strTmpPath[iLen-2] = 'd'; strTmpPath[iLen-1] = 0; // try to load the file FILE *f = fopen(strTmpPath, "rt"); if (f!=NULL) { fgets(strTitle, sizeof(strTitle)-1, f); TrimString(strTitle); fgets(strMessage, sizeof(strMessage)-1, f); TrimString(strMessage); fclose(f); } // repeat FOREVER{ // if cd path found if (FindCDPath()) { // ok return TRUE; } #if !CD_CHECK || _SE_DEMO || TECHTESTONLY return TRUE; #endif // ask user to insert CD int iResult = MessageBox(_hwndMain, strMessage, strTitle, MB_ICONEXCLAMATION|MB_RETRYCANCEL); if (iResult!=IDRETRY) { return FALSE; } Sleep(1000); } } // run web browser and view an url void RunBrowser(const char *strUrl) { int iResult = (int)ShellExecute( _hwndMain, "OPEN", strUrl, NULL, NULL, SW_SHOWMAXIMIZED); if (iResult<32) { // should report error? NOTHING; } } */ void LoadAndForceTexture(CTextureObject &to, CTextureObject *&pto, const CTFileName &fnm) { try { to.SetData_t(fnm); CTextureData *ptd = (CTextureData*)to.GetData(); ptd->Force( TEX_CONSTANT); ptd = ptd->td_ptdBaseTexture; if( ptd!=NULL) ptd->Force( TEX_CONSTANT); pto = &to; } catch( char *pchrError) { (void*)pchrError; pto = NULL; } } //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(DevPartner Bug Fix)(2005-01-14) HMODULE g_hGame = NULL; //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(DevPartner Bug Fix)(2005-01-14) void InitializeGame(void) { try { #ifndef NDEBUG #define GAMEDLL ("Bin\\Debug\\Game"+_strModExt+"D.dll") #else #define GAMEDLL ("Bin\\Game"+_strModExt+".dll") #endif CTFileName fnmExpanded; ExpandFilePath(EFP_READ, CTString(GAMEDLL), fnmExpanded); CPrintF(TRANS("Loading game library '%s'...\n"), (const char *)fnmExpanded); //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(DevPartner Bug Fix)(2005-01-14) g_hGame = LoadLibrary(fnmExpanded); if (g_hGame==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } CGame* (*GAME_Create)(void) = (CGame* (*)(void))GetProcAddress(g_hGame, "GAME_Create"); if (GAME_Create==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(DevPartner Bug Fix)(2005-01-14) _pGame = GAME_Create(); } catch (char *strError) { FatalError("%s", strError); } // init game - this will load persistent symbols _pGame->Initialize(CTString("Data\\nksp.gms")); // ENGINE_API extern float g_fGWTimeMul; // ENGINE_API extern float g_fGWTime; // Game world time // g_fGWTimeMul = 0.0f; // g_fGWTime = 100.0f; } static char strExePath[MAX_PATH] = ""; static char strDirPath[MAX_PATH] = ""; CEntityClass *g_pPlayer, *g_pWorldBase; ENGINE_API void CheckEngineVersion(); BOOL Init( HINSTANCE hInstance, int nCmdShow, CTString strCmdLine) { // »õ·ÃƒÅ½Ã‚¿Ã® ¹ÃƒÂ¶Ãƒâ‚¬ÃƒÂ¼Ãƒâ‚¬Ãƒâ€¡ Launcher°¡ Àִ°¡ È®ÀÎÇðàÀÖ´Ù¸é, Laucher¸¦ ¾ÃƒÂ·Ã‚µÂ¥Ã€ÃŒÃ†Â®Ã‡Ã‘´Ù. // by seo - 40727 // get full path to the exe char strTmpPath[MAX_PATH] = ""; GetModuleFileName( NULL, strExePath, sizeof(strExePath)-1); for (int i=0; i < 2; i++) { for (int j=strlen(strExePath)-1; j > 0; j--) { if (strExePath[j] == '\\') { strExePath[j] = '\0'; break; } } } strcat(strExePath, "\\"); CTFileName fnmLC = strExePath; CTFileName fnmLCNew = strExePath; // CTFileName fnmLW = strExePath; // CTFileName fnmLWNew = strExePath; CTFileName fnmLccnct = strExePath; CTFileName fnmLccnctNew = strExePath; fnmLC = fnmLC + "LC.exe"; fnmLCNew = fnmLCNew + "LCNew.exe"; // õÇôë¶ÃƒÂµÃ‚¿Ã«. // fnmLW = fnmLW + "LW.exe"; // fnmLWNew = fnmLWNew + "LWNew.exe"; fnmLccnct = fnmLccnct + "lccnct.dta"; fnmLccnctNew = fnmLccnctNew + "lccnctNew.dta"; FILE *fp = fopen (fnmLccnctNew, "rb"); if (fp) { fclose(fp); fclose(fp); Sleep(1000); remove (fnmLccnct); Sleep(1000); int ret = rename(fnmLccnctNew, fnmLccnct); } fp = NULL; fp = fopen (fnmLCNew, "rb"); if (fp) { fclose(fp); Sleep(1000); remove (fnmLC); Sleep(1000); int ret = rename(fnmLCNew, fnmLC); // Date : 2005-05-17(¿ÀÈÄ 4:44:15), By Lee Ki-hwan Ãß°¡ if (!ret) { ShowCursor(TRUE); if( GetSystemDefaultLangID() == 0x0804 ) // ÃÂß±¹ ·ÃƒÅ½Ãƒâ€žÃƒÆ’ÀÇ °æ¿ì ¼ÃƒÂ¶ÃƒÂ¤ { MessageBox(NULL, "Çëµã»÷È·¶Ã‚¨Â£Â¬Ã–ØÃÂÂÆô¶Ã‚¯ÃÂú»ê¡£", "ÃÂú»ê", MB_OK); } else { MessageBox(NULL, "Update is completed.\nPlease, restart game.", "Update completed", MB_OK); } return 0; } } /* fp = NULL; fp = fopen (fnmLWNew, "rb"); if (fp) { fclose(fp); Sleep(1000); remove (fnmLW); Sleep(1000); int ret = rename(fnmLWNew, fnmLW); // Date : 2005-05-17(¿ÀÈÄ 4:44:15), By Lee Ki-hwan Ãß°¡ if (!ret) { ShowCursor(TRUE); if( GetSystemDefaultLangID() == 0x0804 ) // ÃÂß±¹ ·ÃƒÅ½Ãƒâ€žÃƒÆ’ÀÇ °æ¿ì ¼ÃƒÂ¶ÃƒÂ¤ { MessageBox(NULL, "Çëµã»÷È·¶Ã‚¨Â£Â¬Ã–ØÃÂÂÆô¶Ã‚¯ÃÂú»ê¡£", "ÃÂú»ê", MB_OK); } else { MessageBox(NULL, "Update is completed.\nPlease, restart game.", "Update completed", MB_OK); } return 0; } }*/ // end. _hInstanceMain = hInstance; //0214 ½Ã‚ºÃ‡Ãƒ·Ã‚¡½ÃƒÆ’ ¾ÃƒË†¶ÃƒÂ§Ã‚¿Ã¬Â±Ã¢. // ShowSplashScreen(hInstance); // set registry key for GameSpy // deleted by seo - 40629 //RegisterGameSpy(); // remember desktop dimensions _pixDesktopWidth = ::GetSystemMetrics(SM_CXSCREEN); _pixDesktopHeight = ::GetSystemMetrics(SM_CYSCREEN); #ifdef USE_NEW_LAUNCHER if(strCmdLine.IsEqualCaseSensitive(CTString("4022"))) #else if(strCmdLine.IsEqualCaseSensitive(CTString("6574"))) #endif { } else { // WSS_NPROTECT 070405 ------------------>><< // È«ÄáÀÇ °æ¿ì nProtect·ÃƒÅ½ ÃÂߺ¹ °ËÃâ #ifdef NO_GAMEGUARD #ifndef MULTI_CLIENT if (IsRunning()) { if( g_iCountry == RUSSIA ) { MessageBox(NULL, "ÊëèåÃÂò LastChaos óæ?çàïóùå?", "LastChaos", MB_OK); } else { MessageBox(NULL, "LastChaos is already running on your system", "LastChaos Run", MB_OK); } return FALSE; } #endif // MULTI_CLIENT #endif #ifndef NKSP_NOT_NICKNAME const CTString CmpStr("dlwltnr"); char* strPos = '\0'; strPos = strstr(strCmdLine.str_String, CmpStr.str_String); if (!strPos || !CmpStr.IsEqualCaseSensitive(strPos)) { if( g_iCountry == RUSSIA ) { MessageBox(NULL, "ÊëèåÃÂò èãðû ÃÂÃ¥ ìîæå?áûòü çàïóùå?ñàìîñò?òåëüÃÂî.", "LastChaos", MB_OK); } else { MessageBox(NULL, "This program could not be run itself", "LastChaos", MB_OK); } return FALSE; } #endif } // prepare main window MainWindow_Init(); #ifdef XTRAP_SECURE_CKBANG_2010_07_20 if (XTRAP()) XTRAP()->EngineConfirm(); #endif OpenMainWindowInvisible(); // parse command line before initializing engine ParseCommandLine(strCmdLine); /*#if !_SE_DEMO if (!PerformCDCheck()) { return FALSE; } #endif*/ // initialize engine SE_InitEngine(sam_strGameName); extern BOOL g_bNasTrans; g_bNasTrans = FALSE; switch(g_iCountry) { case BRAZIL: SetClassLong( _hwndMain, GCL_HICON, (LONG)LoadIcon( _hInstanceMain, (LPCTSTR)IDI_GUNSOFT ) ); g_bNasTrans = TRUE; break; case HONGKONG: SetClassLong( _hwndMain, GCL_HICON, (LONG)LoadIcon( _hInstanceMain, (LPCTSTR)IDI_FUNMILY ) ); break; } // recheck for proper CD now /* if (FileExistsOnHD("Bin\\EntitiesMP.dll")) { _fnmForCDCheck = "Bin\\EntitiesMP.dll"; } else if (FileExistsOnHD("Bin\\Entities.dll")) { _fnmForCDCheck = "Bin\\Entities.dll"; } */ /*#if !_SE_DEMO if (!PerformCDCheck()) { return FALSE; } #endif*/ #if COPY_PROTECTION // get full path to the exe char strExePath[MAX_PATH] = ""; GetModuleFileName( NULL, strExePath, sizeof(strExePath)-1); char strDrive[] = "C:\\"; strDrive[0] = strExePath[0]; DWORD dwSerial; GetVolumeInformation(strDrive, NULL, 0, &dwSerial, NULL, NULL, NULL, 0); CTFileName fnmKey = CTString("TSE.key"); INDEX iSerial = dwSerial; // init encryption table two times BLOWFISH_CTX ctx1; BLOWFISH_CTX ctx2; CTString strEnKey = _strEngineBuild; strEnKey.TrimLeft(16); char aubKey1[16]; char aubKey2[16]; for(INDEX i=0; i<16; i++) { aubKey1[i] = strEnKey[i]; aubKey2[i] = strEnKey[16-1-i]; } Blowfish_Init (&ctx1, (unsigned char*)aubKey1, 16); Blowfish_Init (&ctx2, (unsigned char*)aubKey2, 16); // if no key if (!FileExists(fnmKey)) { // just bail out FatalError(TRANS("No registration key!\nPlease request registration key for code:\n\n%08X"), iSerial); return FALSE; // if key is here } else { // load it CTString strKey; LoadStringVar(fnmKey, strKey); __int64 llCodeRead = 0; strKey.ScanF("%I64x", &llCodeRead); __int64 llCode1 = llCodeRead; __int64 llCode2 = llCodeRead; // decrypt the code Blowfish_Decrypt(&ctx1, (ULONG*)&llCode1+1, ((ULONG*)&llCode1)); Blowfish_Decrypt(&ctx2, (ULONG*)&llCode2+1, ((ULONG*)&llCode2)); // if not valid if (llCode1!=iSerial && llCode2!=iSerial) { // bail out FatalError(TRANS("Registration key is invalid!")); return FALSE; } } #endif // if cd check didn't pass /* if (!_bCDPathFound) { // check current time SYSTEMTIME st; GetSystemTime(&st); // if after 30.3.2001, fail if (st.wYear>2001) { return FALSE; } else if (st.wYear==2001) { if (st.wMonth>3) { return FALSE; } else if (st.wMonth==3) { if (st.wDay>30) { return FALSE; } } } } */ SE_LoadDefaultFonts(); // now print the output of command line parsing // deleted by seo //CPrintF("%s", cmd_strOutput); // lock the directory DirectoryLockOn(); // load all translation tables InitTranslation(); try { AddTranslationTablesDir_t(CTString("Data\\Translations\\"), CTString("*.txt")); FinishTranslationTable(); } catch (char *strError) { FatalError("%s", strError); } // always disable all warnings when in serious sam _pShell->Execute( "con_bNoWarnings=1;"); // declare shell symbols // _pShell->DeclareSymbol("user void PlayDemo(CTString);", &PlayDemo); _pShell->DeclareSymbol("persistent INDEX sam_bFullScreen;", &sam_bFullScreenActive); // ±âº»ÀÇ ¿øµµ¿ì ¸ðµå ½ÃƒÆ’¿¡ Àüü ¸ðµå·ÃƒÅ½ º¯°æ /* if( OLD_WINDOW_MODE != WINDOW_MODE ) if ( sam_bFullScreenActive == OLD_WINDOW_MODE ) sam_bFullScreenActive = FULLSCREEN_MODE; */ // Date : 2005-09-13(¿ÀÈÄ 2:58:13), By Lee Ki-hwan // ´ë¸¸¿¡¼Ã‚ Â±Ã¢ÂºÂ» ¿øµµ¿ì ¸ðµå¸¦ ÃÂö¿øÇøé¼Ã‚ Ã‡ÃŠÂ¿Ã¤¾ÃƒÂ¸¾ÃƒÂ®ÃƒÂü _pShell->DeclareSymbol("persistent INDEX sam_iScreenSizeI;", &sam_iScreenSizeI); _pShell->DeclareSymbol("persistent INDEX sam_iScreenSizeJ;", &sam_iScreenSizeJ); _pShell->DeclareSymbol("persistent INDEX sam_iDisplayDepth;", &sam_iDisplayDepth); _pShell->DeclareSymbol("persistent INDEX sam_iDisplayAdapter;", &sam_iDisplayAdapter); _pShell->DeclareSymbol("persistent INDEX sam_iGfxAPI;", &sam_iGfxAPI); //_pShell->DeclareSymbol("persistent INDEX sam_bFirstStarted;", &sam_bFirstStarted); _pShell->DeclareSymbol("persistent INDEX sam_bAutoAdjustAudio;", &sam_bAutoAdjustAudio); _pShell->DeclareSymbol("persistent user INDEX sam_bWideScreen;", &sam_bWideScreen); _pShell->DeclareSymbol("persistent user FLOAT sam_fPlayerOffset;", &sam_fPlayerOffset); _pShell->DeclareSymbol("persistent user INDEX sam_bAutoPlayDemos;", &sam_bAutoPlayDemos); _pShell->DeclareSymbol("persistent user INDEX sam_iMaxFPSActive;", &sam_iMaxFPSActive); _pShell->DeclareSymbol("persistent user INDEX sam_iMaxFPSInactive;", &sam_iMaxFPSInactive); _pShell->DeclareSymbol("persistent user INDEX sam_bPauseOnMinimize;", &sam_bPauseOnMinimize); _pShell->DeclareSymbol("persistent user FLOAT sam_tmDisplayModeReport;", &sam_tmDisplayModeReport); _pShell->DeclareSymbol("persistent user CTString sam_strNetworkSettings;", &sam_strNetworkSettings); _pShell->DeclareSymbol("persistent user CTString sam_strIntroLevel;", &sam_strIntroLevel); _pShell->DeclareSymbol("persistent user CTString sam_strGameName;", &sam_strGameName); _pShell->DeclareSymbol("user CTString sam_strVersion;", &sam_strVersion); //_pShell->DeclareSymbol("user CTString sam_strFirstLevel;", &sam_strFirstLevel); //_pShell->DeclareSymbol("user CTString sam_strModName;", &sam_strModName); // _pShell->DeclareSymbol("persistent INDEX sam_bShowAllLevels;", &sam_bShowAllLevels); // _pShell->DeclareSymbol("persistent INDEX sam_bMentalActivated;", &sam_bMentalActivated); //_pShell->DeclareSymbol("user CTString sam_strTechTestLevel;", &sam_strTechTestLevel); //_pShell->DeclareSymbol("user CTString sam_strTrainingLevel;", &sam_strTrainingLevel); _pShell->DeclareSymbol("user void Quit(void);", &QuitGame); _pShell->DeclareSymbol("persistent user INDEX sam_iVideoSetup;", &sam_iVideoSetup); _pShell->DeclareSymbol("user void ApplyRenderingPreferences(void);", &ApplyRenderingPreferences); //_pShell->DeclareSymbol("user void ApplyVideoMode(void);", &ApplyVideoMode); _pShell->DeclareSymbol("user void Benchmark(void);", &BenchMark); /* _pShell->DeclareSymbol("user INDEX sam_bMenuSave;", &sam_bMenuSave); _pShell->DeclareSymbol("user INDEX sam_bMenuLoad;", &sam_bMenuLoad); _pShell->DeclareSymbol("user INDEX sam_bMenuControls;", &sam_bMenuControls); _pShell->DeclareSymbol("user INDEX sam_bMenuHiScore;", &sam_bMenuHiScore); */ _pShell->DeclareSymbol("user INDEX sam_bToggleConsole;",&sam_bToggleConsole); // _pShell->DeclareSymbol("INDEX sam_iStartCredits;", &sam_iStartCredits); // Obtain player and world base class without releasing it (this will never be released from stock) g_pPlayer = _pEntityClassStock->Obtain_t(CTString("Classes\\Player.ecl")); // this must not be a dependency! g_pWorldBase = _pEntityClassStock->Obtain_t(CTString("Classes\\WorldBase.ecl")); // this must not be a dependency! InitializeGame(); _pNetwork->md_strGameID = sam_strGameName; //LCDInit(); /*if( sam_bFirstStarted) { InfoMessage("%s", TRANS( "SeriousSam is starting for the first time.\n" "If you experience any problems, please consult\n" "ReadMe file for troubleshooting information.")); }*/ // initialize sound library snd_iFormat = Clamp( snd_iFormat, (INDEX)CSoundLibrary::SF_NONE, (INDEX)CSoundLibrary::SF_44100_16); _pSound->SetFormat( (enum CSoundLibrary::SoundFormat)snd_iFormat); if (sam_bAutoAdjustAudio) { _pShell->Execute("include \"Scripts\\Addons\\SFX-AutoAdjust.ini\""); } /* // execute script given on command line if (cmd_strScript!="") { CPrintF("Command line script: '%s'\n", cmd_strScript); CTString strCmd; strCmd.PrintF("include \"%s\"", cmd_strScript); _pShell->Execute(strCmd); } */ // load logo textures //LoadAndForceTexture(_toLogoCT, _ptoLogoCT, CTFILENAME("Textures\\Logo\\LogoCT.tex")); //LoadAndForceTexture(_toLogoODI, _ptoLogoODI, CTFILENAME("Textures\\Logo\\GodGamesLogo.tex")); //LoadAndForceTexture(_toLogoGSpy, _ptoLogoGSpy, CTFILENAME("Textures\\Logo\\LogoGSpy.tex")); //LoadAndForceTexture(_toLogoEAX, _ptoLogoEAX, CTFILENAME("Textures\\Logo\\LogoEAX.tex")); //LoadStringVar(CTString("Data\\Var\\Sam_Version.var"), sam_strVersion); //LoadStringVar(CTString("Data\\Var\\ModName.var"), sam_strModName); CPrintF(TRANS("Nksp version: %s\n"), sam_strVersion); //CPrintF(TRANS("Active mod: %s\n"), sam_strModName); //InitializeMenus(); // ¿øº». // if there is a mod /*if (_fnmMod!="") { // execute the mod startup script _pShell->Execute(CTString("include \"Scripts\\Mod_startup.ini\";")); }*/ // init gl settings module // deleted by seo //InitGLSettings(); // init level-info subsystem // deleted by seo //LoadLevelsList(); //LoadDemosList(); // apply application mode StartNewMode( GAT_D3D, sam_iDisplayAdapter, sam_iScreenSizeI, sam_iScreenSizeJ, (enum DisplayDepth)sam_iDisplayDepth, IsFullScreen( sam_bFullScreenActive) ); _pGameState = new CGameState; _pUIMgr = new CUIManager; // yjpark _pUIMgr->Create(); // yjpark //wooss 050822 add test ui version // TEST UI¸¦ À§ÇØ Ãß°¡ // TEST ȯ°æÀÌ ¾Ãƒâ€ ´Ò °æ¿ì À̺κÃÂÀ» FALSE·ÃƒÅ½ ó¸® // TEST ÇðÃÂÀÚ Çô UI º¯°æ½ÃƒÆ’ TYPE ºÎºÃÂÀ» °ÃÂÃÄ ÃÂØ´Ù //------------------------------------------------------------------------------>> // _pUIMgr->m_testUI_MODE = TRUE; _pUIMgr->m_testUI_MODE = FALSE; _pUIMgr->m_testUI_TYPE = UI_SELECTLIST; //wooss UI test variable //<<------------------------------------------------------------------------------ if(_pUIMgr->m_testUI_MODE) _pUIMgr->SetUIGameState( UGS_UI_TEST); else _pUIMgr->SetUIGameState( UGS_LOGIN ); // yjpark _pUIMgr->GetOption()->SetDesktopSize( _pixDesktopWidth, _pixDesktopHeight ); _pUIMgr->SetGameHandle(_pGame); _pUIMgr->ResetUIPos( _pdpMain ); //°Âµ¿¹ÃƒÅ½ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ ½ÃƒÆ’½Ã‚ºÃ…Û ¸¶Ã‚¿Ã¬½Ã‚º À۾÷ 09.09 //#define ANIMATION_CURSOR #ifdef ANIMATION_CURSOR _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_NORMAL, LoadAnimationCursor( _hInstanceMain, IDC_NORMAL_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_NORMAL, LoadAnimationCursor( _hInstanceMain, IDC_ATTACK_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_SKILL, LoadAnimationCursor( _hInstanceMain, IDC_SKILL_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_MAGIC, LoadAnimationCursor( _hInstanceMain, IDC_MAGIC_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_BOW, LoadAnimationCursor( _hInstanceMain, IDC_BOW_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_PICK, LoadAnimationCursor( _hInstanceMain, IDC_PICK_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_TALK, LoadAnimationCursor( _hInstanceMain, IDC_TALK_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_PRODUCE, LoadAnimationCursor( _hInstanceMain, IDC_PRODUCE_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_SIZE, LoadAnimationCursor( _hInstanceMain, IDC_SIZE_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ZOOMIN, LoadAnimationCursor( _hInstanceMain, IDC_ZOOMIN_CURSOR) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_SIGNAL, LoadAnimationCursor( _hInstanceMain, IDC_SIGNAL_CURSOR) ); #else // FIXME : EngineÀÇ Resource¿¡ *.cur ÈÂÂÀÃÂÀ» ³Ãƒâ€“¾ÃƒÂ®ÃƒÂáÀ»¶Ã‚§, ÇØ´ç Ä¿¼Ã‚¸¦ ¾ÃƒÂ²¾ÃƒÂ®Ã‚¿Ã€ÃÂö ¸øÇؼ À̷±½Ãƒâ€žÃƒâ‚¬Ã‚¸·ÃƒÅ½ ó¸®ÇÃâ€. _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_NORMAL, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_NORMAL_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_NORMAL, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_ATTACK_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_SKILL, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_SKILL_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_MAGIC, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_MAGIC_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ATT_BOW, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_BOW_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_PICK, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_PICK_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_TALK, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_TALK_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_PRODUCE, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_PRODUCE_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_SIZE, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_SIZE_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_ZOOMIN, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_ZOOMIN_CURSOR) ) ); _pUIMgr->GetMouseCursor()->SetCursorHandle( UMCT_SIGNAL, LoadCursor( _hInstanceMain, MAKEINTRESOURCE(IDC_SIGNAL_CURSOR) ) ); #endif //°Âµ¿¹ÃƒÅ½ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ ½ÃƒÆ’½Ã‚ºÃ…Û ¸¶Ã‚¿Ã¬½Ã‚º À۾÷ 09.09 // set default mode reporting /*if( sam_bFirstStarted) { _iDisplayModeChangeFlag = 0; sam_bFirstStarted = FALSE; }*/ //0214 ½Ã‚ºÃ‡Ãƒ·Ã‚¡½ÃƒÆ’ ¼ÃƒÂ»Ã‚±Ã¢Â±Ã¢ // HideSplashScreen(); /* if (cmd_strPassword!="") { _pShell->SetString("net_strConnectPassword", cmd_strPassword); } #if TECHTESTONLY cmd_strWorld = CTString("Levels\\TechTestElsa.wld"); #endif if (cmd_strPlayer!="") { int iPlayer = atoi(cmd_strPlayer); _pGame->gm_aiMenuLocalPlayers[0] = Clamp(iPlayer, 0, 7); } */ //0105 42line ÃÂö¿ì±â /* // if connecting to server from command line if (cmd_strServer!="") { CTString strPort = ""; if (cmd_iPort>0) { _pShell->SetINDEX("net_iPort", cmd_iPort); strPort.PrintF(":%d", cmd_iPort); } CPrintF(TRANS("Command line connection: '%s%s'\n"), cmd_strServer, strPort); // go to join menu _pGame->gam_strJoinAddress = cmd_strServer; if (cmd_bQuickJoin) { extern void JoinNetworkGame(void); JoinNetworkGame(); } else { StartMenus("join"); } // if starting world from command line } else if (cmd_strWorld!="") { CPrintF(TRANS("Command line world: '%s'\n"), cmd_strWorld); // try to start the game with that level try { if (cmd_iGoToMarker>=0) { CPrintF(TRANS("Command line marker: %d\n"), cmd_iGoToMarker); CTString strCommand; strCommand.PrintF("cht_iGoToMarker = %d;", cmd_iGoToMarker); _pShell->Execute(strCommand); } _pGame->gam_strCustomLevel = cmd_strWorld; if (cmd_bServer) { extern void StartNetworkGame(void); StartNetworkGame(); } else { extern void StartSinglePlayerGame(void); StartSinglePlayerGame(); } } catch (char *strError) { CPrintF(TRANS("Cannot start '%s': '%s'\n"), cmd_strWorld, strError); } // if no relevant starting at command line } else { StartNextDemo(); } */ //0105 //_pGame->gam_strJoinAddress = "211.56.73.22"; //_pGame->gm_strNetworkProvider = "TCP/IP Client"; /* _pGame->gam_strJoinAddress = "211.56.73.12"; // by seo 40225 _pGame->gm_strNetworkProvider = "TCP/IP Mmo"; if (_pGame->JoinGame( CNetworkSession( _pGame->gam_strJoinAddress))) { _gmRunningGameMode = GM_NETWORK; } //.. */ //_pGameState->m_BackGroundWorld.Load_t(LOGIN_WORLD); { /* _pGame->gm_strNetworkProvider = "Local"; _pGame->gm_aiStartLocalPlayers[0] = 0; _pGame->gm_CurrentSplitScreenCfg = CGame::SSC_PLAY1; CSessionProperties sp; _pGame->SetQuickStartSession(sp); CPlayerCharacter &pc = _pGame->gm_apcPlayers[0]; pc.pc_iPlayerIndex = 0; if(!_pGame->PreNewGame() || !_pGame->NewGame( LOGIN_WORLD, LOGIN_WORLD, sp)) { //DisableLoadingHook(); } //_pNetwork->ga_World; //_pGameState->m_BackGroundWorld.Load_t(LOGIN_WORLD); _pUIMgr->SetBackgroundWorld(&_pNetwork->ga_World); */ /* while(TRUE) { GameMainLoop(); pdp->SetAsCurrent(); pdp->Fill(C_BLACK|CT_OPAQUE); pdp->FillZBuffer(ZBUF_BACK); GameRedrawView(pdp, GRV_SHOWEXTRAS); pvp->SwapBuffers(); }; StopGame(); DisableLoadingHook(); */ } //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(5th Closed beta)(0.2) WebAddressInit(); g_web.Begin(); //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(5th Closed beta)(0.2) // 051121 nksp.exe version check on/off if(strCmdLine.IsEqualCaseSensitive(CTString("6574"))) ; else { CheckEngineVersion(); CheckEntityVersion(); } return TRUE; } void End(void) { //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(5th Closed beta)(0.2) g_web.End(); //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(5th Closed beta)(0.2) _pGame->DisableLoadingHook(); // cleanup level-info subsystem //ClearLevelsList(); // ¿øº». //ClearDemosList(); _pFontStock->Release(_pfdDisplayFont); _pfdDisplayFont = NULL; _pFontStock->Release(_pfdConsoleFont); _pfdConsoleFont = NULL; _pEntityClassStock->Release(g_pPlayer); g_pPlayer = NULL; _pEntityClassStock->Release(g_pWorldBase); g_pWorldBase = NULL; // destroy the main window and its canvas if (_pvpViewPortMain!=NULL) { _pGfx->DestroyWindowCanvas( _pvpViewPortMain); _pvpViewPortMain = NULL; _pdpNormalMain = NULL; } CloseMainWindow(); MainWindow_End(); //DestroyMenus(); // ¿øº». _pGame->End(); //LCDEnd(); // unlock the directory DirectoryLockOff(); SE_EndEngine(); void (*GAME_Destroy)(void) = (void (*)(void))GetProcAddress(g_hGame, "GAME_Destroy"); if (GAME_Destroy==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } GAME_Destroy(); //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(DevPartner Bug Fix)(2005-01-14) if(g_hGame) FreeLibrary(g_hGame); //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(DevPartner Bug Fix)(2005-01-14) } // print display mode info if needed void PrintDisplayModeInfo(void) { // skip if timed out if( _pTimer->GetRealTimeTick() > (_tmDisplayModeChanged+sam_tmDisplayModeReport)) return; // cache some general vars SLONG slDPWidth = _pdpMain->GetWidth(); SLONG slDPHeight = _pdpMain->GetHeight(); if( _pdpMain->IsDualHead()) slDPWidth/=2; if( _pdpMain->IsTripleHead()) slDPWidth/=3; CDisplayMode dm; dm.dm_pixSizeI = slDPWidth; dm.dm_pixSizeJ = slDPHeight; // determine proper text scale for statistics display FLOAT fTextScale = (FLOAT)slDPHeight/480.0f/2; // get resolution CTString strRes; extern CTString _strPreferencesDescription; strRes.PrintF( "%dx%dx%s", slDPWidth, slDPHeight, _pGfx->gl_dmCurrentDisplayMode.DepthString()); if( dm.IsDualHead()) strRes += TRANS(" DualMonitor"); if( dm.IsTripleHead()) strRes += TRANS(" TripleMonitor"); if( dm.IsWideScreen()) strRes += TRANS(" WideScreen"); if( _pGfx->gl_eCurrentAPI==GAT_OGL) strRes += " (OpenGL)"; else if( _pGfx->gl_eCurrentAPI==GAT_D3D) strRes += " (Direct3D)"; CTString strDescr; strDescr.PrintF("\n%s (%s)\n", _strPreferencesDescription, RenderingPreferencesDescription(sam_iVideoSetup)); strRes += strDescr; // tell if application is started for the first time, or failed to set mode if( _iDisplayModeChangeFlag==0) { strRes += TRANS("Display mode set by default!"); } else if( _iDisplayModeChangeFlag==2) { strRes += TRANS("Last mode set failed!"); } // print it all _pdpMain->SetFont( _pfdDisplayFont); _pdpMain->SetTextScaling( fTextScale); _pdpMain->SetTextShadow( +2); _pdpMain->SetTextAspect( 1.0f); const FLOAT fPosMul = _pdpMain->IsTripleHead() ? 1.05f : 0.05f; //pdp->PutText( strRes, slDPWidth*fPosMul, slDPHeight*0.85f, LCDGetColor(C_GREEN|255, "display mode")); // ¿øº». _pdpMain->PutText( strRes, slDPWidth*fPosMul, slDPHeight*0.85f); } // do the main game loop and render screen void DoGame(void) { // set flag if not in game if( !_pGame->gm_bGameOn) //_gmRunningGameMode = GM_NONE; // ¿øº». _pGameState->GetGameMode() = CGameState::GM_NONE; // °Ãâ€Ãƒâ‚¬Ãƒâ€œ ¸ðµå°¡ µ¥¸ð¸ðµåÀö§... /* if( _gmRunningGameMode==GM_DEMO && _pNetwork->IsDemoPlayFinished() ||_gmRunningGameMode==GM_INTRO && _pNetwork->IsGameFinished()) { _pGame->StopGame(); _gmRunningGameMode = GM_NONE; // load next demo StartNextDemo(); if (!_bInAutoPlayLoop) { // start menu StartMenus(); } } */ /* // do the main game loop if( _gmRunningGameMode == GM_LOGIN){ _pNetwork-> } else*/ // °Ãâ€Ãƒâ‚¬Ãƒâ€œ ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ ÃÂßÀö§ »óÅÂ! //_pGameState->m_bMenuActive 0 //_pGameState->m_bMenuRendering 1 //_gmMenuGameMode GM_NONE //_gmRunningGameMode GM_NETWORK //_pGame->gm_bGameOn 1 //_pGame->gm_bMenuOn 0 // °Ãâ€Ãƒâ‚¬Ãƒâ€œÃƒâ‚¬ÃƒÅ’ ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ ÃÂßÀö§¸¸ È£ÃâµÇ´Â ºÎºÃÂ. //if( _gmRunningGameMode != GM_NONE) //if( _gmRunningGameMode != GM_NONE) // ¿øº». if( _pGameState->GetGameMode() != CGameState::GM_NONE) // ¿øº». { _pGame->GameMainLoop(); //0215 // CSoundObject soMusic; // soMusic.Play_t(CTFILENAME("Music\\Credits.mp3"), SOF_NONGAME|SOF_MUSIC|SOF_LOOP); // // if game is not started } else { // just handle broadcast messages _pNetwork->GameInactive(); } // redraw the view if( !IsIconic(_hwndMain) && _pdpMain!=NULL && _pdpMain->Lock()) { // ¸Þ´º°¡ ºñȰ¼Ã‚ºÃˆÂ ÂµÃ‡¾ÃƒÂºÃ‚°ÃÂ, °Ãâ€Ãƒâ‚¬Ãƒâ€œ ½Ãƒâ€¡Ãƒâ€¡ÃƒÂ ÃÂßÀö§??? //if( _gmRunningGameMode!=GM_NONE && !_pGameState->m_bMenuActive ) //if( _gmRunningGameMode!=GM_NONE && !_pGameState->m_bMenuActive ) // ¿øº». int iState = _pGameState->GetGameMode(); //BOOL bState = _pGameState->m_bMenuActive; if( _pGameState->GetGameMode() != CGameState::GM_NONE) // ¿øº». { // handle pretouching of textures and shadowmaps _pdpMain->Unlock(); // °á±¹Ãƒâ‚¬Ã‚º RenderView()¸¦ È£ÃâÇÃâ€. _pGame->GameRedrawView( _pdpMain, (_pGame->gm_csConsoleState!=CS_OFF)?0:GRV_SHOWEXTRAS); _pdpMain->Lock(); } else { //pdp->Fill( LCDGetColor(C_dGREEN|CT_OPAQUE, "bcg fill")); // ¿øº». _pdpMain->Fill(C_dGREEN|CT_OPAQUE); } // do menu /* if( _pGameState->m_bMenuRendering) { // clear z-buffer pdp->FillZBuffer( ZBUF_BACK); // remember if we should render menus next tick _pGameState->m_bMenuRendering = DoMenu(pdp); } */ //_pUIMgr->SetBackgroundWorld(&_pGameState->m_BackGroundWorld); //pdp->FillZBuffer( ZBUF_BACK); /* TIME tmTickNow = _pTimer->GetRealTimeTick(); while( _tmMenuLastTickDone < tmTickNow) { _pTimer->SetCurrentTick(_tmMenuLastTickDone); _tmMenuLastTickDone += _pTimer->TickQuantum; } SetMenuLerping(); */ //if(_pGameState->m_bMenuRendering) // Render User interface //_pUIMgr->Render( _pdpMain ); // yjpark //0609 kwon _pGame->GameRedrawCursor( _pdpMain, (_pGame->gm_csConsoleState!=CS_OFF)?0:GRV_SHOWEXTRAS); // print display mode info if needed //PrintDisplayModeInfo(); // render console // ÄܼÖ⠷»´õ¸µ. _pGame->ConsoleRender(_pdpMain); // done with all _pdpMain->Unlock(); // clear upper and lower parts of screen if in wide screen mode /* if( _pdpMain==_pdpWideScreenMain && _pdpNormalMain->Lock()) { const PIX pixWidth = _pdpWideScreenMain->GetWidth(); const PIX pixHeight = (_pdpNormalMain->GetHeight() - _pdpWideScreenMain->GetHeight()) /2; const PIX pixJOfs = pixHeight + _pdpWideScreenMain->GetHeight()-1; _pdpNormalMain->Fill( 0, 0, pixWidth, pixHeight, C_BLACK|CT_OPAQUE); _pdpNormalMain->Fill( 0, pixJOfs, pixWidth, pixHeight, C_BLACK|CT_OPAQUE); _pdpNormalMain->Unlock(); } */ // show _pvpViewPortMain->SwapBuffers(); } } /* void TeleportPlayer(int iPosition) { CTString strCommand; strCommand.PrintF( "cht_iGoToMarker = %d;", iPosition); _pShell->Execute(strCommand); } */ CTextureObject _toStarField; static FLOAT _fLastVolume = 1.0f; void RenderStarfield(CDrawPort *pdp, FLOAT fStrength) { CTextureData *ptd = (CTextureData *)_toStarField.GetData(); // skip if no texture if(ptd==NULL) return; PIX pixSizeI = pdp->GetWidth(); PIX pixSizeJ = pdp->GetHeight(); FLOAT fStretch = pixSizeJ / 480.0f; fStretch *= FLOAT(ptd->GetPixWidth()) / ptd->GetWidth(); PIXaabbox2D boxScreen(PIX2D(0,0), PIX2D(pixSizeI, pixSizeJ)); MEXaabbox2D boxTexture(MEX2D(0, 0), MEX2D(pixSizeI/fStretch, pixSizeJ/fStretch)); pdp->PutTexture(&_toStarField, boxScreen, boxTexture, LerpColor(C_BLACK, C_WHITE, fStrength)|CT_OPAQUE); } FLOAT RenderQuitScreen(CDrawPort *pdp, CViewPort *pvp) { CDrawPort dpQuit(pdp, 0); CDrawPort dpWide; dpQuit.MakeWideScreen(&dpWide); // redraw the view if (!dpWide.Lock()) { return 0; } dpWide.Fill(C_BLACK|CT_OPAQUE); RenderStarfield(&dpWide, _fLastVolume); // FLOAT fVolume = Credits_Render(&dpWide); // _fLastVolume = fVolume; _fLastVolume = 1.0f; dpWide.Unlock(); pvp->SwapBuffers(); return _fLastVolume; } // þ·ÃƒÂ¡½ÃƒÆ’ Credit º¸¿©ÃÂÖ´Â ºÎºÃÂ. void QuitScreenLoop(void) { // Credits_On(3); CSoundObject soMusic; try { _toStarField.SetData_t(CTFILENAME("Textures\\Background\\Night01\\Stars01.tex")); //0603 kwon ȏæ. // soMusic.Play_t(CTFILENAME("Music\\Credits.mp3"), SOF_NONGAME|SOF_MUSIC|SOF_LOOP); } catch (char *strError) { CPrintF("%s\n", strError); } // while it is still running FOREVER { FLOAT fVolume = RenderQuitScreen(_pdpMain, _pvpViewPortMain); if (fVolume<=0) { return; } // assure we can listen to non-3d sounds soMusic.SetVolume(fVolume, fVolume); _pSound->UpdateSounds(); // while there are any messages in the message queue MSG msg; while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { // if it is not a keyboard or mouse message if(msg.message==WM_LBUTTONDOWN|| msg.message==WM_RBUTTONDOWN|| msg.message==WM_KEYDOWN) { return; } } //Sleep(5); } } // reverses string void StrRev( char *str) { char ctmp; char *pch0 = str; char *pch1 = str+strlen(str)-1; while( pch1>pch0) { ctmp = *pch0; *pch0 = *pch1; *pch1 = ctmp; pch0++; pch1--; } } void GetLCModulePathName(char* Path) { char strTmpPath[MAX_PATH] = ""; GetModuleFileName(NULL, strTmpPath, MAX_PATH); StrRev(strTmpPath); char *pstr = strchr( strTmpPath, '\\'); if( strnicmp( pstr, "\\gubed", 6)==0) pstr += 6; if( pstr[0] = '\\') pstr++; char *pstrFin = strchr( pstr, '\\'); if( pstrFin==NULL) { strcpy( pstr, "\\"); pstrFin = pstr; } StrRev(pstrFin); strncpy(strTmpPath, pstrFin, MAX_PATH-1); strcpy(Path, strTmpPath); } int SubMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { (void)hPrevInstance; #ifdef USE_NEW_LAUNCHER CTString strparam = CTString(lpCmdLine); IPCEventInfo EventInfo; memset(EventInfo.ulParameter2, 0, sizeof(EventInfo.ulParameter2)); ////////////////////////////////////////////////////////////////////////// // char strPathName[MAX_PATH] = ""; GetLCModulePathName(strPathName); CTFileName fnmBatch(strPathName); fnmBatch = fnmBatch + "LAUNCHER.BAT"; FILE* fp = NULL; BOOL bExistNewLauncher = FALSE; int nLoopCount = 0; // launcher patch process change. [8/27/2010 rumist] if ((fp = fopen(fnmBatch, "rb")) != NULL) { fclose(fp); // MessageBox(NULL, "Update is completed.\nPlease, restart game.", "Update completed", MB_OK); // ShellExecute(NULL, "open", fnmBatch, NULL, strPathName, SW_HIDE); // return TRUE; bExistNewLauncher = TRUE; } if (!strparam.IsEqualCaseSensitive(CTString("4022"))) { // IPC ////////////////////////////////////////////////////////////////////////// XExtIPCManager<IPCEventInfo> IPCMgr; int Ret = IPCMgr.XExtIPCEventCreate(1, FALSE); if (Ret < 0) { MessageBox(NULL, "This program could not be run itself", "LastChaos", MB_OK); IPCMgr.XExtIPCEventRelease(FALSE); return TRUE; } do { EventInfo.EventID = 0; Ret = IPCMgr.XExtIPCEventQueryIPCEvent(&EventInfo, NULL); ++nLoopCount; if (Ret > 0) { IPCEventInfo SendEventInfo; if (bExistNewLauncher) { SendEventInfo.EventID = -1; SendEventInfo.DestProcessID = 0; SendEventInfo.ulParameter1 = 0; memset(SendEventInfo.ulParameter2, 0, sizeof(SendEventInfo.ulParameter2)); IPCMgr.XExtIPCEventPost(&SendEventInfo); IPCMgr.XExtIPCEventRelease(FALSE); MessageBox(NULL, "Update is completed.\nPlease, restart game.", "Update completed", MB_OK); ShellExecute(NULL, "open", fnmBatch, NULL, strPathName, SW_HIDE); return TRUE; } else if (EventInfo.EventID != 100) { SendEventInfo.EventID = -1; SendEventInfo.DestProcessID = 0; SendEventInfo.ulParameter1 = 0; memset(SendEventInfo.ulParameter2, 0, sizeof(SendEventInfo.ulParameter2)); IPCMgr.XExtIPCEventPost(&SendEventInfo); MessageBox(NULL, "This program could not be run itself", "LastChaos", MB_OK); IPCMgr.XExtIPCEventRelease(FALSE); return TRUE; } if (SE_GetEngineDllRefCnt() > 1 || IsRunning() )// ¸ÖƼ Ŭ¶ÃƒÂ³Ãƒâ‚¬ÃƒÅ’¾ÃƒÂ°Ãƒâ€ ® ¸·Ã‚±Ã¢. [2/4/2010 rumist] { SendEventInfo.EventID = -1; SendEventInfo.DestProcessID = 0; SendEventInfo.ulParameter1 = 0; memset(SendEventInfo.ulParameter2, 0, sizeof(SendEventInfo.ulParameter2)); IPCMgr.XExtIPCEventPost(&SendEventInfo); MessageBox(NULL, "Already Executive Game.", "LastChaos", MB_OK); IPCMgr.XExtIPCEventRelease(FALSE); return TRUE; } else { SendEventInfo.EventID = 100; SendEventInfo.DestProcessID = 0; SendEventInfo.ulParameter1 = 0; memset(SendEventInfo.ulParameter2, 0, sizeof(SendEventInfo.ulParameter2)); IPCMgr.XExtIPCEventPost(&SendEventInfo); IPCMgr.XExtIPCEventRelease(FALSE); //MessageBox(NULL, "Send Event message", "LastChaos", MB_OK); } break; } } while( nLoopCount != 1000 ); } GetNM(EventInfo.ulParameter2); #else if (strlen(lpCmdLine) <= 0) { if( g_iCountry == RUSSIA ) { MessageBox(NULL, "ÊëèåÃÂò èãðû ÃÂÃ¥ ìîæå?áûòü çàïóùå?ñàìîñò?òåëüÃÂî.", "LastChaos", MB_OK); } else { MessageBox(NULL, "This program could not be run itself", "LastChaos", MB_OK); } return TRUE; } GetNM(lpCmdLine); #endif ShowCursor(FALSE); if( !Init( hInstance, nCmdShow, lpCmdLine )) return FALSE; BOOL bInit = TRUE; // WSS_NPROTECT 070402 ------------------------------->> #ifndef NO_GAMEGUARD // CPrintF("[ ---->> GameGuard Init...Start <<---- ] - %lu\n",timeGetTime()); //bInit = _pNetwork->Init_nProtect(); //_pGameState->Running() = bInit; //WinMain ÃÖ»ó´Ü¿¡ ³Ãƒâ€“¾ÃƒÂºÃƒâ‚¬Ã‚¸³Ã‚ª string ó¸® ºÎºÃÂÀÌ uimanager¿¡ À־î¼Ã‚ uimanagerÀ» »ý¼Ã‚º ÈÄ Ã³Ã‚¸Â®Ã‡Ã˜¾ÃƒÅ¸ µÈ´Ù. CREATE_GAMEGUARD_WRAPPER(); bInit = GAME_GUARD()->Init(); // CPrintF("[ ---->> GameGuard Init...End <<---- ] - %lu\n",timeGetTime()); #endif // ---------------------------------------------------<< // initialy, application is running and active, console and menu are off //_bRunning = TRUE; //_bQuitScreen = TRUE; if(g_szExitError == NULL && bInit) { _pGameState->Running() = TRUE; _pGameState->QuitScreen() = TRUE; } _pGame->gm_csConsoleState = CS_OFF; //_pGame->gm_csComputerState = CS_OFF; // _pGameState->m_bMenuActive = FALSE; //_pGameState->m_bMenuRendering = FALSE; // while it is still running #if _DEBUG // enableFPExceptions(); #endif //_pGame->QuickTest(LOGIN_WORLD, pdp, pvpViewPort); //#define AUTO_LOGIN #ifndef AUTO_LOGIN if(_pGameState->Running()) { _pGame->LoginGame(LOGIN_WORLD); } #else if(_pGameState->Running()) { g_slZone = 0; _pGame->LoginGame(START_WORLD); } #endif ShowCursor(TRUE); // À̱âȯ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ (11. 15) : IME »óÅ â æ°Å SendMessage ( _hwndMain, WM_IME_NOTIFY, IMN_CLOSESTATUSWINDOW, NULL ); // À̱âȯ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ½ÃƒÆ’ÀÛ //(5th Closed beta)(0.2) FLOAT tmPrev = 0; FLOAT tmNow = 0; INDEX cntFrame = 0; FLOAT tmLastSndMute = 0; //¾ÃƒË†Ãƒâ€¦Ãƒâ€šÃƒË†Ãƒâ€ ¼ÃƒÂ¶ÃƒÂ¤ ³Ã‚¡ //(5th Closed beta)(0.2) // WSS_NPROTECT 070402 ------------------------------->> // À©µµ¿ì ÇÚµé »ý¼Ã‚º ÀÌÈÄ ¸ðµç ±×·Ã‚¡Ã‡Ãˆ UI°ü·ÃƒÆ’ ÃʱâȰ¡ ³Ã‚¡³Ã‚ ÃˆÃ„ SetHwnd() È£Ãâ // ÀÌ ÇÃ‼ö·ÃƒÅ½ ºÎÅàCallBack ÇÃ‼ö°¡ È£Ãà- CyberClaus - 10-24-2012 I fotgot, just a small tip, for all who knows about c++, this is the start for fixing the wasd movement and a few more things... Enjoy - someone - 10-24-2012 I think here you're wrong the info to WASD is located in Engine.dll not Nksp(Nksp only creates a window, checks for previous instances and starts Engine.dll). - CyberClaus - 10-24-2012 I think here you're wrong the info to WASD is located in Engine.dll not Nksp(Nksp only creates a window, checks for previous instances and starts Engine.dll). You are correct Someone, i guess i didnt explain me correctly... i wanted to say that it gives a clue to where to go... sorry about that all - CyberClaus - 10-24-2012 Well i guess its better to post this code to try to explain me better. The next code is part of the engine.dll // numbers row #define KID_1 0x11 #define KID_2 0x12 #define KID_3 0x13 #define KID_4 0x14 #define KID_5 0x15 #define KID_6 0x16 #define KID_7 0x17 #define KID_8 0x18 #define KID_9 0x19 #define KID_0 0x1A #define KID_MINUS 0x1B #define KID_EQUALS 0x1C // 1st alpha row #define KID_Q 0x20 #define KID_W 0x21 #define KID_E 0x22 #define KID_R 0x23 #define KID_T 0x24 #define KID_Y 0x25 #define KID_U 0x26 #define KID_I 0x27 #define KID_O 0x28 #define KID_P 0x29 #define KID_LBRACKET 0x2A #define KID_RBRACKET 0x2B #define KID_BACKSLASH 0x2C // 2nd alpha row #define KID_A 0x30 #define KID_S 0x31 #define KID_D 0x32 #define KID_F 0x33 #define KID_G 0x34 #define KID_H 0x35 #define KID_J 0x36 #define KID_K 0x37 #define KID_L 0x38 #define KID_SEMICOLON 0x39 #define KID_APOSTROPHE 0x3A // 3rd alpha row #define KID_Z 0x40 #define KID_X 0x41 #define KID_C 0x42 #define KID_V 0x43 #define KID_B 0x44 #define KID_N 0x45 #define KID_M 0x46 #define KID_COMMA 0x47 #define KID_PERIOD 0x48 #define KID_SLASH 0x49 // row with F-keys #define KID_F1 0x51 #define KID_F2 0x52 #define KID_F3 0x53 #define KID_F4 0x54 #define KID_F5 0x55 #define KID_F6 0x56 #define KID_F7 0x57 #define KID_F8 0x58 #define KID_F9 0x59 #define KID_F10 0x5A #define KID_F11 0x5B #define KID_F12 0x5C // extra keys #define KID_ESCAPE 0x60 #define KID_TILDE 0x61 #define KID_BACKSPACE 0x62 #define KID_TAB 0x63 #define KID_CAPSLOCK 0x64 #define KID_ENTER 0x65 #define KID_SPACE 0x66 // modifier keys #define KID_LSHIFT 0x70 #define KID_RSHIFT 0x71 #define KID_LCONTROL 0x72 #define KID_RCONTROL 0x73 #define KID_LALT 0x74 #define KID_RALT 0x75 // navigation keys #define KID_ARROWUP 0x80 #define KID_ARROWDOWN 0x81 #define KID_ARROWLEFT 0x82 #define KID_ARROWRIGHT 0x83 #define KID_INSERT 0x84 #define KID_DELETE 0x85 #define KID_HOME 0x86 #define KID_END 0x87 #define KID_PAGEUP 0x88 #define KID_PAGEDOWN 0x89 #define KID_PRINTSCR 0x8A #define KID_SCROLLLOCK 0x8B #define KID_PAUSE 0x8C // numpad numbers #define KID_NUM0 0x90 #define KID_NUM1 0x91 #define KID_NUM2 0x92 #define KID_NUM3 0x93 #define KID_NUM4 0x94 #define KID_NUM5 0x95 #define KID_NUM6 0x96 #define KID_NUM7 0x97 #define KID_NUM8 0x98 #define KID_NUM9 0x99 #define KID_NUMDECIMAL 0x9A // numpad gray keys #define KID_NUMLOCK 0xA0 #define KID_NUMSLASH 0xA1 #define KID_NUMMULTIPLY 0xA2 #define KID_NUMMINUS 0xA3 #define KID_NUMPLUS 0xA4 #define KID_NUMENTER 0xA5 // mouse buttons #define KID_MOUSE1 0xC0 #define KID_MOUSE2 0xC1 #define KID_MOUSE3 0xC2 #define KID_MOUSE4 0xC3 #define KID_MOUSE5 0xC4 #define KID_MOUSEWHEELUP 0xC5 #define KID_MOUSEWHEELDOWN 0xC6 - XxMachaxX - 10-24-2012 Nice work, thank you ^^ - Douglas Farias - 10-24-2012 =) very nice i go edit *-* - Twostars - 10-24-2012 2 - CyberClaus - 10-27-2012 someone can help me? i need to open moonstone.lod and edit it... - HateMe - 10-27-2012 CyberClaus u got skype? if yes plz add me loser883 |