Mercurial > mm7
changeset 1496:ab6bf38b2940
UIGame.cpp cleaning(continue)
author | Ritor1 |
---|---|
date | Sun, 01 Sep 2013 17:10:29 +0600 |
parents | f62e6d06acac |
children | 19890e50e2f6 |
files | GUIWindow.cpp Render.cpp Render.h UI/UICharacter.cpp UI/UIHouses.cpp UI/UiGame.cpp mm7_2.cpp |
diffstat | 7 files changed, 407 insertions(+), 792 deletions(-) [+] |
line wrap: on
line diff
--- a/GUIWindow.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/GUIWindow.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -911,7 +911,7 @@ pDialogWindow.uFrameZ = 457; pTextHeight = pFontArrus->CalcTextHeight(current_npc_text, &pDialogWindow, 13, 0); v6 = pTextHeight + 7; - pRenderer->_4A6A68(8, 352 - (pTextHeight + 7), &pIcons_LOD->pTextures[uTextureID_Leather], + pRenderer->GetLeather(8, 352 - (pTextHeight + 7), &pIcons_LOD->pTextures[uTextureID_Leather], pIcons_LOD->pTextures[uTextureID_Leather].uTextureHeight - (pTextHeight + 7)); pRenderer->DrawTextureIndexed(8, 347 - v6, pTexture_591428); v7 = FitTextInAWindow(current_npc_text, pFontArrus, &pDialogWindow, 0xDu, 0);
--- a/Render.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/Render.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -7359,20 +7359,13 @@ } //----- (004A6A68) -------------------------------------------------------- -void Render::_4A6A68(unsigned int a2, unsigned int a3, Texture *a4, __int16 height) -{ - Render *v5; // ebx@1 - unsigned __int16 v6; // ax@1 - - v5 = this; - +void Render::GetLeather(unsigned int a2, unsigned int a3, Texture *a4, __int16 height) +{ Texture tex; // [sp+Ch] [bp-48h]@1 - //Texture::Texture(&tex); - - v6 = a4->uTextureHeight - height; + memcpy(&tex, a4, sizeof(tex)); - tex.uTextureHeight = v6; - if ( (signed __int16)v6 > 0 ) + tex.uTextureHeight = a4->uTextureHeight - height; + if ( (signed __int16)tex.uTextureHeight > 0 ) DrawTextureIndexed(a2, a3, &tex); }
--- a/Render.h Fri Aug 30 01:49:29 2013 +0600 +++ b/Render.h Sun Sep 01 17:10:29 2013 +0600 @@ -348,7 +348,7 @@ void _4A65CC(unsigned int x, unsigned int y, struct Texture *a4, struct Texture *a5, int a6, int a7, int a8); void DrawTransparentRedShade(unsigned int a2, unsigned int a3, struct Texture *a4); void DrawTransparentGreenShade(signed int a2, signed int a3, struct Texture *pTexture); - void _4A6A68(unsigned int a2, unsigned int a3, struct Texture *a4, __int16 height); + void GetLeather(unsigned int a2, unsigned int a3, struct Texture *a4, __int16 height); void DrawTextPalette(int x, int y, unsigned char* font_pixels, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, int a8); void DrawText(signed int uOutX, signed int uOutY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor); void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16);
--- a/UI/UICharacter.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/UI/UICharacter.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -2325,35 +2325,17 @@ unsigned __int16 v5; // ax@7 int v7; // esi@27 int v8; // eax@29 - //int v10; // esi@34 - //int v12; // esi@38 - //char v14; // zf@38 - //int v15; // esi@42 int v17; // eax@44 unsigned int v18; // ecx@55 unsigned int v19; // eax@55 - //int v20; // esi@60 unsigned int v22; // eax@61 int v23; // eax@62 - //int v24; // esi@65 - //int v25; // eax@65 int v26; // eax@69 - //int v27; // esi@81 - //int v28; // eax@81 - //int v29; // esi@84 - //int v30; // eax@84 - //int v31; // eax@85 - unsigned int v32; // ecx@88 - unsigned int v33; // eax@88 int v34; // esi@90 - //unsigned int v35; // eax@91 int v36; // esi@93 - int v37; // edi@93 ItemGen *v38; // edi@93 - //__int16 v39; // dx@99 ItemGen _this; // [sp+Ch] [bp-40h]@1 unsigned int v48; // [sp+30h] [bp-1Ch]@88 - //unsigned int v49; // [sp+34h] [bp-18h]@57 unsigned int v50; // [sp+38h] [bp-14h]@50 int v51; // [sp+3Ch] [bp-10h]@1 int v52; // [sp+40h] [bp-Ch]@5 @@ -2363,8 +2345,6 @@ _this.Reset(); v1 = pPlayers[uActiveCharacter]->pEquipment.uMainHand; v2 = pPlayers[uActiveCharacter]->pEquipment.uShield; - //v54 = pPlayers[uActiveCharacter]->pEquipment.uShield; - //v53 = v1; if ( v1 && pItemsTable->pItems[*(int *)&pPlayers[uActiveCharacter]->pInventoryItemList[v1 - 1]].uEquipType == EQUIP_MAIN_HAND ) v51 = v1; v3 = pParty->pPickedItem.uItemID; @@ -2411,7 +2391,6 @@ WetsuitOn(uActiveCharacter); return; } - //v6 = v52; switch ( pEquipType ) { case EQUIP_BOW: @@ -2511,8 +2490,8 @@ pPlayers[uActiveCharacter]->pEquipment.uShield = v17; pMouse->RemoveHoldingItem(); return; - }//ставим щит когда держит двуручный меч - v1--; + } + v1--;//ставим щит когда держит двуручный меч memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); pPlayers[uActiveCharacter]->pInventoryItemList[v1].uBodyAnchor = 0; pParty->pPickedItem.Reset(); @@ -2685,19 +2664,16 @@ return; //------------------------------------------------------------------------------- default: - pPlayers[uActiveCharacter]->UseItem_DrinkPotion_etc(uActiveCharacter, 0); + pPlayers[uActiveCharacter]->UseItem_DrinkPotion_etc(uActiveCharacter, 0);//выпить напиток и др. return; } return; } - v32 = pMouse->uMouseClickX; - v33 = pMouse->uMouseClickY; - v34 = pRenderer->pActiveZBuffer[v32 + pSRZBufferLineOffsets[v33]] & 0xFFFF; + v34 = pRenderer->pActiveZBuffer[pMouse->uMouseClickX + pSRZBufferLineOffsets[pMouse->uMouseClickY]] & 0xFFFF; if ( v34 ) { v36 = v34 - 1; - v37 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v36); v38 = &pPlayers[uActiveCharacter]->pInventoryItemList[v36]; pEquipType = pItemsTable->pItems[v38->uItemID].uEquipType; if ( v38->uItemID == ITEM_WETSUIT )
--- a/UI/UIHouses.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/UI/UIHouses.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -2510,9 +2510,9 @@ } auto pTex = pIcons_LOD->GetTexture(uTextureID_Leather); - pRenderer->_4A6A68(8u, 352 - v9, pTex, pTex->uTextureHeight - v9); - pRenderer->DrawTextureIndexed(8u, 347 - v9, pTexture_591428); - v10 = FitTextInAWindow(current_npc_text, pOutString, &w, 0xDu, 0); + pRenderer->GetLeather(8, 352 - v9, pTex, pTex->uTextureHeight - v9); + pRenderer->DrawTextureIndexed(8, 347 - v9, pTexture_591428); + v10 = FitTextInAWindow(current_npc_text, pOutString, &w, 13, 0); a1.DrawText(pOutString, 13, 354 - v9, 0, v10, 0, 0, 0); break; } @@ -2932,7 +2932,7 @@ pTextHeight = pFontCreate->CalcTextHeight(pTmpBuf.data(), &dialog_window, 12, 0) + 7; } auto pTex = pIcons_LOD->GetTexture(uTextureID_Leather); - pRenderer->_4A6A68(8, 352 - pTextHeight, pTex, pTex->uTextureHeight - pTextHeight); + pRenderer->GetLeather(8, 352 - pTextHeight, pTex, pTex->uTextureHeight - pTextHeight); pRenderer->DrawTextureIndexed(8, 347 - pTextHeight, pTexture_591428); v63 = FitTextInAWindow(pTmpBuf.data(), pOutString, &dialog_window, 0xCu, 0); window_SpeakInHouse->DrawText(pOutString, 12, 354 - pTextHeight, 0, v63, 0, 0, 0); @@ -2946,7 +2946,7 @@ v61 = pFontArrus->CalcTextHeight(pTmpBuf.data(), &dialog_window, 12, 0); pTextHeight = v61 + 7; auto pTex = pIcons_LOD->GetTexture(uTextureID_Leather); - pRenderer->_4A6A68(8, 352 - (v61 + 7), pTex, pTex->uTextureHeight - (v61 + 7)); + pRenderer->GetLeather(8, 352 - (v61 + 7), pTex, pTex->uTextureHeight - (v61 + 7)); pRenderer->DrawTextureIndexed(8, 347 - pTextHeight, pTexture_591428); v63 = FitTextInAWindow(pTmpBuf.data(), pFontArrus, &dialog_window, 0xCu, 0); window_SpeakInHouse->DrawText(pFontArrus, 12, 354 - pTextHeight, 0, v63, 0, 0, 0); @@ -4224,7 +4224,7 @@ pInString = (char *)*(&pNPCStats->field_17884 + ((v10 & 3) == 2) + 2 * v9); v11 = pFontArrus->CalcTextHeight(pInString, &a1, 13, 0); v12 = v11 + 7; - pRenderer->_4A6A68(8, 352 - (v11 + 7), + pRenderer->GetLeather(8, 352 - (v11 + 7), pIcons_LOD->GetTexture(uTextureID_Leather), pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - (v11 + 7)); pRenderer->DrawTextureIndexed(8u, 347 - v12, pTexture_591428); @@ -4427,11 +4427,9 @@ v47 = pFontCreate; v48 = pFontCreate->CalcTextHeight(current_npc_text, &w, 13, 0) + 7; } - pRenderer->_4A6A68(8, 352 - v48, - pIcons_LOD->GetTexture(uTextureID_Leather), - pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - v48); + pRenderer->GetLeather(8, 352 - v48, pIcons_LOD->GetTexture(uTextureID_Leather), pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - v48); pRenderer->DrawTextureIndexed(8u, 347 - v48, pTexture_591428); - v49 = FitTextInAWindow(current_npc_text, v47, &w, 0xDu, 0); + v49 = FitTextInAWindow(current_npc_text, v47, &w, 13, 0); a1.DrawText(v47, 13, 354 - v48, 0, v49, 0, 0, 0); } }
--- a/UI/UiGame.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/UI/UiGame.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -40,17 +40,9 @@ //----- (00421D00) -------------------------------------------------------- void __fastcall GameUI_OnPlayerPortraitLeftClick(unsigned int uPlayerID) { - //unsigned int v1; // esi@1 - //int v2; // eax@2 - //Player *v3; // ecx@2 - //Player *v4; // ecx@5 - unsigned int v5; // [sp-4h] [bp-10h]@21 - - //v1 = uPlayerID; auto player = &pParty->pPlayers[uPlayerID - 1]; if (pParty->pPickedItem.uItemID) { - //v3 = player; if (auto slot = player->AddItem(-1, pParty->pPickedItem.uItemID)) { memcpy(&player->pInventoryItemList[slot-1], &pParty->pPickedItem, 0x24u); @@ -63,16 +55,14 @@ { player = pPlayers[uActiveCharacter]; } - if(player->CanAct() || !pPlayers[uActiveCharacter]->CanAct()) - player->PlaySound(SPEECH_NoRoom, 0); + if( player->CanAct() || !pPlayers[uActiveCharacter]->CanAct() ) + player->PlaySound(SPEECH_NoRoom, 0); } -//LABEL_9: if (pCurrentScreen == SCREEN_GAME) { viewparams->bRedrawGameUI = true; if ( uActiveCharacter != uPlayerID ) - //goto LABEL_27; { if ( pPlayers[uPlayerID]->uTimeToRecovery ) return; @@ -80,29 +70,23 @@ uActiveCharacter = uPlayerID; return; } - v5 = 7; -//LABEL_22: - pGUIWindow_CurrentMenu = CharacterUI_Initialize(v5); + pGUIWindow_CurrentMenu = CharacterUI_Initialize(7); return; } if ( pCurrentScreen == SCREEN_SPELL_BOOK ) return; if ( pCurrentScreen == SCREEN_CHEST ) { -//LABEL_23: viewparams->bRedrawGameUI = true; if ( uActiveCharacter == uPlayerID ) { pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; pCurrentScreen = SCREEN_CHEST_INVENTORY; - //goto LABEL_28; uActiveCharacter = uPlayerID; return; } -//LABEL_27: if ( pPlayers[uPlayerID]->uTimeToRecovery ) return; - //goto LABEL_28; uActiveCharacter = uPlayerID; return; } @@ -110,7 +94,6 @@ { if ( pCurrentScreen == SCREEN_E ) { -//LABEL_28: uActiveCharacter = uPlayerID; return; } @@ -122,20 +105,16 @@ FillAwardsData(); return; } - //goto LABEL_23; viewparams->bRedrawGameUI = true; if ( uActiveCharacter == uPlayerID ) { pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; pCurrentScreen = SCREEN_CHEST_INVENTORY; - //goto LABEL_28; uActiveCharacter = uPlayerID; return; } -//LABEL_27: if ( pPlayers[uPlayerID]->uTimeToRecovery ) return; - //goto LABEL_28; uActiveCharacter = uPlayerID; return; } @@ -143,16 +122,13 @@ return; viewparams->bRedrawGameUI = true; if ( uActiveCharacter != uPlayerID ) - //goto LABEL_28; uActiveCharacter = uPlayerID; return; if (dialog_menu_id == HOUSE_DIALOGUE_SHOP_BUY_STANDARD || dialog_menu_id == HOUSE_DIALOGUE_SHOP_6) { __debugbreak(); // fix indexing pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; - v5 = 14; - //goto LABEL_22; - pGUIWindow_CurrentMenu = CharacterUI_Initialize(v5); + pGUIWindow_CurrentMenu = CharacterUI_Initialize(14); return; } } @@ -163,30 +139,16 @@ void GameUI_DrawNPCPopup(void *_this)//PopupWindowForBenefitAndJoinText { int v1; // edi@2 - int v2; // ecx@2 - NPCData *v3; // eax@2 - NPCData *v4; // esi@7 - NPCData *v5; // eax@16 - NPCData *v6; // esi@16 - const CHAR *v7; // eax@18 - unsigned int v8; // eax@25 - unsigned int v9; // eax@25 - const char *v10; // ST14_4@26 + NPCData *pNPC; // eax@16 + const CHAR *pText; // eax@18 char *v11; // esi@26 - const char *v12; // ST18_4@27 - unsigned __int16 v13; // ax@28 - char *v14; // eax@28 - GUIWindow a1; // [sp+Ch] [bp-60h]@23 + GUIWindow popup_window; // [sp+Ch] [bp-60h]@23 int a2; // [sp+60h] [bp-Ch]@16 - void *v17; // [sp+64h] [bp-8h]@1 LPCSTR lpsz; // [sp+68h] [bp-4h]@6 - v17 = _this; if ( bNoNPCHiring != 1 ) { v1 = 0; - v2 = 0; - v3 = pParty->pHirelings; /*do { if ( v3->pName ) @@ -226,69 +188,57 @@ } } } - if ( (signed int)((char *)v17 + (unsigned __int8)pParty->field_709) < v1 ) + if ( (signed int)((char *)_this + (unsigned __int8)pParty->field_709) < v1 ) { - sDialogue_SpeakingActorNPC_ID = -1 - (unsigned __int8)pParty->field_709 - (int)v17; - v5 = GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &a2); - v6 = v5; - if ( v5 ) + sDialogue_SpeakingActorNPC_ID = -1 - (unsigned __int8)pParty->field_709 - (int)_this; + pNPC = GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &a2); + if ( pNPC ) { if ( a2 == 57 ) - v7 = pNPCTopics[512].pText; // Baby dragon + pText = pNPCTopics[512].pText; // Baby dragon else - v7 = (const CHAR *)pNPCStats->pProfessions[v5->uProfession].pBenefits; - lpsz = v7; - if ( !v7 ) + pText = (const CHAR *)pNPCStats->pProfessions[pNPC->uProfession].pBenefits; + lpsz = pText; + if ( !pText ) { - lpsz = (LPCSTR)pNPCStats->pProfessions[v5->uProfession].pJoinText; + lpsz = (LPCSTR)pNPCStats->pProfessions[pNPC->uProfession].pJoinText; if ( !lpsz ) lpsz = ""; } - a1.Hint = 0; - a1.uFrameX = 38; - a1.uFrameY = 60; - a1.uFrameWidth = 276; - a1.uFrameZ = 313; - a1.uFrameHeight = pFontArrus->CalcTextHeight(lpsz, &a1, 0, 0) - + 2 * LOBYTE(pFontArrus->uFontHeight) - + 24; - if ( (signed int)a1.uFrameHeight < 130 ) - a1.uFrameHeight = 130; - a1.uFrameWidth = 400; - a1.uFrameZ = a1.uFrameX + 399; - a1.DrawMessageBox(0); - sprintfex(pTmpBuf2.data(), "NPC%03d", v6->uPortraitID); - v8 = pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE); - pRenderer->DrawTextureIndexed( - a1.uFrameX + 22, - a1.uFrameY + 36, - (Texture *)(v8 != -1 ? &pIcons_LOD->pTextures[v8] : 0)); - v9 = v6->uProfession; - if ( v9 ) + popup_window.Hint = 0; + popup_window.uFrameX = 38; + popup_window.uFrameY = 60; + popup_window.uFrameWidth = 276; + popup_window.uFrameZ = 313; + popup_window.uFrameHeight = pFontArrus->CalcTextHeight(lpsz, &popup_window, 0, 0) + 2 * LOBYTE(pFontArrus->uFontHeight) + 24; + if ( (signed int)popup_window.uFrameHeight < 130 ) + popup_window.uFrameHeight = 130; + popup_window.uFrameWidth = 400; + popup_window.uFrameZ = popup_window.uFrameX + 399; + popup_window.DrawMessageBox(0); + sprintfex(pTmpBuf2.data(), "NPC%03d", pNPC->uPortraitID); + pRenderer->DrawTextureIndexed(popup_window.uFrameX + 22, popup_window.uFrameY + 36, + (Texture *)(pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE) != -1 + ? &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE)] : 0)); + if ( pNPC->uProfession ) { - v10 = v6->pName; v11 = pTmpBuf.data(); - sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], v10, aNPCProfessionNames[v9]); + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], pNPC->pName, aNPCProfessionNames[pNPC->uProfession]); } else { - v12 = v6->pName; v11 = pTmpBuf.data(); - strcpy(pTmpBuf.data(), v12); + strcpy(pTmpBuf.data(), pNPC->pName); } - v13 = TargetColor(0xFFu, 0xFFu, 0x9Bu); - a1.DrawTitleText(pFontArrus, 0, 0xCu, v13, v11, 3u); - a1.uFrameWidth -= 24; - a1.uFrameZ = a1.uFrameX + a1.uFrameWidth - 1; - v14 = BuildDialogueString((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0); - a1.DrawText(pFontArrus, 100, 36, 0, v14, 0, 0, 0); + popup_window.DrawTitleText(pFontArrus, 0, 12, TargetColor(0xFFu, 0xFFu, 0x9Bu), v11, 3); + popup_window.uFrameWidth -= 24; + popup_window.uFrameZ = popup_window.uFrameX + popup_window.uFrameWidth - 1; + popup_window.DrawText(pFontArrus, 100, 36, 0, BuildDialogueString((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0), 0, 0, 0); } } } } - - //----- (00445D4A) -------------------------------------------------------- void GameUI_InitializeDialogue(Actor *actor, int bPlayerSaysHello) { @@ -396,64 +346,31 @@ { NPCData *pNPC; // ebx@2 int pGreetType; // eax@2 - //unsigned __int16 v2; // di@2 - //unsigned int v3; // eax@2 - char *v4; // esi@3 - //int v5; // eax@11 - //char *v6; // ecx@13 - //char *v7; // eax@16 - //unsigned int v8; // edi@19 - //char *v9; // ecx@27 - char *v10; // eax@29 - //int v11; // eax@30 - int v12; // esi@39 - char *v13; // eax@41 - GUIButton *v14; // eax@43 - //GUIButton *v15; // edi@43 - signed int v16; // eax@44 - //unsigned int v23; // eax@53 - //const char *v24; // eax@59 - //unsigned __int16 v30; // cx@83 - int v31; // ecx@86 + int pTextHeight; // esi@39 + GUIButton *pButton; // eax@43 int v32; // ebx@93 - //unsigned int v33; // eax@93 - GUIWindow *v34; // ecx@93 int v35; // esi@93 - int i; // eax@93 - GUIButton *v37; // eax@94 int v38; // eax@95 signed int v39; // esi@99 signed int v40; // eax@102 unsigned int v41; // ebx@102 int v42; // edi@102 - GUIButton *v43; // esi@103 - int v44; // eax@104 unsigned int v45; // ecx@104 - unsigned __int16 *v46; // edx@104 - unsigned __int16 v47; // ax@104 - GUIWindow pWindow; // [sp+4h] [bp-110h]@39 - int v49; // [sp+Ch] [bp-108h]@39 - int v50; // [sp+14h] [bp-100h]@39 - GUIWindow v51; // [sp+58h] [bp-BCh]@2 - GUIWindow v52; // [sp+ACh] [bp-68h]@42 + unsigned __int16 pTextColor; // ax@104 + GUIWindow window; // [sp+ACh] [bp-68h]@42 char *Str; // [sp+100h] [bp-14h]@104 - //int v54; // [sp+104h] [bp-10h]@2 - //unsigned __int16 *v55; // [sp+108h] [bp-Ch]@82 GUIFont *pOutString; // [sp+10Ch] [bp-8h]@39 char *pInString=NULL; // [sp+110h] [bp-4h]@32 if ( !pDialogueWindow ) return; - memcpy(&v51, pDialogueWindow, sizeof(v51)); + // Window title(Заголовок окна)---- + memcpy(&window, pDialogueWindow, sizeof(window)); pNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID); pGreetType = GetGreetType(sDialogue_SpeakingActorNPC_ID); - v51.uFrameWidth -= 10; - v51.uFrameZ -= 10; - //v54 = v1; - //TargetColor(0xFFu, 0xFFu, 0xFFu); - //TargetColor(0xE1u, 0xCDu, 0x23u); - //v2 = TargetColor(0x15u, 0x99u, 0xE9u); + window.uFrameWidth -= 10; + window.uFrameZ -= 10; pRenderer->DrawTextureIndexed(477, 0, pTexture_Dialogue_Background); pRenderer->DrawTextureTransparent(468, 0, (Texture *)(uTextureID_right_panel_loop != -1 ? &pIcons_LOD->pTextures[uTextureID_right_panel_loop] : 0)); pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, (Texture *)(uTextureID_50795C != -1 ? &pIcons_LOD->pTextures[uTextureID_50795C] : 0)); @@ -467,7 +384,7 @@ else strcpy(pTmpBuf.data(), pNPC->pName); - v51.DrawTitleText(pFontArrus, 483, 112, ui_game_dialogue_npc_name_color, pTmpBuf.data(), 3); + window.DrawTitleText(pFontArrus, 483, 112, ui_game_dialogue_npc_name_color, pTmpBuf.data(), 3); pParty->GetPartyFame(); pInString = nullptr; @@ -525,7 +442,7 @@ } else if (pGreetType == 2)//HiredNPC_greet { - auto prof = pNPCStats->pProfessions + pNPC->uProfession - 1; + auto prof = pNPCStats->pProfessions + pNPC->uProfession; if (pNPC->Hired()) pInString = BuildDialogueString(prof->pDismissText, uActiveCharacter - 1, 0, 0, 0, 0); @@ -535,145 +452,139 @@ break; } + // Message window(Окно сообщения)---- if (pInString) { - pWindow.uFrameWidth = game_viewport_width; - pWindow.uFrameZ = 452; + window.uFrameWidth = game_viewport_width; + window.uFrameZ = 452; auto font = pFontArrus; - v12 = pFontArrus->CalcTextHeight(pInString, &pWindow, 13, 0) + 7; - if ( 352 - v12 < 8 ) + pTextHeight = pFontArrus->CalcTextHeight(pInString, &window, 13, 0) + 7; + if ( 352 - pTextHeight < 8 ) { font = pFontCreate; - v12 = pFontCreate->CalcTextHeight(pInString, &pWindow, 13, 0) + 7; + pTextHeight = pFontCreate->CalcTextHeight(pInString, &window, 13, 0) + 7; } if (uTextureID_Leather != -1) - pRenderer->_4A6A68(8, 352 - v12, &pIcons_LOD->pTextures[uTextureID_Leather], pIcons_LOD->pTextures[uTextureID_Leather].uTextureHeight - v12); - pRenderer->DrawTextureIndexed(8u, 347 - v12, pTexture_591428); - v13 = FitTextInAWindow(pInString, font, &pWindow, 0xDu, 0); - pDialogueWindow->DrawText(font, 13, 354 - v12, 0, v13, 0, 0, 0); + pRenderer->GetLeather(8, 352 - pTextHeight, &pIcons_LOD->pTextures[uTextureID_Leather], pIcons_LOD->pTextures[uTextureID_Leather].uTextureHeight - pTextHeight); + pRenderer->DrawTextureIndexed(8, 347 - pTextHeight, pTexture_591428); + pDialogueWindow->DrawText(font, 13, 354 - pTextHeight, 0, FitTextInAWindow(pInString, font, &window, 13, 0), 0, 0, 0); } - - - memcpy(&v52, pDialogueWindow, sizeof(v52)); - v52.uFrameX = 483; - v52.uFrameWidth = 148; - v52.uFrameZ = 334; - for (int i = v52.pStartingPosActiveItem; - i < v52.pStartingPosActiveItem + v52.pNumPresenceButton; ++i) + // Right panel(Правая панель)------- + memcpy(&window, pDialogueWindow, sizeof(window)); + window.uFrameX = 483; + window.uFrameWidth = 148; + window.uFrameZ = 334; + for (int i = window.pStartingPosActiveItem; i < window.pStartingPosActiveItem + window.pNumPresenceButton; ++i) { - v14 = v52.GetControl(i); - //v15 = v14; - if ( !v14 ) + pButton = window.GetControl(i); + if ( !pButton ) break; - v16 = v14->msg_param; - if ( v16 > 88 ) - v14->pButtonName[0] = 0; - else if (v16 == 88) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[581]); // Lord - else if (v16 == 87) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[580]); // Knight - else if (v16 == 86) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[579]); // Squire - else if (v16 == 85) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[578]); // Page - else if (v16 == 77) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[407]); // Details - else if (v16 == 76) + if ( pButton->msg_param > 88 ) + pButton->pButtonName[0] = 0; + else if (pButton->msg_param == 88) + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[581]); // Lord + else if (pButton->msg_param == 87) + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[580]); // Knight + else if (pButton->msg_param == 86) + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[579]); // Squire + else if (pButton->msg_param == 85) + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[578]); // Page + else if (pButton->msg_param == 77) + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[407]); // Details + else if (pButton->msg_param == 76) { if (pNPC->Hired()) - sprintf(v14->pButtonName, (const char*)pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s + sprintf(pButton->pButtonName, (const char*)pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s else - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[406]); // Hire + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[406]); // Hire } - else if (v16 == 24) + else if (pButton->msg_param == 24) { __debugbreak(); // learn conditions of this event auto topic = pNPCTopics[pNPC->evt_F - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } else - strcpy(v14->pButtonName, topic); + strcpy(pButton->pButtonName, topic); } - else if (v16 == 9) - strcpy(v14->pButtonName, GetProfessionActionText(pNPC->uProfession)); - else if (v16 == 19) - { + else if (pButton->msg_param == 9) + strcpy(pButton->pButtonName, GetProfessionActionText(pNPC->uProfession)); + else if (pButton->msg_param == 19) + { // __debugbreak(); // learn conditions of this event Scavenger Hunt auto topic = pNPCTopics[pNPC->evt_A - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } - else strcpy(v14->pButtonName, topic); - } - else if (v16 == 20) - { + else strcpy(pButton->pButtonName, topic); + } + else if (pButton->msg_param == 20) + { //__debugbreak(); // learn conditions of this event instruments auto topic = pNPCTopics[pNPC->evt_B - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } - else strcpy(v14->pButtonName, topic); - } - else if (v16 == 21) - { + else strcpy(pButton->pButtonName, topic); + } + else if (pButton->msg_param == 21) + { //__debugbreak(); // learn conditions of this event auto topic = pNPCTopics[pNPC->evt_C - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } - else strcpy(v14->pButtonName, topic); - } - else if (v16 == 22) - { + else strcpy(pButton->pButtonName, topic); + } + else if (pButton->msg_param == 22) + { //__debugbreak(); // learn conditions of this event auto topic = pNPCTopics[pNPC->evt_D - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } - else strcpy(v14->pButtonName, topic); - } - else if (v16 == 23) - { + else strcpy(pButton->pButtonName, topic); + } + else if (pButton->msg_param == 23) + { //__debugbreak(); // learn conditions of this event auto topic = pNPCTopics[pNPC->evt_E - 1].pTopic;//(&dword_721660)[8 * v23]; if (!topic) { - v14->pButtonName[0] = 0; - v14->msg_param = 0; + pButton->pButtonName[0] = 0; + pButton->msg_param = 0; } - else strcpy(v14->pButtonName, topic); - } - else if (v16 == 13) - { + else strcpy(pButton->pButtonName, topic); + } + else if (pButton->msg_param == 13) + { if (pNPC->Hired()) - sprintf(v14->pButtonName, pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s + sprintf(pButton->pButtonName, pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s else - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[122]); // Join - } - else - v14->pButtonName[0] = 0; - + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[122]); // Join + } + else + pButton->pButtonName[0] = 0; if (pParty->field_7B5_in_arena_quest && pParty->field_7B5_in_arena_quest != -1) { int num_dead_actors = 0; pInString = 0; - for (uint i = 0; i < uNumActors; ++i) + for ( uint i = 0; i < uNumActors; ++i ) { - if (pActors[i].uAIState == Dead || pActors[i].uAIState == Removed || - pActors[i].uAIState == Disabled) + if (pActors[i].uAIState == Dead || pActors[i].uAIState == Removed || pActors[i].uAIState == Disabled) ++num_dead_actors; else { @@ -683,29 +594,23 @@ } } if (num_dead_actors == uNumActors) - strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[658]); // Collect Prize + strcpy(pButton->pButtonName, pGlobalTXT_LocalizationStrings[658]); // Collect Prize } } - + // Install Buttons(Установка кнопок)-------- v32 = 0; - v34 = pDialogueWindow; - //v54 = v33; v35 = pDialogueWindow->pStartingPosActiveItem; - for ( i = v35 + pDialogueWindow->pNumPresenceButton; v35 < i; i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ) + for ( uint i = v35 + pDialogueWindow->pNumPresenceButton; v35 < i; i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ) { - v37 = v34->GetControl(v35); - if ( !v37 ) - { - v34 = pDialogueWindow; + pButton = pDialogueWindow->GetControl(v35); + if ( !pButton ) break; - } - v38 = pFontArrus->CalcTextHeight(v37->pButtonName, &v52, 0, 0); - v34 = pDialogueWindow; + v38 = pFontArrus->CalcTextHeight(pButton->pButtonName, &window, 0, 0); v32 += v38; ++v35; } - v39 = v34->pNumPresenceButton; + v39 = pDialogueWindow->pNumPresenceButton; if ( v39 ) { pOutString = (GUIFont *)((174 - v32) / v39); @@ -713,28 +618,26 @@ pOutString = (GUIFont *)32; int v55 = 1; v40 = 174 - (int)pOutString * v39 - v32; - v41 = v34->pStartingPosActiveItem; + v41 = pDialogueWindow->pStartingPosActiveItem; v42 = v40 / 2 - (signed int)pOutString / 2 + 138; if ( (signed int)v41 < (signed int)(v41 + v39) ) { do { - v43 = v34->GetControl(v41); - if ( !v43 ) + pButton = pDialogueWindow->GetControl(v41); + if ( !pButton ) break; - v43->uY = (unsigned int)((char *)pOutString + v42); - Str = v43->pButtonName; - v44 = pFontArrus->CalcTextHeight(v43->pButtonName, &v52, 0, 0); - v45 = v43->uY; - v46 = (unsigned short *)v55; - v43->uHeight = v44; - v42 = v45 + v44 - 1; - v43->uW = v42; - v47 = ui_game_dialogue_option_highlight_color; - if ( (unsigned __int16 *)pDialogueWindow->pCurrentPosActiveItem != v46 ) - v47 = ui_game_dialogue_option_normal_color; - v52.DrawTitleText(pFontArrus, 0, v45, v47, Str, 3u); - v34 = pDialogueWindow; + pButton->uY = (unsigned int)((char *)pOutString + v42); + Str = pButton->pButtonName; + pTextHeight = pFontArrus->CalcTextHeight(pButton->pButtonName, &window, 0, 0); + v45 = pButton->uY; + pButton->uHeight = pTextHeight; + v42 = v45 + pTextHeight - 1; + pButton->uW = v42; + pTextColor = ui_game_dialogue_option_highlight_color; + if ( pDialogueWindow->pCurrentPosActiveItem != v55 ) + pTextColor = ui_game_dialogue_option_normal_color; + window.DrawTitleText(pFontArrus, 0, v45, pTextColor, Str, 3); ++v55; ++v41; } @@ -744,36 +647,28 @@ pRenderer->DrawTextureIndexed(471, 445, pIcons_LOD->GetTexture(uExitCancelTextureId)); } - - //----- (00444FBE) -------------------------------------------------------- void GameUI_DrawBranchlessDialogue() { - //GUIFont *v0; // esi@1 - int v1; // esi@4 - char *v2; // eax@6 - int v3; // edi@12 + int pTextHeight; // esi@4 char Str[200]; // [sp+Ch] [bp-120h]@12 - GUIWindow v5; // [sp+D4h] [bp-58h]@4 + GUIWindow BranchlessDlg_window; // [sp+D4h] [bp-58h]@4 GUIFont *pFont; // [sp+128h] [bp-4h]@1 pFont = pFontArrus; if ( current_npc_text && !byte_5B0938[0] ) strcpy(byte_5B0938.data(), current_npc_text); - v5.uFrameWidth = game_viewport_width; - v5.uFrameZ = 452; - v1 = pFontArrus->CalcTextHeight(byte_5B0938.data(), &v5, 12, 0) + 7; - if ( 352 - v1 < 8 ) + BranchlessDlg_window.uFrameWidth = game_viewport_width; + BranchlessDlg_window.uFrameZ = 452; + pTextHeight = pFontArrus->CalcTextHeight(byte_5B0938.data(), &BranchlessDlg_window, 12, 0) + 7; + if ( 352 - pTextHeight < 8 ) { pFont = pFontCreate; - v1 = pFontCreate->CalcTextHeight(byte_5B0938.data(), &v5, 12, 0) + 7; + pTextHeight = pFontCreate->CalcTextHeight(byte_5B0938.data(), &BranchlessDlg_window, 12, 0) + 7; } - pRenderer->_4A6A68(8, 352 - v1, - pIcons_LOD->GetTexture(uTextureID_Leather), - pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - v1); - pRenderer->DrawTextureIndexed(8, 347 - v1, pTexture_591428); - v2 = FitTextInAWindow(byte_5B0938.data(), pFont, &v5, 0xCu, 0); - pGUIWindow2->DrawText(pFont, 12, 354 - v1, 0, v2, 0, 0, 0); + pRenderer->GetLeather(8, 352 - pTextHeight, pIcons_LOD->GetTexture(uTextureID_Leather), pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - pTextHeight); + pRenderer->DrawTextureIndexed(8, 347 - pTextHeight, pTexture_591428); + pGUIWindow2->DrawText(pFont, 12, 354 - pTextHeight, 0, FitTextInAWindow(byte_5B0938.data(), pFont, &BranchlessDlg_window, 12, 0), 0, 0, 0); pRenderer->DrawTextureRGB(0, 0x160u, pTexture_StatusBar); if ( pGUIWindow2->receives_keyboard_input_2 != WINDOW_INPUT_IN_PROGRESS) { @@ -781,167 +676,108 @@ { pGUIWindow2->receives_keyboard_input_2 = WINDOW_INPUT_NONE; strcpy(GameUI_Footer_TimedString.data(), (const char *)pKeyActionMap->pPressedKeysBuffer); -LABEL_16: sub_4452BB(); return; } if ( pGUIWindow2->receives_keyboard_input_2 != WINDOW_INPUT_CANCELLED) return; pGUIWindow2->receives_keyboard_input_2 = WINDOW_INPUT_NONE; -LABEL_15: memset(GameUI_Footer_TimedString.data(), 0, 0xC8u); - goto LABEL_16; + sub_4452BB(); + return; } if ( pGUIWindow2->ptr_1C == (void *)26 ) { sprintf(Str, "%s %s", GameUI_Footer_TimedString, pKeyActionMap->pPressedKeysBuffer); - v3 = pFontLucida->GetLineWidth(Str); pGUIWindow2->DrawText(pFontLucida, 13, 357, 0, Str, 0, 0, 0); - pGUIWindow2->DrawFlashingInputCursor(v3 + 13, 357, pFontLucida); + pGUIWindow2->DrawFlashingInputCursor(pFontLucida->GetLineWidth(Str) + 13, 357, pFontLucida); return; } if ( pKeyActionMap->pPressedKeysBuffer[0] ) { pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); - goto LABEL_15; + memset(GameUI_Footer_TimedString.data(), 0, 0xC8u); + sub_4452BB(); + return; } } - //----- (004443D5) -------------------------------------------------------- const char *GameUI_GetMinimapHintText() { - int v0; // ST20_4@1 - unsigned int v1; // esi@1 - signed int v2; // ebx@1 double v3; // st7@1 - int v4; // esi@3 - int v5; // edi@4 - int v6; // eax@4 int v7; // eax@4 - BSPModel *v8; // ecx@4 - unsigned __int8 v9; // zf@5 - char v10; // sf@5 - unsigned __int8 v11; // of@5 - ODMFace *v12; // eax@6 - __int16 v13; // cx@6 + ODMFace *pFace; // eax@6 const char *v14; // eax@8 - const char *v15; // edi@8 char *result; // eax@12 - unsigned int v17; // eax@14 - unsigned int v18; // [sp+Ch] [bp-20h]@1 + unsigned int pMapID; // eax@14 int v19; // [sp+10h] [bp-1Ch]@1 int v20; // [sp+14h] [bp-18h]@1 - char *v21; // [sp+18h] [bp-14h]@1 unsigned int pY; // [sp+1Ch] [bp-10h]@1 - int v23; // [sp+20h] [bp-Ch]@1 - int v24; // [sp+24h] [bp-8h]@1 - int pX; // [sp+28h] [bp-4h]@1 + unsigned int pX; // [sp+28h] [bp-4h]@1 - v24 = pParty->vPosition.x; - v0 = pParty->vPosition.y; - v1 = pOutdoor->uNumBModels; - *(float *)&v23 = (double)(signed int)viewparams->uMinimapZoom * 0.000015258789; - v2 = 0; - v18 = pOutdoor->uNumBModels; - v21 = 0; - pMouse->GetClickPos((unsigned int *)&pX, &pY); - v3 = 1.0 / *(float *)&v23; - v23 = pX - 557; - v19 = (signed __int64)((double)(pX - 557) * v3 + (double)v24); - v20 = (signed __int64)((double)v0 - (double)(signed int)(pY - 74) * v3); - if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor || (*(float *)&v23 = 0.0, (signed int)v1 <= 0) ) + result = 0; + pMouse->GetClickPos(&pX, &pY); + v3 = 1.0 / (float)((signed int)viewparams->uMinimapZoom * 0.000015258789); + v19 = (signed __int64)((double)(pX - 557) * v3 + (double)pParty->vPosition.x); + v20 = (signed __int64)((double)pParty->vPosition.y - (double)(pY - 74) * v3); + if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor || pOutdoor->uNumBModels <= 0 ) { -LABEL_14: - v17 = pMapStats->GetMapInfo(pCurrentMapName); - if ( v17 == v2 ) + pMapID = pMapStats->GetMapInfo(pCurrentMapName); + if ( pMapID == 0 ) result = "No Maze Info for this maze on file!"; else - result = pMapStats->pInfos[v17].pName; + result = pMapStats->pInfos[pMapID].pName; } else { - v4 = 0; - while ( 1 ) + for ( uint j = 0; j < (signed int)pOutdoor->uNumBModels; ++j ) { - pX = pOutdoor->pBModels[v4].vBoundingCenter.x - v19; - pY = pOutdoor->pBModels[v4].vBoundingCenter.y - v20; - v5 = abs((signed)pY); - v6 = abs((signed)pX); - v7 = int_get_vector_length(v6, v5, v2); - v8 = &pOutdoor->pBModels[0]; - if ( v7 < 2 * pOutdoor->pBModels[v4].sBoundingRadius ) + v7 = int_get_vector_length(abs((signed)pOutdoor->pBModels[j].vBoundingCenter.x - v19), + abs((signed)pOutdoor->pBModels[j].vBoundingCenter.y - v20), 0); + if ( v7 < 2 * pOutdoor->pBModels[j].sBoundingRadius ) { - v11 = __OFSUB__(pOutdoor->pBModels[v4].uNumFaces, v2); - v9 = pOutdoor->pBModels[v4].uNumFaces == v2; - v10 = ((pOutdoor->pBModels[v4].uNumFaces - v2) & 0x80000000u) != 0; - v24 = v2; - if ( !((unsigned __int8)(v10 ^ v11) | v9) ) + if ( pOutdoor->pBModels[j].uNumFaces ) { - do + for ( uint i = 0; i < (signed int)pOutdoor->pBModels[j].uNumFaces; ++i ) { - v12 = &v8[v4].pFaces[v2 / 0x134u]; - v13 = v12->sCogTriggeredID; - if ( v13 ) + pFace = &pOutdoor->pBModels[j].pFaces[i]; + if ( pFace->sCogTriggeredID ) { - if ( !(BYTE2(v12->uAttributes) & 0x10) ) + if ( !(BYTE2(pFace->uAttributes) & 0x10) ) { - v14 = GetEventHintString(v13); - v15 = v14; + v14 = GetEventHintString(pFace->sCogTriggeredID); if ( v14 ) { if ( _stricmp(v14, "") ) - v21 = (char *)v15; + result = (char *)v14; } } } - ++v24; - v8 = pOutdoor->pBModels; - v2 += 308; } - while ( v24 < (signed int)pOutdoor->pBModels[v4].uNumFaces ); } - result = v21; - v2 = 0; - if ( v21 ) - break; + if ( result ) + return result; } - ++v23; - ++v4; - if ( v23 >= (signed int)v18 ) - goto LABEL_14; } + pMapID = pMapStats->GetMapInfo(pCurrentMapName); + if ( pMapID == 0 ) + result = "No Maze Info for this maze on file!"; + else + result = pMapStats->pInfos[pMapID].pName; + return result; } return result; } - - - - //----- (0041D3B7) -------------------------------------------------------- void GameUI_CharacterQuickRecord_Draw(GUIWindow *window, Player *player) { - //Player *pPlayer; // esi@1 - int v6; // eax@5 - int v7; // ebx@5 - //unsigned int v8; // ecx@5 - int v9; // ebx@5 - //unsigned int v10; // eax@5 - //int v11; // eax@5 - //unsigned int v12; // ecx@5 Texture *v13; // eax@6 - unsigned int v14; // eax@12 PlayerFrame *v15; // eax@12 - //unsigned int v16; // eax@15 - unsigned int v20; // eax@15 - unsigned int v24; // eax@15 - unsigned int v25; // eax@15 - unsigned __int8 v28; // al@15 + unsigned int pTextColor; // eax@15 char *v29; // eax@16 - __int64 v35; // ST38_8@22 int v36; // esi@22 - unsigned int v38; // eax@22 char *v39; // eax@24 signed int uFramesetID; // [sp+20h] [bp-8h]@9 int uFramesetIDa; // [sp+20h] [bp-8h]@18 @@ -951,12 +787,9 @@ if (player->pPlayerBuffs[i].uExpireTime > 0) ++numActivePlayerBuffs; - v6 = pFontArrus->uFontHeight + 162; - v7 = (numActivePlayerBuffs - 1) * pFontArrus->uFontHeight; - v9 = v6 + v7; - window->uFrameHeight = v9; + window->uFrameHeight = ((pFontArrus->uFontHeight + 162) + ((numActivePlayerBuffs - 1) * pFontArrus->uFontHeight)); window->uFrameZ = window->uFrameWidth + window->uFrameX - 1; - window->uFrameW = v9 + window->uFrameY - 1; + window->uFrameW = ((pFontArrus->uFontHeight + 162) + ((numActivePlayerBuffs - 1) * pFontArrus->uFontHeight)) + window->uFrameY - 1; window->DrawMessageBox(0); if (player->IsEradicated()) @@ -969,14 +802,9 @@ if ( !uFramesetID ) uFramesetID = 1; if ( player->expression == CHARACTER_EXPRESSION_21) - { v15 = pPlayerFrameTable->GetFrameBy_y(&player->_expression21_frameset, &player->_expression21_animtime, pMiscTimer->uTimeElapsed); - } else - { - v14 = pMiscTimer->Time(); - v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, v14); - } + v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, pMiscTimer->Time()); player->field_1AA2 = v15->uTextureID - 1; v13 = pTextures_PlayerFaces[(unsigned int)window->ptr_1C][v15->uTextureID - 1]; } @@ -988,27 +816,23 @@ strcat(pTmpBuf.data(), pTmpBuf2.data()); strcat(pTmpBuf.data(), "\f00000\n"); - v20 = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); - sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", - pGlobalTXT_LocalizationStrings[108], // "Hit Points" - v20, player->sHealth, player->GetMaxHealth()); + pTextColor = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); + sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", pGlobalTXT_LocalizationStrings[108], // "Hit Points" + pTextColor, player->sHealth, player->GetMaxHealth()); strcat(pTmpBuf.data(), pTmpBuf2.data()); - v24 = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); - sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", - pGlobalTXT_LocalizationStrings[212], // "Spell Points" - v24, player->sMana, player->GetMaxMana()); + pTextColor = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); + sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", pGlobalTXT_LocalizationStrings[212], // "Spell Points" + pTextColor, player->sMana, player->GetMaxMana()); strcat(pTmpBuf.data(), pTmpBuf2.data()); - v25 = player->GetMajorConditionIdx(); - sprintfex(pTmpBuf2.data(), "%s: \f%05d%s\f00000\n", - pGlobalTXT_LocalizationStrings[47], // "Condition - GetConditionDrawColor(v25), aCharacterConditionNames[v25]); + pTextColor = player->GetMajorConditionIdx(); + sprintfex(pTmpBuf2.data(), "%s: \f%05d%s\f00000\n", pGlobalTXT_LocalizationStrings[47], // "Condition + GetConditionDrawColor(pTextColor), aCharacterConditionNames[pTextColor]); strcat(pTmpBuf.data(), pTmpBuf2.data()); - v28 = player->uQuickSpell; - if ( v28 ) - v29 = pSpellStats->pInfos[v28].pShortName; + if ( player->uQuickSpell ) + v29 = pSpellStats->pInfos[player->uQuickSpell].pShortName; else v29 = pGlobalTXT_LocalizationStrings[153]; sprintfex(pTmpBuf2.data(), "%s: %s", pGlobalTXT_LocalizationStrings[172], v29); // "Quick Spell" @@ -1022,11 +846,9 @@ auto buff = player->pPlayerBuffs + i; if (buff->uExpireTime > 0) { - v35 = buff->uExpireTime - pParty->uTimePlayed; v36 = uFramesetIDa++ * pFontComic->uFontHeight + 134; - v38 = ui_game_character_record_playerbuff_colors[i]; - window->DrawText(pFontComic, 52, v36, v38, aSpellNames[20 + i], 0, 0, 0); - sub_41D20D_buff_remaining_time_string(v36, window, v35, pFontComic); + window->DrawText(pFontComic, 52, v36, ui_game_character_record_playerbuff_colors[i], aSpellNames[20 + i], 0, 0, 0); + sub_41D20D_buff_remaining_time_string(v36, window, buff->uExpireTime - pParty->uTimePlayed, pFontComic); } } @@ -1037,186 +859,119 @@ window->DrawText(pFontArrus, 14, 114, 0, pTmpBuf.data(), 0, 0, 0); } - - //----- (0041A57E) -------------------------------------------------------- void GameUI_QuickRef_Draw() { - //unsigned int v0; // ebx@1 - //unsigned int v1; // eax@1 - //Player *pPlayer; // ebp@2 - //int v3; // eax@6 - //int v4; // edi@6 - unsigned int v5; // eax@7 - unsigned int v6; // edi@9 - unsigned int v7; // edi@11 - //signed int v8; // eax@13 - unsigned int v9; // eax@13 - unsigned int v10; // edi@13 - //int v11; // eax@15 - unsigned int v12; // eax@15 - unsigned int v13; // edi@15 - //int v14; // eax@17 - //int v15; // ST18_4@17 - //int v16; // ebx@17 - //int v17; // eax@17 - unsigned int v18; // eax@17 - unsigned int v19; // edi@17 - //int v20; // eax@19 - unsigned int v21; // edi@19 - char *v22; // eax@21 - unsigned int v23; // edi@21 - //int v24; // eax@23 - unsigned int v25; // edi@23 - char *v26; // eax@25 - unsigned int v27; // edi@25 - int v28; // ecx@27 - char *v29; // eax@27 - signed int v30; // edx@27 - unsigned int v31; // edi@31 - unsigned int v32; // edi@33 - const char *v33; // ST10_4@35 - unsigned int v34; // eax@35 - unsigned int v35; // edi@35 - //unsigned __int8 v36; // al@37 - char *v37; // eax@38 - int v38; // eax@41 - signed int v39; // edi@42 - //char *v40; // eax@45 - //unsigned int v41; // eax@45 - signed int v43; // [sp+10h] [bp-1Ch]@1 - unsigned int v44; // [sp+14h] [bp-18h]@2 - int v45; // [sp+18h] [bp-14h]@1 - //unsigned int v46; // [sp+1Ch] [bp-10h]@1 - //unsigned int v47; // [sp+20h] [bp-Ch]@1 - unsigned int v48; // [sp+24h] [bp-8h]@33 - //unsigned int v49; // [sp+28h] [bp-4h]@1 + unsigned int pTextColor; // eax@7 + unsigned int pX; // [sp+14h] [bp-18h]@2 + unsigned int pY; // edi@9 + int pSkillsCount; // ecx@27 + char *pText; // eax@38 + int pFontHeight; // [sp+18h] [bp-14h]@1 - //v0 = 0; - //v47 = TargetColor(0xFFu, 0xFFu, 0x9Bu); - //v49 = TargetColor(0xFFu, 0, 0); - //v46 = TargetColor(0, 0xFFu, 0); - //v1 = pIcons_LOD->LoadTexture("quikref", TEXTURE_16BIT_PALETTE); pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("quikref", TEXTURE_16BIT_PALETTE)); - v43 = 0; - v45 = LOBYTE(pFontArrus->uFontHeight) + 1; - do - { - auto player = &pParty->pPlayers[v43]; - v44 = 94 * v43 + 89; - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x12u, 0, pGlobalTXT_LocalizationStrings[149], 60, 0);//Name - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 94 * v43 + 89, 0x12u, ui_character_header_text_color, player->pName, 84, 0); - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x2Fu, 0, pGlobalTXT_LocalizationStrings[131], 60, 0); //Уров. - sprintf(pTmpBuf.data(), "%lu", player->GetActualLevel()); - if ( player->GetActualLevel() <= player->GetBaseLevel()) - v5 = player->GetExperienceDisplayColor(); - else - v5 = ui_character_bonus_text_color; - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, 0x2Fu, v5, pTmpBuf.data(), 84, 0); - v6 = v45 + 47; - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v45 + 47, 0, pGlobalTXT_LocalizationStrings[41], 60, 0);//Класс - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v6, 0, pClassNames[player->classType], 84, 0); - v7 = v45 + v6; - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v7, 0, pGlobalTXT_LocalizationStrings[107], 60, 0);//Здор. - sprintf(pTmpBuf.data(), "%d", player->sHealth); - v9 = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf.data(), 84, 0); - v10 = v45 + v7; - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v10, 0, pGlobalTXT_LocalizationStrings[209], 60, 0);//Мана - sprintf(pTmpBuf.data(), "%d", player->sMana); - v12 = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf.data(), 84, 0); - v13 = v45 + v10; - if ( v43 == 0 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v13, 0, pGlobalTXT_LocalizationStrings[0], 60, 0);//Класс брони - sprintf(pTmpBuf.data(), "%d", player->GetActualAC()); - v18 = UI_GetHealthManaStringColor(player->GetActualAC(), player->GetBaseAC()); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf.data(), 84, 0); - v19 = v45 + v13; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v19, 0, pGlobalTXT_LocalizationStrings[18], 60, 0);//Атака - sprintf(pTmpBuf.data(), "%+d", player->GetActualAttack(0)); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v19, 0, pTmpBuf.data(), 84, 0); - v21 = v45 + v19; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v21, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр. - v22 = player->GetMeleeDamageString(); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v21, 0, v22, 84, 0); - v23 = v45 + v21; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v23, 0, pGlobalTXT_LocalizationStrings[203], 60, 0);// Стрелять - sprintf(pTmpBuf.data(), "%+d", player->GetRangedAttack()); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v23, 0, pTmpBuf.data(), 84, 0); - v25 = v45 + v23; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v25, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр. - v26 = player->GetRangedDamageString(); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v25, 0, v26, 84, 0); - v27 = v45 + v25; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v27, 0, pGlobalTXT_LocalizationStrings[205], 60, 0);//Навыки - v28 = 0; - v29 = (char *)player->pActiveSkills; - v30 = 36; - do - { - if ( *(short *)v29 ) - ++v28; - v29 += 2; - --v30; - } - while ( v30 ); - sprintf(pTmpBuf.data(), "%lu", v28); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v27, 0, pTmpBuf.data(), 84, 0); - v31 = v45 + v27; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v31, 0, pGlobalTXT_LocalizationStrings[168], 60, 0);//Очки - sprintf(pTmpBuf.data(), "%lu", player->uSkillPoints); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v31, player->uSkillPoints ? ui_character_bonus_text_color : ui_character_default_text_color, pTmpBuf.data(), 84, 0); - v32 = v45 + v31; - v48 = player->GetMajorConditionIdx(); - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v32, 0, pGlobalTXT_LocalizationStrings[45], 60, 0);//Сост. - v33 = aCharacterConditionNames[v48]; - v34 = GetConditionDrawColor(v48); - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v32, v34, v33, 84, 0); - v35 = v45 + v32; - if ( !v43 ) - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v35, 0, pGlobalTXT_LocalizationStrings[170], 60, 0);//Б.Прим. - if (player->uQuickSpell) - v37 = pSpellStats->pInfos[player->uQuickSpell].pShortName; - else - v37 = pGlobalTXT_LocalizationStrings[153];//Нет - pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v35, 0, v37, 84, 0); - ++v43; - } - while ( v43 < 4 ); + pFontHeight = LOBYTE(pFontArrus->uFontHeight) + 1; + for ( uint i = 0; i < 4; ++i ) + { + auto player = &pParty->pPlayers[i]; + pX = 94 * i + 89; + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, 18, 0, pGlobalTXT_LocalizationStrings[149], 60, 0);//Name + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 94 * i + 89, 18, ui_character_header_text_color, player->pName, 84, 0); + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, 47, 0, pGlobalTXT_LocalizationStrings[131], 60, 0); //Уров. + sprintf(pTmpBuf.data(), "%lu", player->GetActualLevel()); + if ( player->GetActualLevel() <= player->GetBaseLevel()) + pTextColor = player->GetExperienceDisplayColor(); + else + pTextColor = ui_character_bonus_text_color; + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, 47, pTextColor, pTmpBuf.data(), 84, 0); + pY = pFontHeight + 47; + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pFontHeight + 47, 0, pGlobalTXT_LocalizationStrings[41], 60, 0);//Класс + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, pClassNames[player->classType], 84, 0); + pY = pFontHeight + pY; + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[107], 60, 0);//Здор. + sprintf(pTmpBuf.data(), "%d", player->sHealth); + pTextColor = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, pTextColor, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[209], 60, 0);//Мана + sprintf(pTmpBuf.data(), "%d", player->sMana); + pTextColor = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, pTextColor, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( i == 0 ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[0], 60, 0);//Класс брони + sprintf(pTmpBuf.data(), "%d", player->GetActualAC()); + pTextColor = UI_GetHealthManaStringColor(player->GetActualAC(), player->GetBaseAC()); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, pTextColor, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[18], 60, 0);//Атака + sprintf(pTmpBuf.data(), "%+d", player->GetActualAttack(0)); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр. + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, player->GetMeleeDamageString(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[203], 60, 0);// Стрелять + sprintf(pTmpBuf.data(), "%+d", player->GetRangedAttack()); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр. + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, player->GetRangedDamageString(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[205], 60, 0);//Навыки + pSkillsCount = 0; + for ( uint j = 0; j <= 36; ++j ) + { + if ( player->pActiveSkills[j] ) + ++pSkillsCount; + } + sprintf(pTmpBuf.data(), "%lu", pSkillsCount); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[168], 60, 0);//Очки + sprintf(pTmpBuf.data(), "%lu", player->uSkillPoints); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, player->uSkillPoints ? ui_character_bonus_text_color : ui_character_default_text_color, pTmpBuf.data(), 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[45], 60, 0);//Сост. + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, pTextColor, aCharacterConditionNames[player->GetMajorConditionIdx()], 84, 0); + pY = pFontHeight + pY; + if ( !i ) + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 22, pY, 0, pGlobalTXT_LocalizationStrings[170], 60, 0);//Б.Прим. + if (player->uQuickSpell) + pText = pSpellStats->pInfos[player->uQuickSpell].pShortName; + else + pText = pGlobalTXT_LocalizationStrings[153];//Нет + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, pX, pY, 0, pText, 84, 0); + } - v38 = GetPartyReputation(); - if ( v38 >= 0 ) - { - if ( v38 <= 5 ) - v39 = ui_character_default_text_color; - else - v39 = ui_character_bonus_text_color_neg; - } - else - v39 = ui_character_bonus_text_color; + if ( GetPartyReputation() >= 0 ) + { + if ( GetPartyReputation() <= 5 ) + pTextColor = ui_character_default_text_color; + else + pTextColor = ui_character_bonus_text_color_neg; + } + else + pTextColor = ui_character_bonus_text_color; - sprintf(pTmpBuf.data(), "%s: \f%05d%s\f00000", pGlobalTXT_LocalizationStrings[180], v39, GetReputationString(v38));//Reputation - pGUIWindow_CurrentMenu->DrawText(pFontArrus, 22, 323, 0, pTmpBuf.data(), 0, 0, 0); - - sprintf(pTmpBuf.data(), "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], pParty->GetPartyFame());// Fame Слава - pGUIWindow_CurrentMenu->DrawText(pFontArrus, 0, 323, 0, pTmpBuf.data(), 0, 0, 0); + sprintf(pTmpBuf.data(), "%s: \f%05d%s\f00000", pGlobalTXT_LocalizationStrings[180], pTextColor, GetReputationString(GetPartyReputation()));//Reputation + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 22, 323, 0, pTmpBuf.data(), 0, 0, 0); + sprintf(pTmpBuf.data(), "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], pParty->GetPartyFame());// Fame Слава + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 0, 323, 0, pTmpBuf.data(), 0, 0, 0); } - - //----- (0041AD6E) -------------------------------------------------------- void GameUI_DrawRightPanelItems() { @@ -1258,69 +1013,52 @@ } } - //----- (0041B0C9) -------------------------------------------------------- void GameUI_DrawLifeManaBars() { double v3; // st7@3 double v7; // st7@25 - Texture *v9; // [sp-4h] [bp-30h]@10 - Texture *v10; // [sp+Ch] [bp-20h]@1 + Texture *pTextureHealth; // [sp-4h] [bp-30h]@10 + Texture *pTextureMana; // [sp+Ch] [bp-20h]@1 - - v10 = pIcons_LOD->GetTexture(uTextureID_BarBlue); - + pTextureMana = pIcons_LOD->GetTexture(uTextureID_BarBlue); for (uint i = 0; i < 4; ++i) { - auto player = pParty->pPlayers + i; - - if (player->sHealth > 0) - { + if (pParty->pPlayers[i].sHealth > 0) + { int v17 = 0; if (i == 2 || i == 3) v17 = 2; - - v3 = (double)player->sHealth / (double)player->GetMaxHealth(); + v3 = (double)pParty->pPlayers[i].sHealth / (double)pParty->pPlayers[i].GetMaxHealth(); if( v3 > 0.5 ) { if ( v3 > 1.0 ) v3 = 1.0; - v9 = pIcons_LOD->GetTexture(uTextureID_BarGreen); + pTextureHealth = pIcons_LOD->GetTexture(uTextureID_BarGreen); } else if ( v3 > 0.25 ) - v9 = pIcons_LOD->GetTexture(uTextureID_BarYellow); + pTextureHealth = pIcons_LOD->GetTexture(uTextureID_BarYellow); else if ( v3 > 0.0 ) - v9 = pIcons_LOD->GetTexture(uTextureID_BarRed); - - - if( v3 > 0.0 ) - { - pRenderer->SetTextureClipRect(v17 + pHealthBarPos[i], - (signed __int64)((1.0 - v3) * v9->uTextureHeight) + 402, - v17 + pHealthBarPos[i] + v9->uTextureWidth, - v9->uTextureHeight + 402); - - pRenderer->DrawTextureIndexed(v17 + pHealthBarPos[i], 402, v9); - pRenderer->ResetTextureClipRect(); - } - } - - - if (player->sMana > 0) + pTextureHealth = pIcons_LOD->GetTexture(uTextureID_BarRed); + if( v3 > 0.0 ) + { + pRenderer->SetTextureClipRect(v17 + pHealthBarPos[i], (signed __int64)((1.0 - v3) * pTextureHealth->uTextureHeight) + 402, + v17 + pHealthBarPos[i] + pTextureHealth->uTextureWidth, pTextureHealth->uTextureHeight + 402); + pRenderer->DrawTextureIndexed(v17 + pHealthBarPos[i], 402, pTextureHealth); + pRenderer->ResetTextureClipRect(); + } + } + if (pParty->pPlayers[i].sMana > 0) { - v7 = player->sMana / (double)player->GetMaxMana(); + v7 = pParty->pPlayers[i].sMana / (double)pParty->pPlayers[i].GetMaxMana(); if ( v7 > 1.0 ) v7 = 1.0; - int v17 = 0; if (i == 2) v17 = 1; - - pRenderer->SetTextureClipRect(v17 + pManaBarPos[i], - (signed __int64)((1.0 - v7) * v10->uTextureHeight) + 402, - v17 + pManaBarPos[i] + v10->uTextureWidth, - v10->uTextureHeight + 402); - pRenderer->DrawTextureIndexed(v17 + pManaBarPos[i], 402, v10); + pRenderer->SetTextureClipRect(v17 + pManaBarPos[i], (signed __int64)((1.0 - v7) * pTextureMana->uTextureHeight) + 402, + v17 + pManaBarPos[i] + pTextureMana->uTextureWidth, pTextureMana->uTextureHeight + 402); + pRenderer->DrawTextureIndexed(v17 + pManaBarPos[i], 402, pTextureMana); pRenderer->ResetTextureClipRect(); } } @@ -1329,8 +1067,7 @@ //----- (0041B3B6) -------------------------------------------------------- void GameUI_DrawRightPanel() { - pRenderer->DrawTextureTransparent(pViewport->uViewportBR_X, 0, - pIcons_LOD->GetTexture(uTextureID_right_panel)); + pRenderer->DrawTextureTransparent(pViewport->uViewportBR_X, 0, pIcons_LOD->GetTexture(uTextureID_right_panel)); } //----- (0041B3E2) -------------------------------------------------------- @@ -1344,12 +1081,11 @@ GameUI_DrawRightPanelItems(); } - //----- (0041C047) -------------------------------------------------------- void GameUI_Footer_2() { - char *v1; // edx@2 - int v5; // eax@5 + char *v1; // edx@2 + int v5; // eax@5 pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar); if (GameUI_Footer_TimeLeft) @@ -1368,88 +1104,64 @@ //----- (0041C0B8) -------------------------------------------------------- void GameUI_SetFooterString(const char *pStr) { - const char *v1; // esi@1 - int i; // eax@7 - int j; // eax@11 + const char *v1; // esi@1 - v1 = pStr; - if ( pStr && strcmp(pStr, "test") && !IsBadStringPtrA(v1, 1) && (*v1 || GameUI_Footer_TimeLeft) ) - { - if ( GameUI_Footer_TimeLeft ) - { - for ( i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); - i > 450; - i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()) ) - GameUI_Footer_TimedString[strlen(GameUI_Footer_TimedString.data()) - 1] = 0; - } - else - { - strcpy(pFooterString.data(), v1); - for ( j = pFontLucida->GetLineWidth(pFooterString.data()); - j > 450; - j = pFontLucida->GetLineWidth(pFooterString.data()) ) - pFooterString[strlen(pFooterString.data()) - 1] = 0; - } - } + v1 = pStr; + if ( pStr && strcmp(pStr, "test") && !IsBadStringPtrA(pStr, 1) && (*v1 || GameUI_Footer_TimeLeft) ) + { + if ( GameUI_Footer_TimeLeft ) + { + for ( int i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); i > 450; i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()) ) + GameUI_Footer_TimedString[strlen(GameUI_Footer_TimedString.data()) - 1] = 0; } + else + { + strcpy(pFooterString.data(), v1); + for ( int j = pFontLucida->GetLineWidth(pFooterString.data()); j > 450; j = pFontLucida->GetLineWidth(pFooterString.data()) ) + pFooterString[strlen(pFooterString.data()) - 1] = 0; + } + } +} //----- (0041C179) -------------------------------------------------------- void GameUI_Footer() { - //unsigned int v0; // ebp@1 - char *v1; // edi@5 - int v2; // eax@5 - unsigned int v3; // esi@5 - size_t v4; // eax@6 - GUIFont *v5; // ecx@6 - int v6; // eax@9 - size_t v7; // eax@10 - GUIFont *v8; // ecx@10 - char v9; // zf@12 - //unsigned int v10; // ST08_4@13 - int v11; // eax@13 + char *v1; // edi@5 + int v2; // eax@5 + int v6; // eax@9 + char v9; // zf@12 - if ( pFooterString[0] || GameUI_Footer_TimeLeft || bForceDrawFooter ) - { - pRenderer->DrawTextureRGB(0, 352u, pTexture_StatusBar); - if ( GameUI_Footer_TimeLeft ) - { - v1 = GameUI_Footer_TimedString.data(); - v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); - v3 = 450; - while ( v2 > 450 ) - { - v4 = strlen(GameUI_Footer_TimedString.data()); - v5 = pFontLucida; - GameUI_Footer_TimedString[v4 - 1] = 0; - v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); - } - } - else - { - v1 = pFooterString.data(); - v6 = pFontLucida->GetLineWidth(pFooterString.data()); - v3 = 450; - while ( v6 > 450 ) - { - v7 = strlen(pFooterString.data()); - v8 = pFontLucida; - pFooterString[v7 - 1] = 0; - v6 = pFontLucida->GetLineWidth(pFooterString.data()); - } - } - v9 = *v1 == 0; - bForceDrawFooter = 0; - if ( !v9 ) - { - v11 = pFontLucida->AlignText_Center(v3, v1); - pPrimaryWindow->DrawText(pFontLucida, v11 + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow); - } - } + if ( pFooterString[0] || GameUI_Footer_TimeLeft || bForceDrawFooter ) + { + pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar); + if ( GameUI_Footer_TimeLeft ) + { + v1 = GameUI_Footer_TimedString.data(); + v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); + while ( v2 > 450 ) + { + GameUI_Footer_TimedString[strlen(GameUI_Footer_TimedString.data()) - 1] = 0; + v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); + } } + else + { + v1 = pFooterString.data(); + v6 = pFontLucida->GetLineWidth(pFooterString.data()); + while ( v6 > 450 ) + { + pFooterString[strlen(pFooterString.data()) - 1] = 0; + v6 = pFontLucida->GetLineWidth(pFooterString.data()); + } + } + v9 = *v1 == 0; + bForceDrawFooter = 0; + if ( !v9 ) + pPrimaryWindow->DrawText(pFontLucida, pFontLucida->AlignText_Center(450, v1) + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow); + } +} // 5C35BC: using guessed type int bForceDrawFooter; - //----- (00420EFF) -------------------------------------------------------- void GameUI_WritePointedObjectStatusString() { @@ -1464,7 +1176,6 @@ unsigned __int8 v9; // c0@23 unsigned __int8 v10; // c3@23 enum UIMessageType pMessageType1; // esi@24 - //int v12; // edx@25 char *v13; // ecx@28 int v14; // eax@41 ItemGen *pItemGen; // ecx@44 @@ -1486,12 +1197,8 @@ signed int v30; // ecx@88 const char *v31; // eax@91 __int16 v32; // fps@109 - //unsigned __int8 v33; // c0@109 - //unsigned __int8 v34; // c3@109 enum UIMessageType pMessageType2; // esi@110 - //int v36; // edx@111 enum UIMessageType pMessageType3; // edx@117 - //int v38; // ecx@118 const char *v39; // [sp-8h] [bp-E8h]@20 char *v40; // [sp-8h] [bp-E8h]@83 int v41; // [sp-4h] [bp-E4h]@20 @@ -1501,7 +1208,6 @@ unsigned int v45; // [sp+DCh] [bp-4h]@21 v13 = nullptr; - pMouse->uPointingObjectID = 0; pMouse->GetClickPos(&pX, &pY); if ( pX < 0 || (signed int)pX > 639 || pY < 0 || (signed int)pY > 479 )//( (pX & 0x80000000u) != 0 || (signed int)pX > 639 || (pY & 0x80000000u) != 0 || (signed int)pY > 479 ) @@ -1519,7 +1225,6 @@ || (signed int)pY > (signed int)pViewport->uScreen_BR_Y ) v18 = -1; if ( v18 == -1 ) - //goto LABEL_61; { pMouse->uPointingObjectID = 0; if ( pMouse->uPointingObjectID == 0 ) @@ -1544,10 +1249,8 @@ { v30 = v19; if ( pObjectList->pObjects[pSpriteObjects[v30].uObjectDescID].uFlags & 0x10 ) - //goto LABEL_73; { pMouse->uPointingObjectID = 0; - //goto LABEL_50; uLastPointedObjectID = 1; if ( pMouse->uPointingObjectID == 0 ) { @@ -1563,9 +1266,7 @@ if ( v18 >= (signed int)0x2000000u || pParty->pPickedItem.uItemID ) { v22 = pSpriteObjects[v30].stru_24.GetDisplayName(); -//LABEL_93: v26 = v22; - //goto LABEL_87; GameUI_SetFooterString(v26); if ( pMouse->uPointingObjectID == 0 ) { @@ -1597,7 +1298,6 @@ v26 = pNPCTopics[stru_5E4C90._decor_events[v24->_idx_in_stru123 - 75] + 379].pTopic; else v26 = pDecorationList->pDecorations[v24->uDecorationDescID].field_20; - //goto LABEL_87; GameUI_SetFooterString(v26); if ( pMouse->uPointingObjectID == 0 ) { @@ -1612,7 +1312,6 @@ } v22 = GetEventHintString(v25); if ( !v22 ) - //goto _return; { if ( pMouse->uPointingObjectID == 0 ) { @@ -1625,9 +1324,7 @@ uLastPointedObjectID = pMouse->uPointingObjectID; return; } - //goto LABEL_93; v26 = v22; - //goto LABEL_87; GameUI_SetFooterString(v26); if ( pMouse->uPointingObjectID == 0 ) { @@ -1648,12 +1345,9 @@ { v18b = (signed int)(unsigned __int16)v18 >> 9; v21 = pOutdoor->pBModels[v18b].pFaces[v19 & 0x3F].sCogTriggeredID; - //goto LABEL_71; if ( !v21 || (v22 = GetEventHintString(v21)) == 0 ) - //goto LABEL_73; { pMouse->uPointingObjectID = 0; - //goto LABEL_50; uLastPointedObjectID = 1; if ( pMouse->uPointingObjectID == 0 ) { @@ -1666,9 +1360,7 @@ uLastPointedObjectID = pMouse->uPointingObjectID; return; } - //goto LABEL_93; v26 = v22; - //goto LABEL_87; GameUI_SetFooterString(v26); if ( pMouse->uPointingObjectID == 0 ) { @@ -1685,12 +1377,9 @@ if ( BYTE3(pFace->uAttributes) & 6 ) { v21 = pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID; -//LABEL_71: if ( !v21 || (v22 = GetEventHintString(v21)) == 0 ) - //goto LABEL_73; { pMouse->uPointingObjectID = 0; - //goto LABEL_50; uLastPointedObjectID = 1; if ( pMouse->uPointingObjectID == 0 ) { @@ -1703,9 +1392,7 @@ uLastPointedObjectID = pMouse->uPointingObjectID; return; } - //goto LABEL_93; v26 = v22; - //goto LABEL_87; GameUI_SetFooterString(v26); if ( pMouse->uPointingObjectID == 0 ) { @@ -1719,9 +1406,7 @@ return; } } -//LABEL_73: pMouse->uPointingObjectID = 0; - //goto LABEL_50; uLastPointedObjectID = 1; if ( pMouse->uPointingObjectID == 0 ) { @@ -1734,9 +1419,7 @@ uLastPointedObjectID = pMouse->uPointingObjectID; return; } -//LABEL_61: pMouse->uPointingObjectID = 0; - //goto _return; if ( pMouse->uPointingObjectID == 0 ) { if ( uLastPointedObjectID != 0 ) @@ -1749,7 +1432,6 @@ return; } if ( v18 >= 335544320 ) - //goto LABEL_61; { pMouse->uPointingObjectID = 0; if ( pMouse->uPointingObjectID == 0 ) @@ -1773,9 +1455,7 @@ strncpy(pTmpBuf.data(), v40, 0x7D0u); } v26 = v28; -//LABEL_87: GameUI_SetFooterString(v26); - //goto _return; if ( pMouse->uPointingObjectID == 0 ) { if ( uLastPointedObjectID != 0 ) @@ -1809,17 +1489,13 @@ && (signed int)pY >= (signed int)pButton->uY && (signed int)pY <= (signed int)pButton->uW ) { - //LABEL_24: pMessageType1 = (UIMessageType)pButton->field_1C; if ( pMessageType1 ) { pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0); } - //LABEL_28: v13 = pButton->pButtonName; - //_set_status_and_ret: GameUI_SetFooterString(v13); - //LABEL_131: uLastPointedObjectID = 1; return; } @@ -1855,7 +1531,6 @@ && (signed int)pY >= (signed int)pButton->uY && (signed int)pY <= (signed int)pButton->uW ) { - //LABEL_19: pPlayer = pPlayers[uActiveCharacter]; v5 = LOBYTE(pPlayer->pActiveSkills[pButton->msg_param]); v6 = pPlayer->uSkillPoints; @@ -1872,7 +1547,6 @@ } sprintf(Str1, v39, v41); v13 = Str1; - //goto _set_status_and_ret; GameUI_SetFooterString(v13); uLastPointedObjectID = 1; return; @@ -1895,7 +1569,6 @@ if ( pCurrentScreen == SCREEN_CHEST ) { ChestUI_WritePointedObjectStatusString(); - //goto _return; if ( pMouse->uPointingObjectID == 0 ) { if ( uLastPointedObjectID != 0 ) @@ -1912,7 +1585,6 @@ if ( dialog_menu_id != HOUSE_DIALOGUE_SHOP_BUY_STANDARD || (v16 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]], v16 == 0) || v16 == -65536 ) - //goto _return; { if ( pMouse->uPointingObjectID == 0 ) { @@ -1926,12 +1598,9 @@ return; } pItemGen = (ItemGen *)((char *)&pParty->pPickedItem + 36 * (v16 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 4); -//LABEL_49: v17 = pItemGen->GetDisplayName(); GameUI_SetFooterString(v17); -//LABEL_50: uLastPointedObjectID = 1; -//_return: if ( pMouse->uPointingObjectID == 0 ) { if ( uLastPointedObjectID != 0 ) @@ -1947,7 +1616,6 @@ { v14 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; if ( v14 == 0 || v14 == -65536 || (unsigned int)v14 >= 0x1388 ) - //goto _return; { if ( pMouse->uPointingObjectID == 0 ) { @@ -1961,7 +1629,6 @@ return; } pItemGen = (ItemGen *)&pPlayers[uActiveCharacter]->pInventoryItemList[v14-1]; - //goto LABEL_49; v17 = pItemGen->GetDisplayName(); GameUI_SetFooterString(v17); uLastPointedObjectID = 1; @@ -1993,7 +1660,6 @@ { pMessageType3 = (UIMessageType)pButton->field_1C; if ( pMessageType3 == 0 ) // For books - //goto LABEL_28; { v13 = pButton->pButtonName; GameUI_SetFooterString(v13); @@ -2002,7 +1668,6 @@ } pMessageQueue_50CBD0->AddMessage(pMessageType3, pButton->msg_param, 0); - //goto LABEL_131; uLastPointedObjectID = 1; return; } @@ -2027,7 +1692,6 @@ if ( pMessageType2 != 0 ) pMessageQueue_50CBD0->AddMessage(pMessageType2, pButton->msg_param, 0); - //goto LABEL_28; v13 = pButton->pButtonName; GameUI_SetFooterString(v13); uLastPointedObjectID = 1; @@ -2043,7 +1707,6 @@ && (signed int)pX <= (signed int)pButton->uZ && (signed int)pY >= (signed int)pButton->uY && (signed int)pY <= (signed int)pButton->uW ) - //goto LABEL_19; { pPlayer = pPlayers[uActiveCharacter]; v5 = LOBYTE(pPlayer->pActiveSkills[pButton->msg_param]); @@ -2061,7 +1724,6 @@ } sprintf(Str1, v39, v41); v13 = Str1; - //goto _set_status_and_ret; GameUI_SetFooterString(v13); uLastPointedObjectID = 1; return; @@ -2071,7 +1733,6 @@ } } pMouse->uPointingObjectID = sub_46A99B(); - //goto _return; if ( pMouse->uPointingObjectID == 0 ) { if ( uLastPointedObjectID != 0 ) @@ -2085,7 +1746,6 @@ } } - //----- (0044158F) -------------------------------------------------------- void GameUI_DrawCharacterSelectionFrame() { @@ -2094,22 +1754,12 @@ pIcons_LOD->GetTexture(uTextureID_GameUI_CharSelectionFrame)); } - - //----- (0044162D) -------------------------------------------------------- void GameUI_DrawPartySpells() { unsigned int v0; // ebp@1 - //signed int v1; // edi@1 - //int v2; // eax@2 - //int v3; // ecx@5 - //__int16 *v4; // ebx@25 - //Player *v5; // edi@26 - //unsigned int v6; // [sp-4h] [bp-1Ch]@11 Texture *v7; // [sp-4h] [bp-1Ch]@12 - //unsigned int v8; // [sp-4h] [bp-1Ch]@20 Texture *v9; // [sp-4h] [bp-1Ch]@21 - //Player **v10; // [sp+10h] [bp-8h]@25 v0 = (signed __int64)((double)GetTickCount() * 0.050000001); //v1 = 0; @@ -2169,8 +1819,6 @@ } } - - //----- (004921C1) -------------------------------------------------------- void GameUI_DrawPortraits(unsigned int _this) {
--- a/mm7_2.cpp Fri Aug 30 01:49:29 2013 +0600 +++ b/mm7_2.cpp Sun Sep 01 17:10:29 2013 +0600 @@ -443,7 +443,7 @@ pRenderer->uTargetGMask | pRenderer->uTargetBMask); auto pTex = pIcons_LOD->GetTexture(uTextureID_Leather); - pRenderer->_4A6A68(8, 352 - v0, pTex, pTex->uTextureHeight - v0); + pRenderer->GetLeather(8, 352 - v0, pTex, pTex->uTextureHeight - v0); pRenderer->DrawTextureIndexed(8u, 347 - v0, pTexture_591428); v1 = FitTextInAWindow(pGlobalTXT_LocalizationStrings[575], pFontArrus, &window, 0xDu, 0);