# HG changeset patch # User Ritor1 # Date 1406184254 -21600 # Node ID b10125a9c772a48fda8e8f126745363915f66ef4 # Parent 702cc7e6eefd727245099899c427eaa2aaa94614 fix crash in keyboard option diff -r 702cc7e6eefd -r b10125a9c772 GUIWindow.cpp --- a/GUIWindow.cpp Thu Jul 24 01:39:07 2014 +0200 +++ b/GUIWindow.cpp Thu Jul 24 12:44:14 2014 +0600 @@ -112,18 +112,17 @@ //----- (0041B4E1) -------------------------------------------------------- int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall) { - unsigned __int8 v3; // bl@1 int result; // eax@1 int i; // edx@2 GUIButton *j; // ecx@3 int k; // edx@7 GUIButton *l; // ecx@8 unsigned __int8 v9; // [sp+4h] [bp-8h]@1 - char v10; // [sp+8h] [bp-4h]@1 + char old_hot_key; // [sp+8h] [bp-4h]@1 - v3 = uNewHotkey; - v10 = toupper(uOldHotkey); - result = toupper(v3); + //v3 = uNewHotkey; + old_hot_key = toupper(uOldHotkey); + result = toupper(uNewHotkey); v9 = result; if ( bFirstCall ) { @@ -139,8 +138,8 @@ result = 84 * pVisibleWindowsIdxs[k]; for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1].pControlsHead; l; l = l->pNext ) { - LOBYTE(result) = v10; - if ( l->uHotkey == v10 ) + LOBYTE(result) = old_hot_key; + if ( l->uHotkey == old_hot_key ) { if ( !l->field_28 ) { @@ -157,28 +156,24 @@ //----- (0041B438) -------------------------------------------------------- GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey) { - char v1; // al@1 - int v2; // esi@1 - char v3; // dl@1 - GUIWindow *v4; // ecx@2 + char Hot_key_num; // al@1 + GUIWindow *current_window; // ecx@2 GUIButton *result; // eax@2 - //int v6; // edx@12 - v1 = toupper(uHotkey); - v2 = uNumVisibleWindows; - v3 = v1; - for( v2 = uNumVisibleWindows; v2 >= 0 && pVisibleWindowsIdxs[v2] > 0; v2-- ) + Hot_key_num = toupper(uHotkey); + for( int i = uNumVisibleWindows; i >= 0 && pVisibleWindowsIdxs[i] > 0; i-- ) { - v4 = &pWindowList[pVisibleWindowsIdxs[v2] - 1]; - for ( result = v4->pControlsHead; result; result = result->pNext ) + current_window = &pWindowList[pVisibleWindowsIdxs[i] - 1]; + for ( result = current_window->pControlsHead; result; result = result->pNext ) { - if ( result->uHotkey == v3 ) + if ( result->uHotkey == Hot_key_num ) { pMessageQueue_50CBD0->AddGUIMessage(result->msg, result->msg_param, 0); return result; } } - if ( !v4->uFrameX && !v4->uFrameY && (v4->uFrameWidth == window->GetWidth() && v4->uFrameHeight == window->GetWidth()) ) + if ( !current_window->uFrameX && !current_window->uFrameY + && (current_window->uFrameWidth == window->GetWidth() && current_window->uFrameHeight == window->GetWidth()) ) break; } return 0; diff -r 702cc7e6eefd -r b10125a9c772 Game.cpp --- a/Game.cpp Thu Jul 24 01:39:07 2014 +0200 +++ b/Game.cpp Thu Jul 24 12:44:14 2014 +0600 @@ -1089,50 +1089,24 @@ //----- (004304E7) -------------------------------------------------------- void GameUI_MsgProc() { - //signed int v0; // edi@6 - //char *v1; // esi@6 unsigned int v2; // edx@7 Actor *pActor; // ecx@13 int v4; // ecx@18 - //NPCData *pNPCData0; // eax@18 - //int v6; // edx@20 - //int v7; // ecx@29 - //unsigned int v8; // edx@59 - //unsigned int v9; // ecx@60 unsigned int v10; // ecx@73 - //unsigned int v11; // eax@75 - unsigned __int8 v12; // sf@75 - unsigned __int8 v13; // of@75 int v14; // eax@98 - unsigned int v15; // eax@102 - unsigned __int8 v16; // al@104 - unsigned __int8 v17; // al@105 int v18; // eax@106 float v19; // ST64_4@121 -// unsigned int v20; // ecx@121 float v21; // ST64_4@126 float v22; // ST64_4@127 -// unsigned int v23; // ecx@135 unsigned int v24; // ecx@149 -// unsigned int v25; // ecx@165 -// GUIWindow *pWindow; // eax@204 -// unsigned int v27; // edx@204 -// unsigned int v28; // ecx@204 GUIWindow *pWindow2; // ecx@248 - //int v30; // edx@258 - //const char *v31; // ecx@262 - signed int v32; // eax@269 + bool pKeyBindingFlag; // eax@269 unsigned int v33; // eax@277 - unsigned __int8 v34; // al@279 - unsigned __int8 v35; // al@280 - //GUIWindow *pWindow3; // ecx@332 int v37; // eax@341 int v38; // eax@358 SHORT v39; // ax@365 - //signed int v40; // eax@365 char *v41; // eax@380 int v42; // eax@396 -// POINT *pPoint; // eax@397 signed int v44; // eax@398 int v45; // edx@398 signed int v46; // ecx@398 @@ -1141,7 +1115,6 @@ BLVFace *pBLVFace; // ecx@410 ODMFace *pODMFace; // ecx@412 CastSpellInfo *pSpellInfo; // ecx@415 -// void *v52; // eax@424 __int16 v53; // ax@431 int v54; // eax@432 int v55; // ecx@432 @@ -1150,8 +1123,6 @@ Player *pPlayer; // edx@442 unsigned int pMapNum; // eax@445 signed int v60; // ST64_4@459 - //NPCData *pNPCData2; // eax@467 - //unsigned __int64 v62; // kr00_8@467 __int16 v63; // dx@479 unsigned int v64; // eax@486 int v65; // ecx@486 @@ -1168,30 +1139,21 @@ int v76; // esi@535 int v77; // eax@537 Player *pPlayer2; // ecx@549 - //int v79; // ecx@550 - //unsigned int v80; // edx@550 signed int v81; // eax@552 -// POINT *pPoint2; // eax@553 signed int v83; // ecx@554 signed int v84; // ecx@554 GUIButton *pButton; // eax@578 unsigned int v86; // eax@583 const char *v87; // ecx@595 const char *v88; // ecx@596 - //unsigned int v89; // eax@598 unsigned int v90; // eax@602 int v91; // edx@605 int v92; // eax@605 int v93; // edx@605 int pPlayerNum; // edx@611 int v95; // eax@611 - //const char *v96; // ecx@621 unsigned int v97; // eax@624 int v98; // eax@636 -// unsigned __int8 v99; // al@643 -// Player *pPlayer3; // eax@648 -// int v101; // ecx@648 -// int v102; // edx@652 int v103; // eax@671 Player *pPlayer4; // ecx@718 int v105; // eax@718 @@ -1200,71 +1162,20 @@ unsigned int v108; // eax@758 unsigned int v115; // eax@764 int v116; // eax@776 -// POINT *pPoint3; // eax@777 unsigned int v118; // eax@785 unsigned int v119; // ecx@786 -// unsigned int v120; // [sp-28h] [bp-624h]@86 unsigned int v121; // [sp-28h] [bp-624h]@711 -// unsigned int v122; // [sp-24h] [bp-620h]@86 unsigned int v123; // [sp-24h] [bp-620h]@711 -// unsigned int v124; // [sp-20h] [bp-61Ch]@86 unsigned int v125; // [sp-20h] [bp-61Ch]@711 -// unsigned int v126; // [sp-1Ch] [bp-618h]@86 int v127; // [sp-1Ch] [bp-618h]@107 unsigned int v128; // [sp-1Ch] [bp-618h]@711 -// int v129; // [sp-18h] [bp-614h]@86 - //signed int v130; // [sp-18h] [bp-614h]@107 -// int v131; // [sp-14h] [bp-610h]@86 - //unsigned int v132; // [sp-14h] [bp-610h]@107 - //unsigned int v133; // [sp-10h] [bp-60Ch]@60 -// unsigned int v134; // [sp-10h] [bp-60Ch]@86 - //signed int v135; // [sp-10h] [bp-60Ch]@107 -// unsigned int v136; // [sp-10h] [bp-60Ch]@121 - //unsigned int v137; // [sp-Ch] [bp-608h]@60 -// unsigned int v138; // [sp-Ch] [bp-608h]@86 - //signed int v139; // [sp-Ch] [bp-608h]@107 -// unsigned int v140; // [sp-Ch] [bp-608h]@121 -// enum WindowType pWindowType; // [sp-8h] [bp-604h]@56 - //enum WindowType pWindowType1; // [sp-8h] [bp-604h]@60 -// unsigned __int8 v143; // [sp-8h] [bp-604h]@86 - //int v144; // [sp-8h] [bp-604h]@107 -// enum WindowType pWindowType2; // [sp-8h] [bp-604h]@121 - //const char *v146; // [sp-8h] [bp-604h]@449 - //unsigned int v147; // [sp-8h] [bp-604h]@550 - //int v148; // [sp-4h] [bp-600h]@56 GUIButton *pButton2; // [sp-4h] [bp-600h]@59 -// const char *v150; // [sp-4h] [bp-600h]@86 - //unsigned int v151; // [sp-4h] [bp-600h]@107 -// int v152; // [sp-4h] [bp-600h]@121 -// int v153; // [sp-4h] [bp-600h]@135 - //int v154; // [sp-4h] [bp-600h]@149 -// int v155; // [sp-4h] [bp-600h]@165 -// int v156; // [sp-4h] [bp-600h]@204 - //const char *v157; // [sp-4h] [bp-600h]@444 - //unsigned int v158; // [sp-4h] [bp-600h]@449 - //__int16 v159; // [sp-4h] [bp-600h]@550 -// int v160; // [sp-4h] [bp-600h]@599 const char *v161; // [sp-4h] [bp-600h]@637 - //int v162; // [sp+0h] [bp-5FCh]@56 - //int v163; // [sp+0h] [bp-5FCh]@59 -// Texture *pTexture; // [sp+0h] [bp-5FCh]@86 - //int v165; // [sp+0h] [bp-5FCh]@107 -// int v166; // [sp+0h] [bp-5FCh]@121 -// int v167; // [sp+0h] [bp-5FCh]@135 - //int v168; // [sp+0h] [bp-5FCh]@149 -// int v169; // [sp+0h] [bp-5FCh]@165 -// int v170; // [sp+0h] [bp-5FCh]@204 - //signed int v171; // [sp+0h] [bp-5FCh]@259 KeyToggleType pKeyToggleType; // [sp+0h] [bp-5FCh]@287 char *v173; // [sp+0h] [bp-5FCh]@444 char *v174; // [sp+0h] [bp-5FCh]@449 - //int v175; // [sp+0h] [bp-5FCh]@550 -// int v176; // [sp+0h] [bp-5FCh]@599 const char *v177; // [sp+0h] [bp-5FCh]@629 char *v178; // [sp+0h] [bp-5FCh]@637 -// int v179; // [sp+4h] [bp-5F8h]@0 - //signed int _this; // [sp+14h] [bp-5E8h]@22 -// signed int thisa; // [sp+14h] [bp-5E8h]@251 signed int thisb; // [sp+14h] [bp-5E8h]@272 Player *pPlayer7; // [sp+14h] [bp-5E8h]@373 Player *pPlayer8; // [sp+14h] [bp-5E8h]@377 @@ -1275,7 +1186,6 @@ signed int thisi; // [sp+14h] [bp-5E8h]@535 MapInfo *pMapInfo; // [sp+14h] [bp-5E8h]@604 Player *pPlayer10; // [sp+14h] [bp-5E8h]@641 -// int thisl; // [sp+14h] [bp-5E8h]@648 int uMessageParam; // [sp+18h] [bp-5E4h]@7 int uAction; // [sp+1Ch] [bp-5E0h]@18 NPCData *pNPCData4; // [sp+20h] [bp-5DCh]@23 @@ -1284,18 +1194,11 @@ enum UIMessageType uMessage; // [sp+2Ch] [bp-5D0h]@7 unsigned int v199; // [sp+30h] [bp-5CCh]@7 char *v200; // [sp+34h] [bp-5C8h]@518 -// POINT v201; // [sp+38h] [bp-5C4h]@553 POINT v202; // [sp+40h] [bp-5BCh]@141 POINT a2; // [sp+48h] [bp-5B4h]@127 -// POINT v204; // [sp+50h] [bp-5ACh]@777 POINT v205; // [sp+58h] [bp-5A4h]@171 -// POINT v206; // [sp+60h] [bp-59Ch]@553 POINT v207; // [sp+68h] [bp-594h]@155 -// POINT v208; // [sp+70h] [bp-58Ch]@397 -// POINT v209; // [sp+78h] [bp-584h]@777 -// POINT v210; // [sp+80h] [bp-57Ch]@397 POINT v211; // [sp+88h] [bp-574h]@704 - //__int64 v212; // [sp+90h] [bp-56Ch]@467 int v213; // [sp+98h] [bp-564h]@385 char pLevelName[32]; // [sp+9Ch] [bp-560h]@380 char pOut[32]; // [sp+BCh] [bp-540h]@370 @@ -1305,7 +1208,6 @@ char a1[64]; // [sp+1F8h] [bp-404h]@467 char Str2[128]; // [sp+238h] [bp-3C4h]@527 Actor actor; // [sp+2B8h] [bp-344h]@4 - //unsigned short* screenshot; int currHour; dword_50CDC8 = 0; @@ -1438,7 +1340,7 @@ } else { - ShowStatusBarString(pGlobalTXT_LocalizationStrings[201], 2u);// "Are you sure? Click again to start a New Game" + ShowStatusBarString(pGlobalTXT_LocalizationStrings[201], 2);// "Are you sure? Click again to start a New Game" pAudioPlayer->PlaySound(SOUND_20001, 0, 0, -1, 0, 0, 0, 0); dword_6BE138 = 124; } @@ -1633,32 +1535,34 @@ uTextureID_Optkb[3] = pIcons_LOD->LoadTexture("optkb_1", TEXTURE_16BIT_PALETTE); uTextureID_Optkb[4] = pIcons_LOD->LoadTexture("optkb_2", TEXTURE_16BIT_PALETTE); pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_KeyMappingOptions, 0, 0); - pGUIWindow_CurrentMenu->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, 1, 0, UIMSG_Escape, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(19u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, UIMSG_SelectKeyPage1, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(127u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, UIMSG_SelectKeyPage2, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(127u, 0x144u, 0x6Cu, 0x14u, 1, 0, UIMSG_ResetKeyMapping, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(19u, 0x144u, 0x6Cu, 0x14u, 1, 0, UIMSG_Game_OpenOptionsDialog, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 0x94u, 0x46u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 0, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 0xA7u, 0x46u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 1u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 0xBAu, 0x46u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 2u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 0xCDu, 0x46u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 3u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 224u, 70u, 19u, 1, 0, UIMSG_ChangeKeyButton, 4u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 243u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 5u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(129u, 262u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 6u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 148u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 7u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 167u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 8u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 186u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 9u, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 205u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 0xAu, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 224u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 0xBu, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 243u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 0xCu, 0, "", 0); - pGUIWindow_CurrentMenu->CreateButton(350u, 262u, 70u, 0x13u, 1, 0, UIMSG_ChangeKeyButton, 0xDu, 0, "", 0); + + pGUIWindow_CurrentMenu->CreateButton(241, 302, 214, 40, 1, 0, UIMSG_Escape, 0, 0, "", 0); + + pGUIWindow_CurrentMenu->CreateButton(19, 302, 108, 20, 1, 0, UIMSG_SelectKeyPage1, 0, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(127, 302, 108, 20, 1, 0, UIMSG_SelectKeyPage2, 0, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(127, 324, 108, 20, 1, 0, UIMSG_ResetKeyMapping, 0, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(19, 324, 108, 20, 1, 0, UIMSG_Game_OpenOptionsDialog, 0, 0, "", 0); + + pGUIWindow_CurrentMenu->CreateButton(129, 148, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 0, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 167, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 1, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 186, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 2, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 205, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 3, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 224, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 4, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 243, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 5, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(129, 262, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 6, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 148, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 7, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 167, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 8, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 186, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 9, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 205, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 10, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 224, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 11, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 243, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 12, 0, "", 0); + pGUIWindow_CurrentMenu->CreateButton(350, 262, 70, 19, 1, 0, UIMSG_ChangeKeyButton, 13, 0, "", 0); + uGameMenuUI_CurentlySelectedKeyIdx = -1; KeyboardPageNum = 1; memset(GameMenuUI_InvaligKeyBindingsFlags.data(), 0, sizeof(GameMenuUI_InvaligKeyBindingsFlags)); //*(_WORD *)KeyButtonArray[28] = 0; memcpy(pPrevVirtualCidesMapping.data(), pKeyActionMap->pVirtualKeyCodesMapping, 0x78u); - //v1 = ""; - //v0 = 1; continue; case UIMSG_ChangeKeyButton: if ( uGameMenuUI_CurentlySelectedKeyIdx != -1 ) @@ -1675,31 +1579,21 @@ case UIMSG_ResetKeyMapping: v197 = 1; pKeyActionMap->SetDefaultMapping(); - uAction = 0; - do + for ( uint i = 0; i < 28; i++ ) { - v15 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - if ( v15 != pPrevVirtualCidesMapping[uAction] ) + if ( pKeyActionMap->GetActionVKey((enum InputAction)i) != pPrevVirtualCidesMapping[i] ) { if ( v197 ) { - v16 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[uAction]), v16, 1); + GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[i]), pKeyActionMap->GetActionVKey((enum InputAction)i), 1); v197 = 0; } else - { - v17 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[uAction]), v17, 0); - } + GUI_ReplaceHotkey(LOBYTE(pPrevVirtualCidesMapping[i]), pKeyActionMap->GetActionVKey((enum InputAction)i), 0); } - pPrevVirtualCidesMapping[uAction] = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - v18 = uAction++; - v13 = uAction > 28; - v12 = uAction - 28 < 0; - GameMenuUI_InvaligKeyBindingsFlags[v18] = 0; + pPrevVirtualCidesMapping[i] = pKeyActionMap->GetActionVKey((enum InputAction)i); + GameMenuUI_InvaligKeyBindingsFlags[i] = false; } - while ( v12 ^ v13 ); pAudioPlayer->PlaySound((SoundID)219, 0, 0, -1, 0, 0, 0, 0); continue; case UIMSG_SelectKeyPage1: @@ -2221,52 +2115,44 @@ case SCREEN_KEYBOARD_OPTIONS://Return to game v197 = 1; - v32 = 0; - while ( !GameMenuUI_InvaligKeyBindingsFlags[v32]) + pKeyBindingFlag = false; + for ( uint i = 0; i < 28; ++i ) + { + if ( GameMenuUI_InvaligKeyBindingsFlags[i] ) + pKeyBindingFlag = true; + } + if ( !pKeyBindingFlag ) { - ++v32; - if ( v32 >= 28 ) + for ( uint i = 0; i < 5; i++ ) { - thisb = (signed int)&uTextureID_Optkb; - assert(false && "Invalid condition values"); - do + if ( uTextureID_Optkb[i] ) + pIcons_LOD->pTextures[uTextureID_Optkb[i]].Release(); + } + memset(&uTextureID_Optkb, 0, 20); + pIcons_LOD->SyncLoadedFilesCount(); + for ( uint i = 0; i < 28; ++i ) + { + if ( pKeyActionMap->GetActionVKey((enum InputAction)i) != pPrevVirtualCidesMapping[i] ) { - if ( *(int *)thisb ) - pIcons_LOD->pTextures[*(int *)thisb].Release(); - thisb += 4; - } - while ( thisb < (signed int)0x00507C08 ); - - memset(&uTextureID_Optkb, 0, 0x14u); - pIcons_LOD->SyncLoadedFilesCount(); - for ( uAction = 0; uAction < 28; ++uAction ) - { - v33 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - if ( v33 != pPrevVirtualCidesMapping[uAction] ) + if ( v197 ) { - if ( v197 ) - { - v34 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - GUI_ReplaceHotkey(v34, LOBYTE(pPrevVirtualCidesMapping[uAction]), 1); - v197 = 0; - } - else - { - v35 = pKeyActionMap->GetActionVKey((enum InputAction)uAction); - GUI_ReplaceHotkey(v35, LOBYTE(pPrevVirtualCidesMapping[uAction]), 0); - } + GUI_ReplaceHotkey(pKeyActionMap->GetActionVKey((enum InputAction)i), LOBYTE(pPrevVirtualCidesMapping[i]), 1); + v197 = 0; } - if ( uAction && uAction != 2 && uAction != 3 && uAction != 1 && uAction != 25 && uAction != 26 ) - pKeyToggleType = TOGGLE_OneTimePress; else - pKeyToggleType = TOGGLE_Continuously; - pKeyActionMap->SetKeyMapping(uAction, pPrevVirtualCidesMapping[uAction], pKeyToggleType); + GUI_ReplaceHotkey(pKeyActionMap->GetActionVKey((enum InputAction)i), LOBYTE(pPrevVirtualCidesMapping[i]), 0); } - pKeyActionMap->StoreMappings(); - stru_506E40.Release(); - break; + if ( i > 3 && i != 25 && i != 26 ) + pKeyToggleType = TOGGLE_OneTimePress; + else + pKeyToggleType = TOGGLE_Continuously; + pKeyActionMap->SetKeyMapping(i, pPrevVirtualCidesMapping[i], pKeyToggleType); } + pKeyActionMap->StoreMappings(); + stru_506E40.Release(); + break; } + pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0); break; case SCREEN_REST://close rest screen if ( dword_506F14 ) diff -r 702cc7e6eefd -r b10125a9c772 Render.cpp --- a/Render.cpp Thu Jul 24 01:39:07 2014 +0200 +++ b/Render.cpp Thu Jul 24 12:44:14 2014 +0600 @@ -728,14 +728,9 @@ { size_t v4; // eax@1 size_t v5; // eax@1 - IUnknown *v6; // eax@10 size_t v7; // eax@13 DDDEVICEIDENTIFIER ddDevId; // [sp+4h] [bp-4F8h]@11 - DDSURFACEDESC2 v10;/*int v10; // [sp+42Ch] [bp-D0h]@16 - int v11; // [sp+430h] [bp-CCh]@16 - int v12; // [sp+434h] [bp-C8h]@16 - int v13; // [sp+438h] [bp-C4h]@16 - int v14; // [sp+474h] [bp-88h]@16*/ + DDSURFACEDESC2 v10;/*int v10; // [sp+42Ch] [bp-D0h]@16*/ DDSCAPS2 ddsCaps; // [sp+4A8h] [bp-54h]@14 unsigned int uFreeVideoMem; // [sp+4B8h] [bp-44h]@14 RenderD3D_aux aux; // [sp+4BCh] [bp-40h]@19 @@ -772,7 +767,7 @@ delete [] v20.pDriverName; delete [] v20.pDeviceDesc; delete v20.pGUID; - v6 = (IUnknown *)pDirectDraw; + pDirectDraw->Release(); } else { @@ -805,7 +800,7 @@ //free(v20.pDDraw4DevDesc); delete [] v20.pDDraw4DevDesc; delete v20.pGUID; - v6 = (IUnknown *)pDirectDraw4; + pDirectDraw4->Release(); } else { @@ -814,15 +809,13 @@ pDirect3D3->EnumDevices((LPD3DENUMDEVICESCALLBACK)D3DDeviceEnumerator, &aux); delete [] v20.pDriverName; delete [] v20.pDeviceDesc; - //free(v20.pDDraw4DevDesc); delete [] v20.pDDraw4DevDesc; delete v20.pGUID; pDirectDraw4->Release(); - v6 = (IUnknown *)pDirect3D3; pDirectDraw4 = 0; - } - } - v6->Release(); + pDirect3D3->Release(); + } + } } return 1; }