changeset 994:3431f6abc786

GameUI clean
author Nomad
date Tue, 14 May 2013 12:35:06 +0200
parents ada1ed5f44a1
children 5876a9cafa3e
files Actor.cpp GUIWindow.cpp GUIWindow.h Game.cpp Player.cpp UICharacter.cpp UiGame.cpp mm7_1.cpp mm7_2.cpp mm7_3.cpp mm7_5.cpp mm7_data.cpp mm7_data.h
diffstat 13 files changed, 368 insertions(+), 414 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/Actor.cpp	Tue May 14 12:35:06 2013 +0200
@@ -34,6 +34,61 @@
 
 stru319 stru_50C198; // idb
 
+
+
+
+//----- (0041AF52) --------------------------------------------------------
+void Actor::DrawHealthBar(Actor *a1, GUIWindow *a2)
+{
+  unsigned int v2; // eax@1
+  GUIWindow *v3; // edi@1
+  unsigned int v4; // esi@1
+  signed int v5; // ebx@4
+  double v6; // st7@5
+  unsigned int v7; // eax@6
+  unsigned int v8; // ebx@10
+  unsigned int v9; // [sp+14h] [bp-Ch]@4
+  unsigned int v10; // [sp+1Ch] [bp-4h]@4
+
+  v2 = a1->pMonsterInfo.uHP;
+  v3 = a2;
+  v4 = 25;
+  if ( (signed int)v2 > 25 )
+  {
+    v4 = 200;
+    if ( (signed int)v2 < 200 )
+      v4 = a1->pMonsterInfo.uHP;
+  }
+  v5 = a1->sCurrentHP;
+  v10 = v4;
+  v9 = uTextureID_mhp_grn;
+  if ( v5 < (signed int)v2 )
+  {
+    v6 = (double)(signed int)v2;
+    v10 = (signed __int64)((double)(signed int)v4 / (double)(signed int)v2 * (double)a1->sCurrentHP);
+    if ( v5 <= (signed int)(signed __int64)(0.34 * v6) )
+    {
+      v7 = uTextureID_mhp_red;
+      v9 = v7;
+    }
+    else if ( v5 <= (signed int)(signed __int64)(v6 * 0.67) )
+    {
+      v7 = uTextureID_mhp_yel;
+      v9 = v7;
+    }
+  }
+  v8 = a2->uFrameX + (signed int)(a2->uFrameWidth - v4) / 2;
+
+  pRenderer->SetTextureClipRect(v8, a2->uFrameY + 32, v8 + v4, a2->uFrameY + 52);
+  pRenderer->DrawTextureIndexed(v8, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_bd));
+  pRenderer->SetTextureClipRect(v8, v3->uFrameY + 32, v8 + v10, v3->uFrameY + 52);
+  pRenderer->DrawTextureIndexed(v8, v3->uFrameY + 34, pIcons_LOD->GetTexture(v9));
+
+  pRenderer->ResetTextureClipRect();
+  pRenderer->DrawTextureIndexed(v8 - 5, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_capl));
+  pRenderer->DrawTextureIndexed(v8 + v4, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_capr));
+}
+
 //----- (00448A40) --------------------------------------------------------
 void Actor::ToggleFlag(signed int uActorID, unsigned int uFlag, int bToggle)
 {
--- a/GUIWindow.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/GUIWindow.cpp	Tue May 14 12:35:06 2013 +0200
@@ -76,6 +76,105 @@
 
 
 
+
+
+
+//----- (0041B4E1) --------------------------------------------------------
+int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall)
+{
+  unsigned __int8 v3; // bl@1
+  int result; // eax@1
+  int i; // edx@2
+  GUIButton *j; // ecx@3
+  int k; // edx@7
+  GUIButton *l; // ecx@8
+  unsigned __int8 v9; // [sp+4h] [bp-8h]@1
+  char v10; // [sp+8h] [bp-4h]@1
+
+  v3 = uNewHotkey;
+  v10 = toupper(uOldHotkey);
+  result = toupper(v3);
+  v9 = result;
+  if ( bFirstCall )
+  {
+    for ( i = uNumVisibleWindows; i >= 0; --i )
+    {
+      result = 84 * pVisibleWindowsIdxs[i];
+      //for ( j = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); j; j = j->pNext )
+      for ( j = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; j; j = j->pNext )
+        j->field_28 = 0;
+    }
+  }
+  for ( k = uNumVisibleWindows; k >= 0; --k )
+  {
+    result = 84 * pVisibleWindowsIdxs[k];
+    //for ( l = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); l; l = l->pNext )
+    for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1].pControlsHead; l; l = l->pNext )
+    {
+      LOBYTE(result) = v10;
+      if ( l->uHotkey == v10 )
+      {
+        if ( !l->field_28 )
+        {
+          LOBYTE(result) = v9;
+          l->field_28 = 1;
+          l->uHotkey = v9;
+        }
+      }
+    }
+  }
+  return result;
+}
+
+
+
+
+//----- (0041B438) --------------------------------------------------------
+GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey)
+{
+  char v1; // al@1
+  int v2; // esi@1
+  char v3; // dl@1
+  GUIWindow *v4; // ecx@2
+  GUIButton *result; // eax@2
+  //int v6; // edx@12
+
+  v1 = toupper(uHotkey);
+  v2 = uNumVisibleWindows;
+  v3 = v1;
+  if ( uNumVisibleWindows >= 0 )
+  {
+    while ( 2 )
+    {
+      v4 = &pWindowList[pVisibleWindowsIdxs[v2] - 1];
+      for ( result = v4->pControlsHead; result; result = result->pNext )
+      {
+        if ( result->uHotkey == v3 )
+        {
+          pMessageQueue_50CBD0->AddMessage(result->msg, result->msg_param, 0);
+          /*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
+          {
+            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)result->uControlID;
+            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v6;
+            *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
+            ++pMessageQueue_50CBD0->uNumMessages;
+          }*/
+          return result;
+        }
+      }
+      if ( v4->uFrameX || v4->uFrameY || !(v4->uFrameWidth == 640 & v4->uFrameHeight == 480) )
+      {
+        --v2;
+        if ( v2 >= 0 )
+          continue;
+      }
+      break;
+    }
+  }
+  return 0;
+}
+// 5075E0: using guessed type int pVisibleWindowsIdxs[20];
+
 //----- (0041D73D) --------------------------------------------------------
 char GUIWindow::_41D73D_draw_buff_tooltip()
 {
--- a/GUIWindow.h	Mon May 13 22:51:58 2013 +0100
+++ b/GUIWindow.h	Tue May 14 12:35:06 2013 +0200
@@ -461,7 +461,25 @@
 
 
 
+
+
+void draw_leather();
+
+
+
+
+// game ui
+void GameUI_DrawRightPanel();
+void GameUI_DrawRightPanelFrames();
+void GameUI_DrawRightPanelItems();
 void GameUI_QuickRef_Draw();
+void GameUI_DrawFoodAndGold();
+void GameUI_DrawLifeManaBars();
+void GameUI_DrawHiredNPCs();
+void GameUI_DrawPortraits(unsigned int _this);
+void GameUI_Footer();
+void GameUI_Footer_2();
+void GameUI_SetFooterString(const char *pStr);
 
 
 
@@ -472,7 +490,8 @@
 
 
 
-//character ui
+
+// character ui
 unsigned int GetSkillColor(unsigned int uPlayerClass, PLAYER_SKILL_TYPE uPlayerSkillType, signed int skill_level);
 const char *CharacterUI_GetSkillDescText(unsigned int uPlayerID, PLAYER_SKILL_TYPE uPlayerSkillType);
 char CharacterUI_SkillsTab_ShowHint();
--- a/Game.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/Game.cpp	Tue May 14 12:35:06 2013 +0200
@@ -160,12 +160,12 @@
 
   GameUI_DrawPartySpells();
   if (v4 || pParty->pHirelings[0].evt_C || pParty->pHirelings[1].evt_C )
-    DrawHiredNPCs();
+    GameUI_DrawHiredNPCs();
   GameUI_DrawPortraits(v4);
   GameUI_DrawLifeManaBars();
   GameUI_DrawCharacterSelectionFrame();
   if ( sub_44100D() )
-    draw_right_panel();
+    GameUI_DrawRightPanel();
   if ( !pVideoPlayer->AnyMovieLoaded() )
   {
     pStru6Instance->DrawPlayerBuffAnims();
--- a/Player.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/Player.cpp	Tue May 14 12:35:06 2013 +0200
@@ -3273,9 +3273,9 @@
   unsigned int result; // eax@2
 
   if ( CanTrainToNextLevel() )
-    result = TargetColor(0, 0xFFu, 0);
+    result = ui_color_text_bonus;
   else
-    result = 0;
+    result = ui_color_text_default;
   return result;
 }
 
--- a/UICharacter.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/UICharacter.cpp	Tue May 14 12:35:06 2013 +0200
@@ -1866,6 +1866,8 @@
                         pGUIWindow_CurrentMenu->_41D08F_set_keyboard_control_group(a2, 1, 0, a5);
     }
 
+
+
 //----- (00418511) --------------------------------------------------------
 char CharacterUI_StatsTab_Draw(Player *player)
 {
--- a/UiGame.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/UiGame.cpp	Tue May 14 12:35:06 2013 +0200
@@ -52,31 +52,31 @@
 //----- (0041A57E) --------------------------------------------------------
 void GameUI_QuickRef_Draw()
 {
-        unsigned int v0; // ebx@1
+        //unsigned int v0; // ebx@1
         //unsigned int v1; // eax@1
-        Player *pPlayer; // ebp@2
-        int v3; // eax@6
-        int v4; // edi@6
+        //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
+        //signed int v8; // eax@13
         unsigned int v9; // eax@13
         unsigned int v10; // edi@13
-        int v11; // eax@15
+        //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
+        //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
+        //int v20; // eax@19
         unsigned int v21; // edi@19
         char *v22; // eax@21
         unsigned int v23; // edi@21
-        int v24; // eax@23
+        //int v24; // eax@23
         unsigned int v25; // edi@23
         char *v26; // eax@25
         unsigned int v27; // edi@25
@@ -88,101 +88,90 @@
         const char *v33; // ST10_4@35
         unsigned int v34; // eax@35
         unsigned int v35; // edi@35
-        unsigned __int8 v36; // al@37
+        //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
+        //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 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
 
-        v0 = 0;
-        v47 = TargetColor(0xFFu, 0xFFu, 0x9Bu);
+        //v0 = 0;
+        //v47 = TargetColor(0xFFu, 0xFFu, 0x9Bu);
         //v49 = TargetColor(0xFFu, 0, 0);
-        v46 = TargetColor(0, 0xFFu, 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));
+  pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("quikref", TEXTURE_16BIT_PALETTE));
         v43 = 0;
         v45 = LOBYTE(pFontArrus->uFontHeight) + 1;
         do
-            {
-            pPlayer = &pParty->pPlayers[v43];
+        {
+            auto player = &pParty->pPlayers[v43];
             v44 = 94 * v43 + 89;
-            if ( v43 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x12u, v0, pGlobalTXT_LocalizationStrings[149], 60, v0);//Name
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 94 * v43 + 89, 0x12u, v47, pPlayer->pName, 84, v0);
-            if ( v43 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x2Fu, v0, pGlobalTXT_LocalizationStrings[131], 60, v0); //Уров.
-            v3 = pPlayer->GetActualLevel();
-            sprintf(pTmpBuf, "%lu", v3);
-            v4 = pPlayer->GetBaseLevel();
-            if ( pPlayer->GetActualLevel() <= v4 )
-                v5 = pPlayer->GetExperienceDisplayColor();
+            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_color_text_header, player->pName, 84, 0);
+            if ( v43 == 0 )
+                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x2Fu, 0, pGlobalTXT_LocalizationStrings[131], 60, 0); //Уров.
+            sprintf(pTmpBuf, "%lu", player->GetActualLevel());
+            if ( player->GetActualLevel() <= player->GetBaseLevel())
+                v5 = player->GetExperienceDisplayColor();
             else
-                v5 = TargetColor(0, 0xFFu, v0);
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, 0x2Fu, v5, pTmpBuf, 84, v0);
+              v5 = ui_color_text_bonus;
+            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, 0x2Fu, v5, pTmpBuf, 84, 0);
             v6 = v45 + 47;
-            if ( v43 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v45 + 47, v0, pGlobalTXT_LocalizationStrings[41], 60, v0);//Класс
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v6, v0, pClassNames[pPlayer->classType], 84, v0);
+            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 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v7, v0, pGlobalTXT_LocalizationStrings[107], 60, v0);//Здор.
-            sprintf(pTmpBuf, "%d", pPlayer->sHealth);
-            v8 = pPlayer->GetMaxHealth();
-            v9 = UI_GetHealthManaStringColor(pPlayer->sHealth, v8);
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf, 84, v0);
+            if ( v43 == 0 )
+                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v7, 0, pGlobalTXT_LocalizationStrings[107], 60, 0);//Здор.
+            sprintf(pTmpBuf, "%d", player->sHealth);
+            v9 = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth());
+            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf, 84, 0);
             v10 = v45 + v7;
-            if ( v43 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v10, v0, pGlobalTXT_LocalizationStrings[209], 60, v0);//Мана
-            sprintf(pTmpBuf, "%d", pPlayer->sMana);
-            v11 = pPlayer->GetMaxMana();
-            v12 = UI_GetHealthManaStringColor(pPlayer->sMana, v11);
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf, 84, v0);
+            if ( v43 == 0 )
+                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v10, 0, pGlobalTXT_LocalizationStrings[209], 60, 0);//Мана
+            sprintf(pTmpBuf, "%d", player->sMana);
+            v12 = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana());
+            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf, 84, 0);
             v13 = v45 + v10;
-            if ( v43 == v0 )
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v13, v0, pGlobalTXT_LocalizationStrings[0], 60, v0);//Класс брони
-            v14 = pPlayer->GetActualAC();
-            sprintf(pTmpBuf, "%d", v14);
-            v15 = v0;
-            v16 = pPlayer->GetBaseAC();
-            v17 = pPlayer->GetActualAC();
-            v18 = UI_GetHealthManaStringColor(v17, v16);
-            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf, 84, v15);
-            v0 = 0;
+            if ( v43 == 0 )
+                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v13, 0, pGlobalTXT_LocalizationStrings[0], 60, 0);//Класс брони
+            sprintf(pTmpBuf, "%d", player->GetActualAC());
+            v18 = UI_GetHealthManaStringColor(player->GetActualAC(), player->GetBaseAC());
+            pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf, 84, 0);
             v19 = v45 + v13;
             if ( !v43 )
                 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v19, 0, pGlobalTXT_LocalizationStrings[18], 60, 0);//Атака
-            v20 = pPlayer->GetActualAttack(0);
-            sprintf(pTmpBuf, "%+d", v20);
+            sprintf(pTmpBuf, "%+d", player->GetActualAttack(0));
             pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v19, 0, pTmpBuf, 84, 0);
             v21 = v45 + v19;
             if ( !v43 )
                 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v21, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр.
-            v22 = pPlayer->GetMeleeDamageString();
+            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);// Стрелять
-            v24 = pPlayer->GetRangedAttack();
-            sprintf(pTmpBuf, "%+d", v24);
+            sprintf(pTmpBuf, "%+d", player->GetRangedAttack());
             pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v23, 0, pTmpBuf, 84, 0);
             v25 = v45 + v23;
             if ( !v43 )
                 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v25, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//Повр.
-            v26 = pPlayer->GetRangedDamageString();
+            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 *)pPlayer->pActiveSkills;
+            v29 = (char *)player->pActiveSkills;
             v30 = 36;
             do
                 {
@@ -197,10 +186,10 @@
                 v31 = v45 + v27;
                 if ( !v43 )
                     pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v31, 0, pGlobalTXT_LocalizationStrings[168], 60, 0);//Очки
-                sprintf(pTmpBuf, "%lu", pPlayer->uSkillPoints);
-                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v31, pPlayer->uSkillPoints != 0 ? v46 : 0, pTmpBuf, 84, 0);
+                sprintf(pTmpBuf, "%lu", player->uSkillPoints);
+                pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v31, player->uSkillPoints ? ui_color_text_bonus : ui_color_text_default, pTmpBuf, 84, 0);
                 v32 = v45 + v31;
-                v48 = pPlayer->GetMajorConditionIdx();
+                v48 = player->GetMajorConditionIdx();
                 if ( !v43 )
                     pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v32, 0, pGlobalTXT_LocalizationStrings[45], 60, 0);//Сост.
                 v33 = aCharacterConditionNames[v48];
@@ -209,9 +198,8 @@
                 v35 = v45 + v32;
                 if ( !v43 )
                     pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v35, 0, pGlobalTXT_LocalizationStrings[170], 60, 0);//Б.Прим.
-                v36 = pPlayer->uQuickSpell;
-                if ( v36 )
-                    v37 = pSpellStats->pInfos[v36].pShortName;
+                if (player->uQuickSpell)
+                    v37 = pSpellStats->pInfos[player->uQuickSpell].pShortName;
                 else
                     v37 = pGlobalTXT_LocalizationStrings[153];//Нет
                 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v35, 0, v37, 84, 0);
@@ -223,23 +211,24 @@
             if ( v38 >= 0 )
                 {
                 if ( v38 <= 5 )
-                    v39 = TargetColor(0xFF, 0xFF, 0xFF);
+                  v39 = ui_color_text_default;
                 else
-                    v39 = TargetColor(0xFF, 0, 0);
+                  v39 = ui_color_text_bonus_neg;
                 }
             else
-                v39 = v46;
+              v39 = ui_color_text_bonus;
 
-            v40 = GetReputationString(v38);
-            sprintf(pTmpBuf, "%s: \f%05d%s\f00000", pGlobalTXT_LocalizationStrings[180], v39, v40);//Reputation
+            sprintf(pTmpBuf, "%s: \f%05d%s\f00000", pGlobalTXT_LocalizationStrings[180], v39, GetReputationString(v38));//Reputation
             pGUIWindow_CurrentMenu->DrawText(pFontArrus, 22, 323, 0, pTmpBuf, 0, 0, 0);
-            v41 = pParty->GetPartyFame();
-            sprintf(pTmpBuf, "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], v41);// Fame Слава
+
+            sprintf(pTmpBuf, "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], pParty->GetPartyFame());// Fame Слава
             pGUIWindow_CurrentMenu->DrawText(pFontArrus, 0, 323, 0, pTmpBuf, 0, 0, 0);
-        }
+}
+
+
 
 //----- (0041AD6E) --------------------------------------------------------
-void __cdecl GameUI_DrawRightPanelItems()
+void GameUI_DrawRightPanelItems()
 {
   if (GameUI_RightPanel_BookFlashTimer > pParty->uTimePlayed)
     GameUI_RightPanel_BookFlashTimer = 0;
@@ -247,26 +236,25 @@
   if (pParty->uTimePlayed - GameUI_RightPanel_BookFlashTimer > 128)
   {
     GameUI_RightPanel_BookFlashTimer = pParty->uTimePlayed;
-    byte_50697C = byte_50697C == 0;
+    
+    static bool byte_50697C = false; // 50697C
+    byte_50697C = !byte_50697C;
     if ( byte_50697C && pCurrentScreen != SCREEN_REST )
     {
-      if ( bFlashQuestBook )
-        pRenderer->DrawTextureTransparent(493, 355, pIcons_LOD->GetTexture(uTextureID_ib_td1_A));
-      if ( bFlashAutonotesBook )
-        pRenderer->DrawTextureTransparent(527, 353, pIcons_LOD->GetTexture(uTextureID_ib_td2_A));
-      if ( bFlashHistoryBook )
-        pRenderer->DrawTextureTransparent(600, 361, pIcons_LOD->GetTexture(uTextureID_ib_td5_A));
+      if (bFlashQuestBook)     pRenderer->DrawTextureTransparent(493, 355, pIcons_LOD->GetTexture(uTextureID_ib_td1_A));
+      if (bFlashAutonotesBook) pRenderer->DrawTextureTransparent(527, 353, pIcons_LOD->GetTexture(uTextureID_ib_td2_A));
+      if (bFlashHistoryBook)   pRenderer->DrawTextureTransparent(600, 361, pIcons_LOD->GetTexture(uTextureID_ib_td5_A));
     }
     else
     {
-      pRenderer->DrawTextureRGB(468u, 0, pTexture_RightFrame);
-      DrawHiredNPCs();
+      pRenderer->DrawTextureRGB(468, 0, pTexture_RightFrame);
+      GameUI_DrawHiredNPCs();
     }
   }
 }
 
 //----- (0041AEBB) --------------------------------------------------------
-void __cdecl GameUI_DrawFoodAndGold()
+void GameUI_DrawFoodAndGold()
 {
   int v2; // esi@2
 
@@ -280,316 +268,122 @@
   }
 }
 
-//----- (0041AF52) --------------------------------------------------------
-void Actor::DrawHealthBar(Actor *a1, GUIWindow *a2)
-{
-  unsigned int v2; // eax@1
-  GUIWindow *v3; // edi@1
-  unsigned int v4; // esi@1
-  signed int v5; // ebx@4
-  double v6; // st7@5
-  unsigned int v7; // eax@6
-  unsigned int v8; // ebx@10
-  unsigned int v9; // [sp+14h] [bp-Ch]@4
-  unsigned int v10; // [sp+1Ch] [bp-4h]@4
-
-  v2 = a1->pMonsterInfo.uHP;
-  v3 = a2;
-  v4 = 25;
-  if ( (signed int)v2 > 25 )
-  {
-    v4 = 200;
-    if ( (signed int)v2 < 200 )
-      v4 = a1->pMonsterInfo.uHP;
-  }
-  v5 = a1->sCurrentHP;
-  v10 = v4;
-  v9 = uTextureID_mhp_grn;
-  if ( v5 < (signed int)v2 )
-  {
-    v6 = (double)(signed int)v2;
-    v10 = (signed __int64)((double)(signed int)v4 / (double)(signed int)v2 * (double)a1->sCurrentHP);
-    if ( v5 <= (signed int)(signed __int64)(0.34 * v6) )
-    {
-      v7 = uTextureID_mhp_red;
-      v9 = v7;
-    }
-    else if ( v5 <= (signed int)(signed __int64)(v6 * 0.67) )
-    {
-      v7 = uTextureID_mhp_yel;
-      v9 = v7;
-    }
-  }
-  v8 = a2->uFrameX + (signed int)(a2->uFrameWidth - v4) / 2;
-
-  pRenderer->SetTextureClipRect(v8, a2->uFrameY + 32, v8 + v4, a2->uFrameY + 52);
-  pRenderer->DrawTextureIndexed(v8, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_bd));
-  pRenderer->SetTextureClipRect(v8, v3->uFrameY + 32, v8 + v10, v3->uFrameY + 52);
-  pRenderer->DrawTextureIndexed(v8, v3->uFrameY + 34, pIcons_LOD->GetTexture(v9));
-
-  pRenderer->ResetTextureClipRect();
-  pRenderer->DrawTextureIndexed(v8 - 5, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_capl));
-  pRenderer->DrawTextureIndexed(v8 + v4, v3->uFrameY + 32, pIcons_LOD->GetTexture(uTextureID_mhp_capr));
-}
 
 //----- (0041B0C9) --------------------------------------------------------
-void __cdecl GameUI_DrawLifeManaBars()
+void GameUI_DrawLifeManaBars()
 {
-  Texture *v0; // ebx@1
-  Player *v1; // ecx@2
-  float v2; // ST38_4@3
   double v3; // st7@3
-  signed __int64 v4; // qax@6
-  Player *v5; // ecx@24
-  float v6; // ST30_4@25
   double v7; // st7@25
-  bool v8; // ST38_4@27
   Texture *v9; // [sp-4h] [bp-30h]@10
   Texture *v10; // [sp+Ch] [bp-20h]@1
-  Player *v11; // [sp+10h] [bp-1Ch]@2
-  int v12; // [sp+10h] [bp-1Ch]@24
-  Texture *v13; // [sp+14h] [bp-18h]@1
-  Texture *v14; // [sp+18h] [bp-14h]@1
-  float v15; // [sp+1Ch] [bp-10h]@1
-  signed int v16; // [sp+24h] [bp-8h]@1
-  signed int v17; // [sp+28h] [bp-4h]@8
+
+
+  v10 = pIcons_LOD->GetTexture(uTextureID_BarBlue);
 
-  v0 = pIcons_LOD->GetTexture(uTextureID_BarGreen);
-  v14 = pIcons_LOD->GetTexture(uTextureID_BarYellow);
-  v13 = pIcons_LOD->GetTexture(uTextureID_BarRed);
-  v16 = 0;
-  v10 = pIcons_LOD->GetTexture(uTextureID_BarBlue);
-  v15 = v0->uTextureHeight;
-  do
+  for (uint i = 0; i < 4; ++i)
   {
-    v1 = &pParty->pPlayers[v16];
-    v11 = v1;
-    if ( v1->sHealth > 0 )
+    auto player = pParty->pPlayers + i;
+
+    if (player->sHealth > 0)
 	{
-		v11 = &pParty->pPlayers[v16];
-		v2 = (double)v1->sHealth;
-		v3 = v2 / (double)v1->GetMaxHealth();
-		if( v3 > 0.5 )
-		{
-		  if ( v3 > 1.0 )
-			v3 = 1.0;
-		  v4 = (signed __int64)((1.0 - v3) * v15);
-		  if ( v16 == 2 || v16 == 3 )
-			v17 = 2;
-		  else
-			v17 = 0;
-		  pRenderer->SetTextureClipRect(
-			v17 + pHealthBarPos[v16],
-			v4 + 402,
-			v17 + pHealthBarPos[v16] + v0->uTextureWidth,
-			v0->uTextureHeight + 402);
-		  v9 = v0;
-		}
-		else if ( v3 > 0.25 )
-		{
-			if ( v16 == 2 || v16 == 3 )
-			  v17 = 2;
-			else
-			  v17 = 0;
-			pRenderer->SetTextureClipRect(
-			  v17 + pHealthBarPos[v16],
-			  (unsigned __int64)(signed __int64)((1.0 - v3) * v15) + 402,
-			  v17 + pHealthBarPos[v16] + v14->uTextureWidth,
-			  v14->uTextureHeight + 402);
-			v9 = v14;
-		}
-		else if ( v3 > 0.0 )
-		{
-			if ( v16 == 2 || v16 == 3 )
-				v17 = 2;
-			else
-				v17 = 0;
-			pRenderer->SetTextureClipRect(
-				v17 + pHealthBarPos[v16],
-				(unsigned __int64)(signed __int64)((1.0 - v3) * v15) + 402,
-				v17 + pHealthBarPos[v16] + v13->uTextureWidth,
-				v13->uTextureHeight + 402);
-			v9 = v13;
-		}
+      int v17 = 0;
+      if (i == 2 || i == 3)
+        v17 = 2;
+
+      v3 = (double)player->sHealth / (double)player->GetMaxHealth();
+      if( v3 > 0.5 )
+      {
+        if ( v3 > 1.0 )
+          v3 = 1.0;
+		v9 = pIcons_LOD->GetTexture(uTextureID_BarGreen);
+      }
+      else if ( v3 > 0.25 )
+        v9 = pIcons_LOD->GetTexture(uTextureID_BarYellow);
+      else if ( v3 > 0.0 )
+        v9 = pIcons_LOD->GetTexture(uTextureID_BarRed);
+
+
 		if( v3 > 0.0 )
 		{
-		  pRenderer->DrawTextureIndexed(v17 + pHealthBarPos[v16], 0x192u, v9);
+			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();
 		}
 	}
-    v5 = v11;
-    v12 = v11->sMana;
-    if ( v12 > 0 )
+
+
+    if (player->sMana > 0)
     {
-      v6 = (double)v12;
-      v7 = v6 / (double)v5->GetMaxMana();
+      v7 = player->sMana / (double)player->GetMaxMana();
       if ( v7 > 1.0 )
         v7 = 1.0;
-      v8 = v16 == 2;
-      pRenderer->SetTextureClipRect(
-        (v16 == 2) + pManaBarPos[v16],
-        (unsigned __int64)(signed __int64)((1.0 - v7) * v15) + 402,
-        v8 + pManaBarPos[v16] + v10->uTextureWidth,
-        v10->uTextureHeight + 402);
-      pRenderer->DrawTextureIndexed(v8 + pManaBarPos[v16], 0x192u, v10);
+
+      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->ResetTextureClipRect();
     }
-    ++v16;
   }
-  while ( v16 < 4 );
 }
 
 //----- (0041B3B6) --------------------------------------------------------
-void __cdecl draw_right_panel()
+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) --------------------------------------------------------
-void __cdecl GameUI_DrawRightPanelFrames()
+void GameUI_DrawRightPanelFrames()
 {
-  pRenderer->DrawTextureRGB(0, 0, pTexture_TopFrame);
-  pRenderer->DrawTextureRGB(0, 8u, pTexture_LeftFrame);
-  pRenderer->DrawTextureRGB(468u, 0, pTexture_RightFrame);
-  pRenderer->DrawTextureRGB(0, 352u, pTexture_BottomFrame);
+  pRenderer->DrawTextureRGB(0,   0,   pTexture_TopFrame);
+  pRenderer->DrawTextureRGB(0,   8,   pTexture_LeftFrame);
+  pRenderer->DrawTextureRGB(468, 0,   pTexture_RightFrame);
+  pRenderer->DrawTextureRGB(0,   352, pTexture_BottomFrame);
   GameUI_DrawFoodAndGold();
   GameUI_DrawRightPanelItems();
 }
 
-//----- (0041B438) --------------------------------------------------------
-GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey)
+
+//----- (0041C047) --------------------------------------------------------
+void GameUI_Footer_2()
 {
-  char v1; // al@1
-  int v2; // esi@1
-  char v3; // dl@1
-  GUIWindow *v4; // ecx@2
-  GUIButton *result; // eax@2
-  //int v6; // edx@12
-
-  v1 = toupper(uHotkey);
-  v2 = uNumVisibleWindows;
-  v3 = v1;
-  if ( uNumVisibleWindows >= 0 )
-  {
-    while ( 2 )
-    {
-      v4 = &pWindowList[pVisibleWindowsIdxs[v2] - 1];
-      for ( result = v4->pControlsHead; result; result = result->pNext )
-      {
-        if ( result->uHotkey == v3 )
-        {
-          pMessageQueue_50CBD0->AddMessage(result->msg, result->msg_param, 0);
-          /*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
-          {
-            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)result->uControlID;
-            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v6;
-            *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
-            ++pMessageQueue_50CBD0->uNumMessages;
-          }*/
-          return result;
-        }
-      }
-      if ( v4->uFrameX || v4->uFrameY || !(v4->uFrameWidth == 640 & v4->uFrameHeight == 480) )
-      {
-        --v2;
-        if ( v2 >= 0 )
-          continue;
-      }
-      break;
-    }
-  }
-  return 0;
-}
-// 5075E0: using guessed type int pVisibleWindowsIdxs[20];
+    char *v1; // edx@2
+    int v5; // eax@5
 
-//----- (0041B4E1) --------------------------------------------------------
-int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall)
-{
-  unsigned __int8 v3; // bl@1
-  int result; // eax@1
-  int i; // edx@2
-  GUIButton *j; // ecx@3
-  int k; // edx@7
-  GUIButton *l; // ecx@8
-  unsigned __int8 v9; // [sp+4h] [bp-8h]@1
-  char v10; // [sp+8h] [bp-4h]@1
-
-  v3 = uNewHotkey;
-  v10 = toupper(uOldHotkey);
-  result = toupper(v3);
-  v9 = result;
-  if ( bFirstCall )
+  pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar);
+  if (GameUI_Footer_TimeLeft)
+    v1 = GameUI_Footer_TimedString;
+  else
   {
-    for ( i = uNumVisibleWindows; i >= 0; --i )
-    {
-      result = 84 * pVisibleWindowsIdxs[i];
-      //for ( j = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); j; j = j->pNext )
-      for ( j = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; j; j = j->pNext )
-        j->field_28 = 0;
-    }
+    if (!pFooterString[0])
+      return;
+    v1 = pFooterString;
   }
-  for ( k = uNumVisibleWindows; k >= 0; --k )
-  {
-    result = 84 * pVisibleWindowsIdxs[k];
-    //for ( l = *(GUIButton **)((char *)pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_ + result); l; l = l->pNext )
-    for ( l = pWindowList[pVisibleWindowsIdxs[k] - 1].pControlsHead; l; l = l->pNext )
-    {
-      LOBYTE(result) = v10;
-      if ( l->uHotkey == v10 )
-      {
-        if ( !l->field_28 )
-        {
-          LOBYTE(result) = v9;
-          l->field_28 = 1;
-          l->uHotkey = v9;
-        }
-      }
-    }
-  }
-  return result;
+
+  v5 = pFontLucida->AlignText_Center(450, v1);
+  pPrimaryWindow->DrawText(pFontLucida, v5 + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow);
 }
 
-
-
-//----- (0041C047) --------------------------------------------------------
-void __cdecl GameUI_Footer_2()
-    {
-    unsigned int v0; // eax@1
-    char *v1; // edx@2
-    unsigned int v2; // ST18_4@5
-    const char *v3; // ST0C_4@5
-    unsigned int v4; // ST08_4@5
-    int v5; // eax@5
-
-    pRenderer->DrawTextureRGB(0, 352u, pTexture_StatusBar);
-    if ( GameUI_Footer_TimeLeft )
-        {
-        v1 = GameUI_Footer_TimedString;
-        }
-    else
-        {
-        if ( !pFooterString[0] )
-            return;
-        v1 = pFooterString;
-        }
-    LOWORD(v0) = uGameUIFontShadow;
-    v2 = v0;
-    LOWORD(v0) = uGameUIFontMain;
-    v3 = v1;
-    v4 = v0;
-    v5 = pFontLucida->AlignText_Center(0x1C2u, v1);
-    pPrimaryWindow->DrawText(pFontLucida, v5 + 11, 357, v4, v3, 0, 0, v2);
-    }
-
 //----- (0041C0B8) --------------------------------------------------------
-void __thiscall sub_41C0B8_set_status_string(const char *pStr)
-    {
+void GameUI_SetFooterString(const char *pStr)
+{
     const char *v1; // esi@1
     int i; // eax@7
     int j; // eax@11
 
     v1 = pStr;
-    if ( pStr && strcmp(pStr, "test") && !IsBadStringPtrA(v1, 1u) && (*v1 || GameUI_Footer_TimeLeft) )
+    if ( pStr && strcmp(pStr, "test") && !IsBadStringPtrA(v1, 1) && (*v1 || GameUI_Footer_TimeLeft) )
         {
         if ( GameUI_Footer_TimeLeft )
             {
@@ -612,7 +406,7 @@
 //----- (0041C179) --------------------------------------------------------
 void GameUI_Footer()
 {
-    unsigned int v0; // ebp@1
+    //unsigned int v0; // ebp@1
     char *v1; // edi@5
     int v2; // eax@5
     unsigned int v3; // esi@5
@@ -622,10 +416,9 @@
     size_t v7; // eax@10
     GUIFont *v8; // ecx@10
     char v9; // zf@12
-    unsigned int v10; // ST08_4@13
+    //unsigned int v10; // ST08_4@13
     int v11; // eax@13
 
-    v0 = uGameUIFontShadow;
     if ( pFooterString[0] || GameUI_Footer_TimeLeft || bForceDrawFooter )
         {
         pRenderer->DrawTextureRGB(0, 352u, pTexture_StatusBar);
@@ -659,9 +452,8 @@
         bForceDrawFooter = 0;
         if ( !v9 )
             {
-            v10 = uGameUIFontMain;
             v11 = pFontLucida->AlignText_Center(v3, v1);
-            pPrimaryWindow->DrawText(pFontLucida, v11 + 11, 357, v10, v1, 0, 0, v0);
+            pPrimaryWindow->DrawText(pFontLucida, v11 + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow);
             }
         }
     }
@@ -784,7 +576,7 @@
 //LABEL_93:
         v26 = v22;
         //goto LABEL_87;
-        sub_41C0B8_set_status_string(v26);
+        GameUI_SetFooterString(v26);
         if ( pMouse->uPointingObjectID == 0 )
         {
           if ( uLastPointedObjectID != 0 )
@@ -816,7 +608,7 @@
             else
               v26 = pDecorationList->pDecorations[v24->uDecorationDescID].field_20;
             //goto LABEL_87;
-            sub_41C0B8_set_status_string(v26);
+            GameUI_SetFooterString(v26);
             if ( pMouse->uPointingObjectID == 0 )
             {
               if ( uLastPointedObjectID != 0 )
@@ -846,7 +638,7 @@
           //goto LABEL_93;
           v26 = v22;
           //goto LABEL_87;
-          sub_41C0B8_set_status_string(v26);
+          GameUI_SetFooterString(v26);
           if ( pMouse->uPointingObjectID == 0 )
           {
             if ( uLastPointedObjectID != 0 )
@@ -887,7 +679,7 @@
               //goto LABEL_93;
               v26 = v22;
               //goto LABEL_87;
-              sub_41C0B8_set_status_string(v26);
+              GameUI_SetFooterString(v26);
               if ( pMouse->uPointingObjectID == 0 )
               {
                 if ( uLastPointedObjectID != 0 )
@@ -924,7 +716,7 @@
               //goto LABEL_93;
               v26 = v22;
               //goto LABEL_87;
-              sub_41C0B8_set_status_string(v26);
+              GameUI_SetFooterString(v26);
               if ( pMouse->uPointingObjectID == 0 )
               {
                 if ( uLastPointedObjectID != 0 )
@@ -992,7 +784,7 @@
     }
     v26 = v28;
 //LABEL_87:
-    sub_41C0B8_set_status_string(v26);
+    GameUI_SetFooterString(v26);
     //goto _return;
     if ( pMouse->uPointingObjectID == 0 )
     {
@@ -1036,7 +828,7 @@
 	//LABEL_28:
 				v13 = pButton->pButtonName;
 	//_set_status_and_ret:
-				sub_41C0B8_set_status_string(v13);
+				GameUI_SetFooterString(v13);
 	//LABEL_131:
 				uLastPointedObjectID = 1;
 				return;
@@ -1058,7 +850,7 @@
 						pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0);
 					  }
 					  v13 = pButton->pButtonName;
-					  sub_41C0B8_set_status_string(v13);
+					  GameUI_SetFooterString(v13);
 					  uLastPointedObjectID = 1;
 					  return;
 					//}
@@ -1091,7 +883,7 @@
 				  sprintf(Str1, v39, v41);
 				  v13 = Str1;
 				  //goto _set_status_and_ret;
-				  sub_41C0B8_set_status_string(v13);
+				  GameUI_SetFooterString(v13);
 				  uLastPointedObjectID = 1;
 				  return;
 				}
@@ -1146,7 +938,7 @@
       pItemGen = (ItemGen *)((char *)&pParty->pPickedItem + 36 * (v16 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 4);
 //LABEL_49:
       v17 = pItemGen->GetDisplayName();
-      sub_41C0B8_set_status_string(v17);
+      GameUI_SetFooterString(v17);
 //LABEL_50:
       uLastPointedObjectID = 1;
 //_return:
@@ -1181,7 +973,7 @@
       pItemGen = (ItemGen *)&pPlayers[uActiveCharacter]->pInventoryItems[v14-1];
       //goto LABEL_49;
       v17 = pItemGen->GetDisplayName();
-      sub_41C0B8_set_status_string(v17);
+      GameUI_SetFooterString(v17);
       uLastPointedObjectID = 1;
       if ( pMouse->uPointingObjectID == 0 )
       {
@@ -1214,7 +1006,7 @@
               //goto LABEL_28;
             {
               v13 = pButton->pButtonName;
-              sub_41C0B8_set_status_string(v13);
+              GameUI_SetFooterString(v13);
               uLastPointedObjectID = 1;
               return;
             }
@@ -1247,7 +1039,7 @@
 
                   //goto LABEL_28;
                   v13 = pButton->pButtonName;
-                  sub_41C0B8_set_status_string(v13);
+                  GameUI_SetFooterString(v13);
                   uLastPointedObjectID = 1;
                   return;
                 //}
@@ -1280,7 +1072,7 @@
               sprintf(Str1, v39, v41);
               v13 = Str1;
               //goto _set_status_and_ret;
-              sub_41C0B8_set_status_string(v13);
+              GameUI_SetFooterString(v13);
               uLastPointedObjectID = 1;
               return;
             }
@@ -2081,7 +1873,7 @@
 
 
 //----- (00491F87) --------------------------------------------------------
-void __cdecl DrawHiredNPCs()
+void GameUI_DrawHiredNPCs()
 {
   //int v6; // eax@15
   char v7; // al@17
--- a/mm7_1.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_1.cpp	Tue May 14 12:35:06 2013 +0200
@@ -510,7 +510,7 @@
       _w = (ItemGen *)(&pChests[(unsigned int)pChestWindow->ptr_1C] -32 
 		  + 18 * *((short *)&pChests[(unsigned int)pChestWindow->ptr_1C].igChestItems[139].uExpireTime + v1 + 3));
       v2 = _w->GetDisplayName();
-      sub_41C0B8_set_status_string(v2);
+      GameUI_SetFooterString(v2);
     }
   }
 }
--- a/mm7_2.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_2.cpp	Tue May 14 12:35:06 2013 +0200
@@ -11251,7 +11251,7 @@
   else
     v24 = pDecorationList->pDecorations[v26->uDecorationDescID].field_20;
 LABEL_51:
-  sub_41C0B8_set_status_string(v24);
+  GameUI_SetFooterString(v24);
   return v19;
 }
 
--- a/mm7_3.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_3.cpp	Tue May 14 12:35:06 2013 +0200
@@ -11484,7 +11484,7 @@
 }
 
 //----- (0044100D) --------------------------------------------------------
-bool __cdecl sub_44100D()
+bool sub_44100D()
 {
   return pCurrentScreen == SCREEN_NPC_DIALOGUE || pCurrentScreen == SCREEN_CHARACTERS ||
          pCurrentScreen > SCREEN_LOADGAME && pCurrentScreen <= SCREEN_E ||
--- a/mm7_5.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_5.cpp	Tue May 14 12:35:06 2013 +0200
@@ -1603,7 +1603,7 @@
                 pParty->field_709 = 0;
             }
           }
-          DrawHiredNPCs();
+          GameUI_DrawHiredNPCs();
           continue;
         case UIMSG_TransitionUI_Confirm:
           if ( pMessageQueue_50CBD0->uNumMessages )
@@ -1993,7 +1993,7 @@
               continue;
             v173 = pMapStats->pInfos[sub_410D99_get_map_index(HIWORD(pPlayer->pInstalledBeacons[uMessageParam].field_18))].pName;
             sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[474], v173);// "Recall to %s"
-            sub_41C0B8_set_status_string(pTmpBuf);
+            GameUI_SetFooterString(pTmpBuf);
             continue;
           }
           v59 = pMapStats->GetMapInfo(pCurrentMapName);
@@ -2003,13 +2003,13 @@
           if ( !*((int *)&pSavegameThumbnails->pPixels + 10 * uMessageParam) || !v59 )
           {
             sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[476], thise);// "Set to %s"
-            sub_41C0B8_set_status_string(pTmpBuf);
+            GameUI_SetFooterString(pTmpBuf);
             continue;
           }
           v174 = pMapStats->pInfos[sub_410D99_get_map_index(*(short *)(uNumSeconds + 26))].pName;
           v158 = (unsigned int)thise;
           sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[475], v158, v174);// "Set %s over %s"
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_CloseAfterInstallBeacon:
           dword_50CDC8 = 1;
@@ -2224,7 +2224,7 @@
                     if ( uMessageParam != 5 )
                     {
                       sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[35], v200);
-                      sub_41C0B8_set_status_string(pTmpBuf);
+                      GameUI_SetFooterString(pTmpBuf);
                       continue;
                     }
                     v69 = pMapStats->pInfos[8].pName;
@@ -2236,7 +2236,7 @@
                   v69 = pMapStats->pInfos[21].pName;
                 }
                 sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[35], v69);
-                sub_41C0B8_set_status_string(pTmpBuf);
+                GameUI_SetFooterString(pTmpBuf);
                 continue;
               }
               v68 = 210;
@@ -2274,7 +2274,7 @@
                   //goto LABEL_519;
                   {
                     sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[35], v200);
-                    sub_41C0B8_set_status_string(pTmpBuf);
+                    GameUI_SetFooterString(pTmpBuf);
                     continue;
                   }
                 v69 = pMapStats->pInfos[8].pName;
@@ -2286,7 +2286,7 @@
             v69 = pMapStats->pInfos[21].pName;
           }
           sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[35], v69);
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_ShowFinalWindow:
           sprintf(pFinalMessage, "%s\n \n%s\n \n%s", pGlobalTXT_LocalizationStrings[151],// "Congratulations Adventurer."
@@ -2694,7 +2694,7 @@
               v177 = pGlobalTXT_LocalizationStrings[484];// "Select a spell then click here to set a QuickSpell"
             strcpy(pTmpBuf, v177);
           }
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_SPellbook_ShowHightlightedSpellInfo:
           if ( !uActiveCharacter || (uNumSeconds = (unsigned int)pPlayers[uActiveCharacter],
@@ -2714,7 +2714,7 @@
             v161 = pGlobalTXT_LocalizationStrings[486];
           }
           sprintfex(pTmpBuf, v161, v178);
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_ClickInstallRemoveQuickSpellBtn:
           GUIWindow::Create(pBtn_InstallRemoveSpell->uX, pBtn_InstallRemoveSpell->uY, 0, 0, WINDOW_PressedButton2, (int)pBtn_InstallRemoveSpell, 0);
@@ -3081,7 +3081,7 @@
           v174 = (char *)pParty->uNumGoldInBank;
           v158 = pParty->uNumGold + pParty->uNumGoldInBank;
           sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[489], v158, v174);// "You have %d total gold, %d in the Bank"
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_ShowStatus_DateTime:
           pNPCData4 = (NPCData *)pParty->uCurrentHour;
@@ -3098,11 +3098,11 @@
             uNumSeconds = 0;
           sprintf(pTmpBuf, "%d:%02d%s %s %d %s %d", pNPCData4, pParty->uCurrentMinute, aAMPMNames[uNumSeconds], aDayNames[pParty->uDaysPlayed % 7],
             7 * pParty->uCurrentMonthWeek + pParty->uDaysPlayed % 7 + 1, aMonthNames[pParty->uCurrentMonth], pParty->uCurrentYear);
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_ShowStatus_Food:
           sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[501], pParty->uNumFoodRations); // "You have %lu food"
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_ShowStatus_Player:
           pPlayer5 = pPlayers[uMessageParam];
@@ -3110,7 +3110,7 @@
           strcat(pTmpBuf, ": ");
           v107 = pPlayer5->GetMajorConditionIdx();
           strcat(pTmpBuf, aCharacterConditionNames[v107]);
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           v108 = 8 * uMessageParam - 8;
           LOBYTE(v108) = v108 | 4;
           pMouse->uPointingObjectID = PID(OBJECT_Player,v108);
@@ -3123,7 +3123,7 @@
           v113 = pGlobalTXT_LocalizationStrings[108];// "Hit Points"
           v114 = v110->GetMaxHealth();
           sprintf(pTmpBuf, "%d / %d %s    %d / %d %s", v110->sHealth, v114, v113, v112, v111, v109);
-          sub_41C0B8_set_status_string(pTmpBuf);
+          GameUI_SetFooterString(pTmpBuf);
           continue;
         case UIMSG_CHEST_ClickItem:
           if ( pCurrentScreen == SCREEN_CHEST_INVENTORY )
--- a/mm7_data.cpp	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_data.cpp	Tue May 14 12:35:06 2013 +0200
@@ -1505,7 +1505,6 @@
 //unsigned __int8 bMonsterInfoUI_bDollInitialized;
 char *aSpellNames[44];
 int pMainScreenNum; // weak
-char byte_50697C; // weak
 int dword_506980; // weak
 int dword_506984; // weak
 int dword_506988; // weak
--- a/mm7_data.h	Mon May 13 22:51:58 2013 +0100
+++ b/mm7_data.h	Tue May 14 12:35:06 2013 +0200
@@ -933,7 +933,6 @@
 //extern unsigned __int8 bMonsterInfoUI_bDollInitialized;
 extern char *aSpellNames[44];
 extern int pMainScreenNum; // weak
-extern char byte_50697C; // weak
 extern int dword_506980; // weak
 extern int dword_506984; // weak
 extern int dword_506988; // weak
@@ -1594,21 +1593,12 @@
 void sub_419220();
 void sub_419379();
 unsigned int __fastcall GetSizeInInventorySlots(unsigned int uNumPixels);
-void __cdecl draw_leather();
-void __cdecl GameUI_DrawRightPanelItems();
-void __cdecl GameUI_DrawFoodAndGold();
-void __cdecl GameUI_DrawLifeManaBars();
-void __cdecl draw_right_panel();
-void __cdecl GameUI_DrawRightPanelFrames();
 struct GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey); // idb
 int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall);
 void __cdecl MainMenuUI_LoadFontsAndSomeStuff();
 void __cdecl MainMenuUI_Create();
-void __cdecl GameUI_Footer_2();
-void __thiscall sub_41C0B8_set_status_string(const char *pStr); // idb
-void __cdecl GameUI_Footer();
+char __fastcall sub_41D20D_buff_remaining_time_string(int ecx0, struct GUIWindow *edx0, __int64 a3, struct GUIFont *a2);
 bool UI_OnKeyDown(unsigned int vkKey);
-char __fastcall sub_41D20D_buff_remaining_time_string(int ecx0, struct GUIWindow *edx0, __int64 a3, struct GUIFont *a2);
 void GameUI_DrawItemInfo(struct ItemGen* inspect_item); // idb
 void MonsterPopup_Draw(unsigned int uActorID, struct GUIWindow *edx0);
 void __cdecl nullsub_3(); // idb
@@ -1948,8 +1938,6 @@
 void LoadPlayerPortraintsAndVoices();
 int __fastcall ReloadPlayerPortraits(int, int); // weak
 void sub_491E3A();
-void DrawHiredNPCs();
-void __thiscall GameUI_DrawPortraits(unsigned int _this);
 signed int __thiscall CycleCharacter(unsigned int _this);
 void __fastcall Rest(unsigned int uHoursToSleep);
 int _493938_regenerate();