# HG changeset patch # User Ritor1 # Date 1351526057 -21600 # Node ID ecbd9b6ccf52c4fa50ddb531db2dd710a8d4c5e3 # Parent 6b46c3e15e21a805e212b95ec15c93b30aa32884# Parent b39bdc150e90ca64325a134d9a3a798f2dc040b6 Слияние diff -r 6b46c3e15e21 -r ecbd9b6ccf52 GUIWindow.cpp --- a/GUIWindow.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/GUIWindow.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -145,13 +145,9 @@ //----- (0041D3B7) -------------------------------------------------------- -char GUIWindow::_41D3B7() +char GUIWindow::DrawQuickCharRecord() { - GUIWindow *v1; // edi@1 Player *pPlayer; // esi@1 - int v3; // ecx@1 - SpellBuff *v4; // eax@1 - signed int v5; // ebx@1 int v6; // eax@5 int v7; // ebx@5 unsigned int v8; // ecx@5 @@ -163,76 +159,44 @@ unsigned int v14; // eax@12 PlayerFrame *v15; // eax@12 unsigned int v16; // eax@15 - signed int v17; // ST28_4@15 - int v18; // ST24_4@15 - signed int v19; // eax@15 unsigned int v20; // eax@15 - int v21; // ST28_4@15 - int v22; // ST24_4@15 - int v23; // eax@15 unsigned int v24; // eax@15 unsigned int v25; // eax@15 - char *v26; // ST28_4@15 - signed int v27; // eax@15 unsigned __int8 v28; // al@15 char *v29; // eax@16 - unsigned int v30; // esi@18 - SpellBuff *v31; // edx@18 - char *v32; // edi@18 - signed int v33; // ecx@19 - unsigned int v34; // eax@19 __int64 v35; // ST38_8@22 int v36; // esi@22 - const char *v37; // ST1C_4@22 unsigned int v38; // eax@22 char *v39; // eax@24 - SpellBuff *v41; // [sp+14h] [bp-14h]@1 - GUIFont *a2; // [sp+18h] [bp-10h]@1 - GUIWindow *a1; // [sp+1Ch] [bp-Ch]@1 signed int uFramesetID; // [sp+20h] [bp-8h]@9 int uFramesetIDa; // [sp+20h] [bp-8h]@18 - const char **v46; // [sp+24h] [bp-4h]@18 + + pPlayer = &pParty->pPlayers[(unsigned int)ptr_1C]; + + uint numActivePlayerBuffs = 0; + + for (uint i = 0; i < 24; ++i) + if (pPlayer->pPlayerBuffs[i].uExpireTime > 0) + ++numActivePlayerBuffs; - v1 = this; - a2 = pFontComic; - pPlayer = &pParty->pPlayers[(unsigned int)this->ptr_1C]; - a1 = this; - v3 = 0; - v4 = pPlayer->pPlayerBuffs; - v5 = 24; - v41 = pPlayer->pPlayerBuffs; - do - { - if ( (signed __int64)v4->uExpireTime > 0 ) - ++v3; - ++v4; - --v5; - } - while ( v5 ); - v6 = LOBYTE(pFontArrus->uFontHeight) + 162; - v1->uFrameHeight = v6; - v7 = (v3 - 1) * LOBYTE(pFontArrus->uFontHeight); - v8 = v1->uFrameX; + v6 = pFontArrus->uFontHeight + 162; + uFrameHeight = v6; + v7 = (numActivePlayerBuffs - 1) * pFontArrus->uFontHeight; + v8 = uFrameX; v9 = v6 + v7; - v10 = v1->uFrameWidth; - v1->uFrameHeight = v9; + v10 = uFrameWidth; + uFrameHeight = v9; v11 = v10 + v8 - 1; - v12 = v1->uFrameY; - v1->uFrameZ = v11; - v1->uFrameW = v9 + v12 - 1; - v1->DrawMessageBox(0); - if ( pPlayer->pConditions[16] ) - { + v12 = uFrameY; + uFrameZ = v11; + uFrameW = v9 + v12 - 1; + DrawMessageBox(0); + if (pPlayer->Eradicated()) v13 = pTexture_PlayerFaceEradicated; - } + else if (pPlayer->Dead()) + v13 = pTexture_PlayerFaceDead; else { - if ( pPlayer->pConditions[14] ) - { - v13 = pTexture_PlayerFaceDead; - } - else - { uFramesetID = pPlayerFrameTable->GetFrameIdBy_field0(pPlayer->uExpressionID); if ( !uFramesetID ) uFramesetID = 1; @@ -249,31 +213,26 @@ v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, v14); } pPlayer->field_1AA2 = v15->uTextureID - 1; - v13 = (Texture *)A74CEC_player_faces_minus1_indexing[v15->uTextureID + 56 * (unsigned int)v1->ptr_1C]; - } + v13 = pTextures_PlayerFaces[(unsigned int)ptr_1C][v15->uTextureID]; } - pRenderer->DrawTextureTransparent(v1->uFrameX + 24, v1->uFrameY + 24, v13); + + pRenderer->DrawTextureTransparent(uFrameX + 24, uFrameY + 24, v13); v16 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); - sprintf(pTmpBuf, "\xC" "00000\n", v16); + sprintf(pTmpBuf, "\xC%05d", v16); sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[429], pPlayer->pName, pClassNames[pPlayer->uClass]); strcat(pTmpBuf, pTmpBuf2); strcat(pTmpBuf, "\xC" "00000\n"); - v17 = pPlayer->GetMaxHealth(); - v18 = pPlayer->sHealth; - v19 = pPlayer->GetMaxHealth(); - v20 = sub_4178FE(pPlayer->sHealth, v19); - sprintf(pTmpBuf2, "%s : ", pGlobalTXT_LocalizationStrings[108], v20, v18, v17); + v20 = UI_GetHealthManaStringColor(pPlayer->sHealth, pPlayer->GetMaxHealth()); + sprintf(pTmpBuf2, "%s : \x0C" "%05u%d\x0C" "00000 / %d\n", pGlobalTXT_LocalizationStrings[108], + v20, pPlayer->sHealth, pPlayer->GetMaxHealth()); strcat(pTmpBuf, pTmpBuf2); - v21 = pPlayer->GetMaxMana(); - v22 = pPlayer->sMana; - v23 = pPlayer->GetMaxMana(); - v24 = sub_4178FE(pPlayer->sMana, v23); - sprintf(pTmpBuf2, "%s : ", pGlobalTXT_LocalizationStrings[212], v24, v22, v21); + v24 = UI_GetHealthManaStringColor(pPlayer->sMana, pPlayer->GetMaxMana()); + sprintf(pTmpBuf2, "%s : \x0C" "%05u%d\x0C" "00000 / %d\n", pGlobalTXT_LocalizationStrings[212], + v24, pPlayer->sMana, pPlayer->GetMaxMana()); strcat(pTmpBuf, pTmpBuf2); v25 = pPlayer->GetMajorConditionIdx(); - v26 = aCharacterConditionNames[v25]; - v27 = GetConditionDrawColor(v25); - sprintf(pTmpBuf2, "%s: ", pGlobalTXT_LocalizationStrings[47], v27, v26); + sprintf(pTmpBuf2, "%s: \x0C" "%05d%s\x0C" "00000\n", pGlobalTXT_LocalizationStrings[47], + GetConditionDrawColor(v25), aCharacterConditionNames[v25]); strcat(pTmpBuf, pTmpBuf2); v28 = pPlayer->uQuickSpell; if ( v28 ) @@ -282,41 +241,30 @@ v29 = pGlobalTXT_LocalizationStrings[153]; sprintf(pTmpBuf2, "%s: %s", pGlobalTXT_LocalizationStrings[172], v29); strcat(pTmpBuf, pTmpBuf2); - v30 = 0; - a1->DrawText(pFontArrus, 120, 22, 0, pTmpBuf, 0, 0, 0); - v31 = v41; + DrawText(pFontArrus, 120, 22, 0, pTmpBuf, 0, 0, 0); + uFramesetIDa = 0; - v32 = &_4E2AD8_ui_colors[1]; - v46 = (const char **)&aSpellNames[20]; - do + for (uint i = 0; i < 24; ++i) { - v33 = HIDWORD(v31->uExpireTime); - v34 = LODWORD(v31->uExpireTime); - if ( v33 >= (signed int)v30 && (v33 > (signed int)v30 || v34 > v30) ) + auto buff = pPlayer->pPlayerBuffs + i; + if (buff->uExpireTime > 0) { - v35 = __PAIR__(v33, v34) - pParty->uTimePlayed; - v36 = uFramesetIDa++ * LOBYTE(a2->uFontHeight) + 134; - v37 = *v46; + v35 = buff->uExpireTime - pParty->uTimePlayed; + v36 = uFramesetIDa++ * pFontComic->uFontHeight + 134; v38 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat( - (unsigned __int8)*(v32 - 1), - (unsigned __int8)*v32, - (unsigned __int8)v32[1]); - a1->DrawText(a2, 52, v36, v38, v37, 0, 0, 0); - sub_41D20D_buff_remaining_time_string(v36, a1, v35, a2); - v31 = v41; - v30 = 0; + _4E2AD8_ui_colors[i * 3], + _4E2AD8_ui_colors[i * 3 + 1], + _4E2AD8_ui_colors[i * 3 + 2]); + DrawText(pFontComic, 52, v36, v38, aSpellNames[20 + i], 0, 0, 0); + sub_41D20D_buff_remaining_time_string(v36, this, v35, pFontComic); } - ++v46; - ++v31; - v32 += 3; - v41 = v31; } - while ( (signed int)v46 < (signed int)&dword_506978 ); + v39 = ""; - if ( uFramesetIDa == v30 ) + if ( uFramesetIDa == 0 ) v39 = pGlobalTXT_LocalizationStrings[153]; sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[450], v39); - return a1->DrawText(pFontArrus, 14, 114, v30, pTmpBuf, v30, v30, v30); + return DrawText(pFontArrus, 14, 114, 0, pTmpBuf, 0, 0, 0); } //----- (0041D08F) -------------------------------------------------------- @@ -1148,8 +1096,8 @@ //----- (0041192C) -------------------------------------------------------- void __cdecl InitializeBookTextures() { - signed int v0; // ebp@3 - Texture **v1; // ebx@3 + //signed int v0; // ebp@3 + //Texture **v1; // ebx@3 pAudioPlayer->StopChannels(-1, -1); ++pIcons_LOD->uTexturePacksCount; @@ -1161,21 +1109,24 @@ pTexture_506448 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m5-u", TEXTURE_16BIT_PALETTE)]; ptr_506440 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m5-d", TEXTURE_16BIT_PALETTE)]; pTexture_50643C = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m6-u",TEXTURE_16BIT_PALETTE)]; - v0 = 1; - v1 = (Texture **)&pTextures_tabs[0][0].pName[4]; - pTexture_506444 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m6-d",TEXTURE_16BIT_PALETTE)]; - do + //v0 = 1; + + static const char *texNames[9] = { - *(&pTexture_pagemask + v0) = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture( - (const char *)pLloydsBeacons_SomeYs[v0 + 4], - TEXTURE_16BIT_PALETTE)]; - sprintf(pTmpBuf, "tab%da", v0); - *(v1 - 1) = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)]; - sprintf(pTmpBuf, "tab%db", v0++); - *v1 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)]; - v1 += 2; + "SBFB00", "SBAB00", "SBWB00", "SBEB00", + "SBSB00", "SBMB00", "SBBB00", "SBLB00", + }; + + pTexture_506444 = pIcons_LOD->LoadTexturePtr("ib-m6-d",TEXTURE_16BIT_PALETTE); + for (uint i = 0; i < 8; ++i) + { + pTextures_5064A0[i] = pIcons_LOD->LoadTexturePtr(texNames[i], TEXTURE_16BIT_PALETTE); + + sprintf(pTmpBuf, "tab%da", i); + pTextures_tabs[i][0] = pIcons_LOD->LoadTexturePtr(pTmpBuf, TEXTURE_16BIT_PALETTE); + sprintf(pTmpBuf, "tab%db", i); + pTextures_tabs[i][1] = pIcons_LOD->LoadTexturePtr(pTmpBuf, TEXTURE_16BIT_PALETTE); } - while ( (signed int)v1 <= (signed int)&unk_506494 ); } //----- (00411AAA) -------------------------------------------------------- @@ -1236,6 +1187,8 @@ int a2; // [sp+10h] [bp-8h]@1 int v7; // [sp+14h] [bp-4h]@1 + __debugbreak(); + v1 = pPlayers[uActiveCharacter]; v2 = this; LoadSpellbook(v1->pNumSpellBookPage); diff -r 6b46c3e15e21 -r ecbd9b6ccf52 GUIWindow.h --- a/GUIWindow.h Mon Oct 29 21:54:06 2012 +0600 +++ b/GUIWindow.h Mon Oct 29 21:54:17 2012 +0600 @@ -72,7 +72,7 @@ GUIButton *GetControl(unsigned int uID); void Release(); void _41D08F(int a2, int a3, int a4, int a5); - char _41D3B7(); + char DrawQuickCharRecord(); char _41D73D_draw_buff_tooltip(); static GUIWindow *Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eType, int a4, int a5); diff -r 6b46c3e15e21 -r ecbd9b6ccf52 Indoor.cpp --- a/Indoor.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/Indoor.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -502,8 +502,8 @@ static_vertices_F7C228[i].vWorldPosition.x = pIndoor->pVertices[pFace->pVertexIDs[i]].x; static_vertices_F7C228[i].vWorldPosition.y = pIndoor->pVertices[pFace->pVertexIDs[i]].y; static_vertices_F7C228[i].vWorldPosition.z = pIndoor->pVertices[pFace->pVertexIDs[i]].z; - static_vertices_F7C228[i].u = (signed)pFace->pVertexUIDs[i]; - static_vertices_F7C228[i].v = (signed)pFace->pVertexUIDs[i]; + static_vertices_F7C228[i].u = (signed short)pFace->pVertexUIDs[i]; + static_vertices_F7C228[i].v = (signed short)pFace->pVertexUIDs[i]; } if (!pVertices || @@ -2568,10 +2568,10 @@ pFace->pZInterceptDisplacements = ptr_2AC + j; j += pFace->uNumVertices + 1; - pFace->pVertexUIDs = ptr_2AC + j; + pFace->pVertexUIDs = (__int16 *)(ptr_2AC + j); j += pFace->uNumVertices + 1; - pFace->pVertexVIDs = ptr_2AC + j; + pFace->pVertexVIDs = (__int16 *)(ptr_2AC + j); j += pFace->uNumVertices + 1; /*v93 = &pFaces[v92]; @@ -3543,7 +3543,7 @@ int v44; // ecx@36 int v45; // edi@36 int v46; // ecx@36 - unsigned __int16 *v47; // edx@44 + __int16 *v47; // edx@44 int v48; // ecx@44 unsigned int v49; // ecx@46 unsigned __int16 v50; // ax@48 diff -r 6b46c3e15e21 -r ecbd9b6ccf52 Indoor.h --- a/Indoor.h Mon Oct 29 21:54:06 2012 +0600 +++ b/Indoor.h Mon Oct 29 21:54:17 2012 +0600 @@ -297,11 +297,11 @@ unsigned __int16 *pXInterceptDisplacements; unsigned __int16 *pYInterceptDisplacements; unsigned __int16 *pZInterceptDisplacements; - unsigned __int16 *pVertexUIDs; - unsigned __int16 *pVertexVIDs; - unsigned __int16 uFaceExtraID; - unsigned __int16 uBitmapID; - unsigned __int16 uSectorID; + signed __int16 *pVertexUIDs; + signed __int16 *pVertexVIDs; + unsigned __int16 uFaceExtraID; + unsigned __int16 uBitmapID; + unsigned __int16 uSectorID; __int16 uBackSectorID; struct BBox_short_ pBounding; PolygonType uPolygonType; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 Player.h --- a/Player.h Mon Oct 29 21:54:06 2012 +0600 +++ b/Player.h Mon Oct 29 21:54:17 2012 +0600 @@ -93,13 +93,16 @@ { PLAYER_CLASS_KNIGHT = 0x0, PLAYER_CLASS_THEIF = 0x4, + PLAYER_CLASS_BOUNTY_HUNTER = 0x7, PLAYER_CLASS_MONK = 0x8, PLAYER_CLASS_PALADIN = 0xC, PLAYER_CLASS_SHOOTER = 0x10, PLAYER_CLASS_RANGER = 0x14, PLAYER_CLASS_CLERIC = 0x18, + PLAYER_CLASS_PRIEST_OF_MOON = 0x1B, PLAYER_CLASS_DRUID = 0x1C, PLAYER_CLASS_SORCERER = 0x20, + PLAYER_CLASS_LICH = 0x23, }; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 Texture.cpp --- a/Texture.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/Texture.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -55,7 +55,7 @@ Texture *ptr_506440; Texture *pTexture_506444; Texture *pTexture_506448; // idb -Texture pTextures_tabs[8][2]; +Texture *pTextures_tabs[8][2]; Texture *pTexture_mapbordr; // idb Texture *pTexture_pagemask; // idb Texture *pTextures_5064A0[14]; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 Texture.h --- a/Texture.h Mon Oct 29 21:54:06 2012 +0600 +++ b/Texture.h Mon Oct 29 21:54:17 2012 +0600 @@ -157,7 +157,7 @@ extern Texture *ptr_506440; extern Texture *pTexture_506444; extern Texture *pTexture_506448; // idb -extern Texture pTextures_tabs[8][2]; +extern Texture *pTextures_tabs[8][2]; extern Texture *pTexture_mapbordr; // idb extern Texture *pTexture_pagemask; // idb extern Texture *pTextures_5064A0[14]; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_1.cpp --- a/mm7_1.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_1.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -1054,7 +1054,7 @@ v0); sprintf(pTmpBuf, "%d", pPlayer->sHealth); v8 = pPlayer->GetMaxHealth(); - v9 = sub_4178FE(pPlayer->sHealth, v8); + v9 = UI_GetHealthManaStringColor(pPlayer->sHealth, v8); pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf, 84, v0); v10 = v45 + v7; if ( v43 == v0 ) @@ -1068,7 +1068,7 @@ v0); sprintf(pTmpBuf, "%d", pPlayer->sMana); v11 = pPlayer->GetMaxMana(); - v12 = sub_4178FE(pPlayer->sMana, v11); + v12 = UI_GetHealthManaStringColor(pPlayer->sMana, v11); pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf, 84, v0); v13 = v45 + v10; if ( v43 == v0 ) @@ -1085,7 +1085,7 @@ v15 = v0; v16 = pPlayer->GetBaseAC(); v17 = pPlayer->GetActualAC(); - v18 = sub_4178FE(v17, v16); + v18 = UI_GetHealthManaStringColor(v17, v16); pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf, 84, v15); v0 = 0; v19 = v45 + v13; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_2.cpp --- a/mm7_2.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_2.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -9311,7 +9311,7 @@ } //----- (00452C49) -------------------------------------------------------- -void __cdecl InitializeGameText() +void InitializeGameText() { //char *v0; // ebx@1 char *v1; // eax@3 @@ -12475,16 +12475,16 @@ LABEL_240: if ( pVideoPlayer->pVideoFrame.pPixels != (unsigned __int16 *)v31 ) pVideoPlayer->bStopBeforeSchedule = 1; - if ( pAsyncMouse == (void *)v31 ) + if (!pAsyncMouse) pMouse->SetMouseClick((unsigned __int16)lParam, lParam >> 16); - if ( pGame != (Game *)v31 ) - { - if ( pAsyncMouse != (void *)v31 ) + if (pGame) + { + if (pAsyncMouse) goto _def_wnd_proc; v33 = GetPickDepth(); pGame->PickMouse(v33, (unsigned __int16)lParam, lParam >> 16, v31, &stru_F93E30, &a4); } - if ( pAsyncMouse == (void *)v31 ) + if (!pAsyncMouse) { sub_416D62_ShowPopupWindow_MonsterRecord_ItemInfo_etcsub_416D62(0); return DefWindowProcA(hWnd, Msg, wParam, v4); diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_5.cpp --- a/mm7_5.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_5.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -6351,7 +6351,7 @@ v15->field_C = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); _43C91D_FormItemTextureFilename(pContainer, 544, v14, 0); v15->field_10 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); - if ( sub_43ED6F_get_some_race_sex_relation(1u) ) + if ( _43ED6F_check_party_races(true) ) papredoll_dbrds[11] = pIcons_LOD->LoadTexture("item092v3", TEXTURE_16BIT_PALETTE); v35 += 28; ++v14; @@ -6508,9 +6508,11 @@ int v8; // [sp-4h] [bp-10h]@61 signed int v9; // [sp-4h] [bp-10h]@69 + result = 0; //BUG fn is void if ( a2 <= 500 ) { - v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0; + //v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0; + v5 = byte_5111C0[(a2 - 100) + 32 + 2] == 0; LABEL_21: if ( v5 ) return result; @@ -8644,37 +8646,26 @@ //----- (0043ED6F) -------------------------------------------------------- -bool __thiscall sub_43ED6F_get_some_race_sex_relation(unsigned int a1) -{ - unsigned int v1; // ebp@1 - Player **v2; // ebx@1 - Player *v3; // esi@2 - enum CHARACTER_RACE v4; // edi@2 - bool result; // eax@2 - char v6; // zf@5 - - v1 = a1; - v2 = &pPlayers[1]; - while ( 1 ) - { - v3 = *v2; - v4 = v3->GetRace(); - result = v3->GetSexByVoice(); - if ( v4 && v4 != CHARACTER_RACE_ELF && v4 != CHARACTER_RACE_GOBLIN ) - v6 = v1 == 1; +bool _43ED6F_check_party_races(bool a1) +{ + bool v6; // zf@5 + + for (uint i = 0; i < 4; ++i) + { + auto player = pParty->pPlayers + i; + auto race = player->GetRace(); + + if (race != CHARACTER_RACE_HUMAN && + race != CHARACTER_RACE_ELF && + race != CHARACTER_RACE_GOBLIN) + v6 = a1 == 1; else - v6 = v1 == 0; - if ( v6 ) - break; - ++v2; - if ( (signed int)v2 >= (signed int)&qword_A750D8 ) - { - LOBYTE(result) = 0; - return result; - } - } - LOBYTE(result) = 1; - return result; + v6 = !a1; + + if (v6) + return true; + } + return false; } // A750D8: using guessed type __int64 qword_A750D8; @@ -13000,7 +12991,7 @@ //----- (00411473) -------------------------------------------------------- void __cdecl sub_411473() { - char *v0; // esi@1 + Texture **v0; // esi@1 Texture **v1; // edi@1 Texture *v2; // ecx@2 Texture *v3; // ecx@2 @@ -13008,7 +12999,7 @@ pTexture_pagemask->Release(); pTexture_506448->Release(); pTexture_50643C->Release(); - v0 = &pTextures_tabs[0][0].pName[4]; + v0 = &pTextures_tabs[0][1]; v1 = pTextures_5064A0; do { @@ -13167,7 +13158,7 @@ { if ( v0->pNumSpellBookPage == v13 ) { - v16 = *(Texture **)&pTextures_tabs[0][0].pName[8 * v13 + 4]; + v16 = pTextures_tabs[v13][1]; switch ( v13 ) { case 0: @@ -13207,7 +13198,7 @@ } else { - v16 = *(Texture **)&pTextures_tabs[0][0].pName[8 * v13]; + v16 = pTextures_tabs[v13][0]; switch ( v13 ) { case 0: @@ -15896,6 +15887,7 @@ { if ( pCurrentScreen == 10 ) { + __debugbreak(); if ( !pPlayers[uActiveCharacter]->CanAct() ) { sprintfex( @@ -15981,8 +15973,9 @@ a1.uFrameY = pY + 5; goto LABEL_41; } - if ( (GetCurrentMenuID() & 0x80000000u) == 0 ) + if (GetCurrentMenuID() > 0) goto LABEL_132; + if ( (signed int)pY > (signed int)pViewport->uViewportW ) { a1.ptr_1C = (void *)((signed int)pX / 118); @@ -15994,7 +15987,7 @@ a1.uFrameX = 38; a1.uFrameY = 60; pAudioPlayer->StopChannels(-1, -1); - a1._41D3B7(); + a1.DrawQuickCharRecord(); } goto LABEL_132; } @@ -16401,7 +16394,7 @@ } //----- (004178FE) -------------------------------------------------------- -unsigned int __fastcall sub_4178FE(signed int a1, signed int a2) +unsigned int __fastcall UI_GetHealthManaStringColor(signed int a1, signed int a2) { unsigned __int16 v2; // dx@2 unsigned __int16 v3; // cx@2 @@ -17166,7 +17159,7 @@ v6 = pPlayer->GetActualMight(); v7 = pPlayer->GetBaseStrength(); v8 = pPlayer->GetActualMight(); - v9 = sub_4178FE(v8, v7); + v9 = UI_GetHealthManaStringColor(v8, v7); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[144], v9, v6, v5); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, 53, 0, pTmpBuf, 0, 0, 0); v10 = LOBYTE(pFontArrus->uFontHeight) + 51; @@ -17174,7 +17167,7 @@ v12 = pPlayer->GetActualIntelligence(); v13 = pPlayer->GetBaseIntelligence(); v14 = pPlayer->GetActualIntelligence(); - v15 = sub_4178FE(v14, v13); + v15 = UI_GetHealthManaStringColor(v14, v13); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[116], v15, v12, v11); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf, 0, 0, 0); v16 = LOBYTE(pFontArrus->uFontHeight) + v10 - 2; @@ -17182,7 +17175,7 @@ v18 = pPlayer->GetActualWillpower(); v19 = pPlayer->GetBaseWillpower(); v20 = pPlayer->GetActualWillpower(); - v21 = sub_4178FE(v20, v19); + v21 = UI_GetHealthManaStringColor(v20, v19); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[163], v21, v18, v17); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v16, 0, pTmpBuf, 0, 0, 0); v22 = LOBYTE(pFontArrus->uFontHeight) + v16 - 2; @@ -17190,7 +17183,7 @@ v24 = pPlayer->GetActualEndurance(); v25 = pPlayer->GetBaseEndurance(); v26 = pPlayer->GetActualEndurance(); - v27 = sub_4178FE(v26, v25); + v27 = UI_GetHealthManaStringColor(v26, v25); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[75], v27, v24, v23); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v22, 0, pTmpBuf, 0, 0, 0); v28 = LOBYTE(pFontArrus->uFontHeight) + v22 - 2; @@ -17198,7 +17191,7 @@ v30 = pPlayer->GetActualAccuracy(); v31 = pPlayer->GetBaseAccuracy(); v32 = pPlayer->GetActualAccuracy(); - v33 = sub_4178FE(v32, v31); + v33 = UI_GetHealthManaStringColor(v32, v31); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[1], v33, v30, v29); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v28, 0, pTmpBuf, 0, 0, 0); v34 = LOBYTE(pFontArrus->uFontHeight) + v28 - 2; @@ -17206,7 +17199,7 @@ v36 = pPlayer->GetActualSpeed(); v37 = pPlayer->GetBaseSpeed(); v38 = pPlayer->GetActualSpeed(); - v39 = sub_4178FE(v38, v37); + v39 = UI_GetHealthManaStringColor(v38, v37); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[211], v39, v36, v35); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v34, 0, pTmpBuf, 0, 0, 0); v40 = LOBYTE(pFontArrus->uFontHeight) + v34 - 2; @@ -17214,7 +17207,7 @@ v42 = pPlayer->GetActualLuck(); v43 = pPlayer->GetBaseLuck(); v44 = pPlayer->GetActualLuck(); - v45 = sub_4178FE(v44, v43); + v45 = UI_GetHealthManaStringColor(v44, v43); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[136], v45, v42, v41); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v40, 0, pTmpBuf, 0, 0, 0); a2 = "%s"; @@ -17224,7 +17217,7 @@ v47 = pPlayer->GetMaxHealth(); v48 = pPlayer->sHealth; v49 = pPlayer->GetMaxHealth(); - v50 = sub_4178FE(pPlayer->sHealth, v49); + v50 = UI_GetHealthManaStringColor(pPlayer->sHealth, v49); sprintfex(pTmpBuf, a2, pGlobalTXT_LocalizationStrings[108], v50, v48, v47); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v46, 0, pTmpBuf, 0, 0, 0); a2a = "%s"; @@ -17234,7 +17227,7 @@ v51 = pPlayer->GetMaxMana(); v52 = pPlayer->sMana; v53 = pPlayer->GetMaxMana(); - v54 = sub_4178FE(pPlayer->sMana, v53); + v54 = UI_GetHealthManaStringColor(pPlayer->sMana, v53); sprintfex(pTmpBuf, a2a, pGlobalTXT_LocalizationStrings[212], v54, v52, v51); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, uY, 0, pTmpBuf, 0, 0, 0); v55 = LOBYTE(pFontArrus->uFontHeight) + uY - 2; @@ -17242,7 +17235,7 @@ v57 = pPlayer->GetActualAC(); v58 = pPlayer->GetBaseAC(); v59 = pPlayer->GetActualAC(); - v60 = sub_4178FE(v59, v58); + v60 = UI_GetHealthManaStringColor(v59, v58); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[12], v60, v57, v56); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v55, 0, pTmpBuf, 0, 0, 0); v61 = v55 + 2 * LOBYTE(pFontArrus->uFontHeight) - 2; @@ -17263,7 +17256,7 @@ v69 = pPlayer->GetActualAge(); v70 = pPlayer->GetBaseAge(); v71 = pPlayer->GetActualAge(); - v72 = sub_4178FE(v71, v70); + v72 = UI_GetHealthManaStringColor(v71, v70); sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[5], v72, v69, v68); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, 50, 0, pTmpBuf, 0, 0, 0); a2b = "%s"; @@ -17274,7 +17267,7 @@ v74 = pPlayer->GetActualLevel(); v75 = pPlayer->GetBaseLevel(); v76 = pPlayer->GetActualLevel(); - v77 = sub_4178FE(v76, v75); + v77 = UI_GetHealthManaStringColor(v76, v75); sprintfex(pTmpBuf, a2b, pGlobalTXT_LocalizationStrings[131], v77, v74, v73); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYa, 0, pTmpBuf, 0, 0, 0); uYb = uYa + LOBYTE(pFontArrus->uFontHeight) - 2; @@ -17310,7 +17303,7 @@ if ( v131 > 99 || v90 > 99 ) a2c = format_4E2E68; v91 = v90; - v92 = sub_4178FE(v131, v90); + v92 = UI_GetHealthManaStringColor(v131, v90); sprintfex(pTmpBuf, a2c, pGlobalTXT_LocalizationStrings[87], v92, v131, v91); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYc, 0, pTmpBuf, 0, 0, 0); a2d = format_4E2E10; @@ -17320,7 +17313,7 @@ if ( v132 > 99 || v93 > 99 ) a2d = format_4E2E68; v94 = v93; - v95 = sub_4178FE(v132, v93); + v95 = UI_GetHealthManaStringColor(v132, v93); sprintfex(pTmpBuf, a2d, pGlobalTXT_LocalizationStrings[6], v95, v132, v94); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYd, 0, pTmpBuf, 0, 0, 0); a2e = format_4E2E10; @@ -17330,7 +17323,7 @@ if ( v133 > 99 || v96 > 99 ) a2e = format_4E2E68; v97 = v96; - v98 = sub_4178FE(v133, v96); + v98 = UI_GetHealthManaStringColor(v133, v96); sprintfex(pTmpBuf, a2e, pGlobalTXT_LocalizationStrings[240], v98, v133, v97); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYe, 0, pTmpBuf, 0, 0, 0); a2f = format_4E2E10; @@ -17340,7 +17333,7 @@ if ( v134 > 99 ) a2f = format_4E2E68; v100 = v99; - v101 = sub_4178FE(v134, v99); + v101 = UI_GetHealthManaStringColor(v134, v99); sprintfex(pTmpBuf, a2f, pGlobalTXT_LocalizationStrings[70], v101, v134, v100); pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYf, 0, pTmpBuf, 0, 0, 0); a2g = format_4E2E10; @@ -17351,12 +17344,12 @@ if ( v135 > 99 || v102 > 99 ) a2g = format_4E2E68; v103 = v102; - v104 = sub_4178FE(v135, v102); + v104 = UI_GetHealthManaStringColor(v135, v102); sprintfex(pTmpBuf, a2g, pGlobalTXT_LocalizationStrings[142], v104, v135, v103); if ( pPlayer->uClass == 35 && v137 == 200 ) { v105 = pGlobalTXT_LocalizationStrings[625]; - v106 = sub_4178FE(v135, 200); + v106 = UI_GetHealthManaStringColor(v135, 200); sprintfex(pTmpBuf, format_4E2E00, pGlobalTXT_LocalizationStrings[142], v106, v105); } pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYg, 0, pTmpBuf, 0, 0, 0); @@ -17368,12 +17361,12 @@ if ( v136 > 99 || v107 > 99 ) a2h = format_4E2E68; v108 = v107; - v109 = sub_4178FE(v136, v107); + v109 = UI_GetHealthManaStringColor(v136, v107); sprintfex(pTmpBuf, a2h, pGlobalTXT_LocalizationStrings[29], v109, v136, v108); if ( pPlayer->uClass == 35 && v138 == 200 ) { v110 = pGlobalTXT_LocalizationStrings[625]; - v111 = sub_4178FE(v136, 200); + v111 = UI_GetHealthManaStringColor(v136, 200); sprintfex(pTmpBuf, format_4E2E00, pGlobalTXT_LocalizationStrings[29], v111, v110); } return pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYh, 0, pTmpBuf, 0, 0, 0); diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_6.cpp --- a/mm7_6.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_6.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -8922,7 +8922,6 @@ switch ( inputAction ) { case INPUT_MoveForward: - __debugbreak(); if ( pCurrentScreen ) break; if (!pParty->bTurnBasedModeOn) diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_data.cpp --- a/mm7_data.cpp Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_data.cpp Mon Oct 29 21:54:17 2012 +0600 @@ -390,10 +390,10 @@ int dword_4E20D0[777]; // idb char byte_4E2430[777]; // weak char byte_4E2431[777]; // weak -unsigned int pLloydsBeaconsPreviewXs[5]; -int pLloydsBeaconsPreviewYs[5]; -unsigned int pLloydsBeacons_SomeXs[5]; -int pLloydsBeacons_SomeYs[777]; // idb +unsigned int pLloydsBeaconsPreviewXs[5] = {61, 281, 61, 281, 171}; +unsigned int pLloydsBeaconsPreviewYs[5] = {84, 84, 228, 228, 155}; +unsigned int pLloydsBeacons_SomeXs[5] = {59, 279, 59, 279, 169}; +unsigned int pLloydsBeacons_SomeYs[5] = {82, 82, 226, 226, 153}; char aSbwb00[7]; // weak char aW[2]; // idb char aA[2]; // idb @@ -1687,12 +1687,55 @@ "pc21-", "pc22-", "pc23", "pc24-", "pc25-" }; -const char *dlad_texnames_by_face[25]; -const char *dlau_texnames_by_face[25]; -const char *dbod_texnames_by_face[25]; -const char *drh_texnames_by_face[25]; -const char *dlh_texnames_by_face[25]; -const char *dlhu_texnames_by_face[25]; +const char *dlad_texnames_by_face[25] = +{ + "pc01lad", "pc02lad", "pc03lad", "pc04lad", "pc05lad", "pc06lad", + "pc07lad", "pc08lad", "pc09lad", "pc10lad", "pc11lad", "pc12lad", + "pc13lad", "pc14lad", "pc15lad", "pc16lad", "pc17lad", "pc18lad", + "pc19lad", "pc20lad", "pc21lad", "pc22lad", "pc23lad", "pc24lad", + "pc25lad" +}; +const char *dlau_texnames_by_face[25] = +{ + "pc01lau", "pc02lau", "pc03lau", "pc04lau", "pc05lau", "pc06lau", + "pc07lau", "pc08lau", "pc09lau", "pc10lau", "pc11lau", "pc12lau", + "pc13lau", "pc14lau", "pc15lau", "pc16lau", "pc17lau", "pc18lau", + "pc19lau", "pc20lau", "pc21lau", "pc22lau", "pc23lau", "pc24lau", + "pc25lau" +}; +const char *dbod_texnames_by_face[25] = +{ + "pc01bod", "pc02bod", "pc03bod", "pc04bod", "pc05bod", "pc06bod", + "pc07bod", "pc08bod", "pc09bod", "pc10bod", "pc11bod", "pc12bod", + "pc13bod", "pc14bod", "pc15bod", "pc16bod", "pc17bod", "pc18bod", + "pc19bod", "pc20bod", "pc21bod", "pc22bod", "pc23bod", "pc24bod", + "pc25bod" +}; +const char *drh_texnames_by_face[25] = +{ + + "pc01rh", "pc02rh", "pc03rh", "pc04rh", "pc05rh", "pc06rh", + "pc07rh", "pc08rh", "pc09rh", "pc10rh", "pc11rh", "pc12rh", + "pc13rh", "pc14rh", "pc15rh", "pc16rh", "pc17rh", "pc18rh", + "pc19rh", "pc20rh", "pc21rh", "pc22rh", "pc23rh", "pc24rh", + "pc25rh" +}; +const char *dlh_texnames_by_face[25] = +{ + "pc01lh", "pc02lh", "pc03lh", "pc04lh", "pc05lh", "pc06lh", + "pc07lh", "pc08lh", "pc09lh", "pc10lh", "pc11lh", "pc12lh", + "pc13lh", "pc14lh", "pc15lh", "pc16lh", "pc17lh", "pc18lh", + "pc19lh", "pc20lh", "pc21lh", "pc22lh", "pc23lh", "pc24lh", + "pc25lh" +}; +const char *dlhu_texnames_by_face[25] = +{ + "pc01lhu", "pc02lhu", "pc03lhu", "pc04lhu", "pc05lhu", "pc06lhu", + "pc07lhu", "pc08lhu", "pc09lhu", "pc10lhu", "pc11lhu", "pc12lhu", + "pc13lhu", "pc14lhu", "pc15lhu", "pc16lhu", "pc17lhu", "pc18lhu", + "pc19lhu", "pc20lhu", "pc21lhu", "pc22lhu", "pc23lhu", "pc24lhu", + "pc25lhu" +}; _UNKNOWN unk_4ED3D8; // weak unsigned char byte_4ED498 = 15; // weak __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4] = {34, 149, 264, 379}; @@ -1997,7 +2040,6 @@ int dword_506408[777]; // weak int dword_50640C[777]; // weak unsigned int uTextureID_506438; -_UNKNOWN unk_506494; // weak int dword_50651C; // weak int dword_506520; // weak int dword_506524; // weak @@ -2492,7 +2534,6 @@ struct Texture *pTexture_PlayerFaceMask; struct Texture *pTexture_PlayerFaceEradicated; struct Texture *pTexture_PlayerFaceDead; -int A74CEC_player_faces_minus1_indexing[777]; // weak struct Texture *pTextures_PlayerFaces[4][56]; int dword_A75070; // weak struct Player *pPlayers[5]; diff -r 6b46c3e15e21 -r ecbd9b6ccf52 mm7_data.h --- a/mm7_data.h Mon Oct 29 21:54:06 2012 +0600 +++ b/mm7_data.h Mon Oct 29 21:54:17 2012 +0600 @@ -377,9 +377,9 @@ extern char byte_4E2430[]; // weak extern char byte_4E2431[]; // weak extern unsigned int pLloydsBeaconsPreviewXs[5]; -extern int pLloydsBeaconsPreviewYs[5]; +extern unsigned int pLloydsBeaconsPreviewYs[5]; extern unsigned int pLloydsBeacons_SomeXs[5]; -extern int pLloydsBeacons_SomeYs[]; // idb +extern unsigned int pLloydsBeacons_SomeYs[5]; // idb extern char aSbwb00[7]; // weak extern char aW[2]; // idb extern char aA[2]; // idb @@ -1947,7 +1947,6 @@ extern int dword_506408[]; // weak extern int dword_50640C[]; // weak extern unsigned int uTextureID_506438; -extern _UNKNOWN unk_506494; // weak extern int dword_50651C; // weak extern int dword_506520; // weak extern int dword_506524; // weak @@ -2445,7 +2444,6 @@ extern struct Texture *pTexture_PlayerFaceMask; extern struct Texture *pTexture_PlayerFaceEradicated; extern struct Texture *pTexture_PlayerFaceDead; -extern int A74CEC_player_faces_minus1_indexing[]; // weak extern struct Texture *pTextures_PlayerFaces[4][56]; extern int dword_A75070; // weak extern struct Player *pPlayers[5]; @@ -2641,7 +2639,7 @@ void __thiscall sub_417871(int *pXY); void __cdecl sub_4178C4(); void __cdecl sub_4178E1(); -unsigned int __fastcall sub_4178FE(signed int a1, signed int a2); +unsigned int __fastcall UI_GetHealthManaStringColor(signed int a1, signed int a2); signed int __thiscall GetConditionDrawColor(unsigned int uConditionIdx); // idb char __fastcall sub_4179BC_draw_tooltip(const char *a1, const char *a2); // idb unsigned int __fastcall sub_417AD4(unsigned int uPlayerClass, enum PLAYER_SKILL_TYPE uPlayerSkillType, signed int a3); @@ -2754,7 +2752,7 @@ int __fastcall _43C91D_FormItemTextureFilename(char *a1, signed int a2, int a3, int a4); void __fastcall CharacterUI_DrawPaperdoll(unsigned int uPlayerID); // idb void __fastcall CharacterUI_DrawPaperdollWithRingOverlay(unsigned int uPlayerID); // idb -bool __thiscall sub_43ED6F_get_some_race_sex_relation(unsigned int a1); +bool _43ED6F_check_party_races(bool b); bool __thiscall sub_43EDB9_get_some_race_sex_relation_2(unsigned int _this); bool __fastcall sub_43EE15_player_has_item(unsigned int uItemID, struct Player *pPlayer, char a3); bool __fastcall sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(signed int a1);