changeset 49:25fabc49627b

Слияние
author Ritor1
date Tue, 23 Oct 2012 17:34:20 +0600
parents 6a62c4005f0e (diff) 8a8dd0164b12 (current diff)
children 4211cceb3813 c28452924144 38025d9ab757
files GUIWindow.cpp mm7_1.cpp mm7_2.cpp mm7_3.cpp mm7_4.cpp mm7_5.cpp stru346.h
diffstat 7 files changed, 327 insertions(+), 330 deletions(-) [+]
line wrap: on
line diff
--- a/GUIWindow.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/GUIWindow.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -324,20 +324,20 @@
 {
   if ( a2 )
   {
-    this->field_28 = a2;
+    this->pNumPresenceButton = a2;
     this->field_30 = a3;
     this->field_34 = a4;
-    this->field_2C_focus_id = a5;
-    this->field_38 = a5;
+    this->pCurrentPosActiveItem = a5;
+    this->pStartingPosActiveItem = a5;
     this->field_44 = 1;
   }
   else
   {
-    this->field_28 = 0;
+    this->pNumPresenceButton = 0;
     this->field_30 = a3;
     this->field_34 = a4;
-    this->field_2C_focus_id = 0;
-    this->field_38 = 0;
+    this->pCurrentPosActiveItem = 0;
+    this->pStartingPosActiveItem = 0;
     this->field_44 = 0;
   }
 }
--- a/GUIWindow.h	Tue Oct 23 13:51:21 2012 +0200
+++ b/GUIWindow.h	Tue Oct 23 17:34:20 2012 +0600
@@ -87,11 +87,11 @@
   void *ptr_1C;
   unsigned int uNumControls;
   int field_24;
-  int field_28;
-  int field_2C_focus_id;
+  int pNumPresenceButton; 
+  int pCurrentPosActiveItem;
   int field_30;
   int field_34;
-  int field_38;
+  int pStartingPosActiveItem;
   int field_3C;
   int field_40;
   int field_44;
--- a/mm7_1.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_1.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -203,7 +203,7 @@
   v1 = uPlayerID;
   a5 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
   v84 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xAFu, 0xFFu);
-  v85 = pGUIWindow_CurrentMenu->field_2C_focus_id;
+  v85 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem;
   v86 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0);
   v79 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0);
   pPlayer = (Player *)&stru_AA1058[3].pSounds[6972 * v1 + 40552];
@@ -2143,9 +2143,9 @@
     if ( pWindowList[v3].field_30 != v1 )
     {
       pMouse->GetClickPos(&uClickX, &uClickY);
-      v4 = pWindowList[v3].field_38;
-      v29 = v4 + pWindowList[v3].field_28;
-      if ( v4 < v4 + pWindowList[v3].field_28 )
+      v4 = pWindowList[v3].pStartingPosActiveItem;
+      v29 = v4 + pWindowList[v3].pNumPresenceButton;
+      if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
       {
         while ( 1 )
         {
@@ -2184,10 +2184,10 @@
   if ( v26 == 37 )
   {
     v12 = pWindowList[v3].field_34;
-    if ( pWindowList[v3].field_2C_focus_id - pWindowList[v3].field_38 - v12 >= 0 )
+    if ( pWindowList[v3].pCurrentPosActiveItem - pWindowList[v3].pStartingPosActiveItem - v12 >= 0 )
     {
       v8 = pCurrentScreen == 21;
-      pWindowList[v3].field_2C_focus_id -= v12;
+      pWindowList[v3].pCurrentPosActiveItem -= v12;
       if ( v8 )
       {
         pAudioPlayer->PlaySound((SoundID)66, v1, v1, -1, v1, v1, v1, v1);
@@ -2197,7 +2197,7 @@
     if ( pWindowList[v3].field_30 != v1 )
       goto LABEL_47;
     v9 = pWindowList[v3].pControlsHead;
-    v13 = pWindowList[v3].field_2C_focus_id;
+    v13 = pWindowList[v3].pCurrentPosActiveItem;
     if ( v13 > (signed int)v1 )
     {
       do
@@ -2223,11 +2223,11 @@
   {
     if ( v26 == 39 )
     {
-      v7 = pWindowList[v3].field_2C_focus_id + pWindowList[v3].field_34;
-      if ( v7 < pWindowList[v3].field_28 + pWindowList[v3].field_38 )
+      v7 = pWindowList[v3].pCurrentPosActiveItem + pWindowList[v3].field_34;
+      if ( v7 < pWindowList[v3].pNumPresenceButton + pWindowList[v3].pStartingPosActiveItem )
       {
         v8 = pCurrentScreen == 21;
-        pWindowList[v3].field_2C_focus_id = v7;
+        pWindowList[v3].pCurrentPosActiveItem = v7;
         if ( v8 )
         {
           pAudioPlayer->PlaySound((SoundID)66, v1, v1, -1, v1, v1, v1, v1);
@@ -2237,7 +2237,7 @@
       if ( pWindowList[v3].field_30 != v1 )
         goto LABEL_47;
       v9 = pWindowList[v3].pControlsHead;
-      v10 = pWindowList[v3].field_2C_focus_id;
+      v10 = pWindowList[v3].pCurrentPosActiveItem;
       if ( v10 > (signed int)v1 )
       {
         do
@@ -2251,16 +2251,16 @@
     }
     if ( v26 == 40 )
     {
-      v17 = pWindowList[v3].field_38;
-      v18 = pWindowList[v3].field_2C_focus_id;
-      if ( v18 >= pWindowList[v3].field_28 + v17 - 1 )
-        pWindowList[v3].field_2C_focus_id = v17;
+      v17 = pWindowList[v3].pStartingPosActiveItem;
+      v18 = pWindowList[v3].pCurrentPosActiveItem;
+      if ( v18 >= pWindowList[v3].pNumPresenceButton + v17 - 1 )
+        pWindowList[v3].pCurrentPosActiveItem = v17;
       else
-        pWindowList[v3].field_2C_focus_id = v18 + 1;
+        pWindowList[v3].pCurrentPosActiveItem = v18 + 1;
       if ( pWindowList[v3].field_30 != v1 )
         return 1;
       v19 = pWindowList[v3].pControlsHead;
-      v20 = pWindowList[v3].field_2C_focus_id;
+      v20 = pWindowList[v3].pCurrentPosActiveItem;
       if ( v20 > (signed int)v1 )
       {
         do
@@ -2275,9 +2275,9 @@
     if ( v26 == 41 )
     {
       pMouse->GetClickPos(&uClickX, &uClickY);
-      v4 = pWindowList[v3].field_38;
-      v28 = v4 + pWindowList[v3].field_28;
-      if ( v4 < v4 + pWindowList[v3].field_28 )
+      v4 = pWindowList[v3].pStartingPosActiveItem;
+      v28 = v4 + pWindowList[v3].pNumPresenceButton;
+      if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
       {
         while ( 1 )
         {
@@ -2302,7 +2302,7 @@
             goto LABEL_45;
         }
 LABEL_66:
-        pWindowList[v3].field_2C_focus_id = v4;
+        pWindowList[v3].pCurrentPosActiveItem = v4;
         return 1;
       }
 LABEL_46:
@@ -2311,18 +2311,18 @@
     }
     goto LABEL_47;
   }
-  v22 = pWindowList[v3].field_2C_focus_id;
-  v23 = pWindowList[v3].field_38;
+  v22 = pWindowList[v3].pCurrentPosActiveItem;
+  v23 = pWindowList[v3].pStartingPosActiveItem;
   if ( v22 <= v23 )
-    v24 = pWindowList[v3].field_28 + v23 - 1;
+    v24 = pWindowList[v3].pNumPresenceButton + v23 - 1;
   else
     v24 = v22 - 1;
   v8 = pWindowList[v3].field_30 == v1;
-  pWindowList[v3].field_2C_focus_id = v24;
+  pWindowList[v3].pCurrentPosActiveItem = v24;
   if ( !v8 )
     return 1;
   v19 = pWindowList[v3].pControlsHead;
-  v25 = pWindowList[v3].field_2C_focus_id;
+  v25 = pWindowList[v3].pCurrentPosActiveItem;
   if ( v25 > (signed int)v1 )
   {
     do
@@ -3954,7 +3954,7 @@
       8u,
       (Texture *)(uTextureID_RestUI_restmain != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restmain] : 0));
     v10 = pParty->uCurrentHour;
-    dword_506F1C = pGUIWindow_CurrentMenu->field_2C_focus_id;
+    dword_506F1C = pGUIWindow_CurrentMenu->pCurrentPosActiveItem;
     if ( (signed int)pParty->uCurrentHour <= 12 )
     {
       if ( !v10 )
--- a/mm7_2.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_2.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -166,11 +166,11 @@
     v14 = pDialogueWindow;
     v15 = 80 - v11 * (100 - (signed int)pOutString) / v11 - (signed int)pOutString;
     v16 = v15 - HIDWORD(v15);
-    LODWORD(v15) = pDialogueWindow->field_38;
-    HIDWORD(v15) = v15 + pDialogueWindow->field_28;
+    LODWORD(v15) = pDialogueWindow->pStartingPosActiveItem;
+    HIDWORD(v15) = v15 + pDialogueWindow->pNumPresenceButton;
     v17 = (v16 >> 1) - v29 / 2 + 158;
-    v18 = -pDialogueWindow->field_28 < 0;
-    pOutString = (GUIFont *)pDialogueWindow->field_38;
+    v18 = -pDialogueWindow->pNumPresenceButton < 0;
+    pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
     if ( v18 ^ __OFSUB__((int)v15, HIDWORD(v15)) )
     {
       v31 = 2;
@@ -186,7 +186,7 @@
         v17 = v23 + v22 - 1;
         v21->uW = v17;
         v24 = v30;
-        if ( pDialogueWindow->field_2C_focus_id != v31 )
+        if ( pDialogueWindow->pCurrentPosActiveItem != v31 )
           v24 = v28;
         _this.DrawText2(pFontArrus, 0, v23, v24, *v19, 3u);
         v14 = pDialogueWindow;
@@ -194,7 +194,7 @@
         ++v19;
         pOutString = (GUIFont *)((char *)pOutString + 1);
       }
-      while ( (signed int)pOutString < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+      while ( (signed int)pOutString < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
     }
   }
   else
@@ -403,11 +403,11 @@
     return;
   }
   v8 = v14[0];
-  if ( pDialogueWindow->field_2C_focus_id != 2 )
+  if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
     v8 = v13[0];
   _this.DrawText2(pFontArrus, 0, 0x92u, v8, pGlobalTXT_LocalizationStrings[60], 3u);
   v9 = v14[0];
-  if ( pDialogueWindow->field_2C_focus_id != 3 )
+  if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
     v9 = v13[0];
   _this.DrawText2(pFontArrus, 0, 0xB0u, v9, pGlobalTXT_LocalizationStrings[244], 3u);
 }
@@ -662,8 +662,8 @@
           pOutString = (GUIFont *)(v9 * (100 - v85->GetMerchant()) / 100);
           if ( (signed int)pOutString < v9 / 3 )
             pOutString = (GUIFont *)(v9 / 3);
-          v10 = v8->field_38;
-          v11 = v10 + v8->field_28;
+          v10 = v8->pStartingPosActiveItem;
+          v11 = v10 + v8->pNumPresenceButton;
           v86 = 0;
           if ( (signed int)v10 < v11 )
           {
@@ -678,7 +678,7 @@
               }
               ++v10;
             }
-            while ( (signed int)v10 < v8->field_38 + v8->field_28 );
+            while ( (signed int)v10 < v8->pStartingPosActiveItem + v8->pNumPresenceButton );
             if ( v86 )
             {
               sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
@@ -687,9 +687,9 @@
               if ( (149 - v89) / v86 > 32 )
                 pOutString = (GUIFont *)32;
               v14 = (149 - v86 * (signed int)pOutString - v89) / 2 - (signed int)pOutString / 2 + 162;
-              v89 = v8->field_38;
+              v89 = v8->pStartingPosActiveItem;
               v83 = v14;
-              if ( v89 < v89 + v8->field_28 )
+              if ( v89 < v89 + v8->pNumPresenceButton )
               {
                 v86 = 2;
                 do
@@ -716,13 +716,13 @@
                     v16->uW = v22;
                     v83 = v22;
                     v23 = v84[0];
-                    if ( pDialogueWindow->field_2C_focus_id != v21 )
+                    if ( pDialogueWindow->pCurrentPosActiveItem != v21 )
                       v23 = v81;
                     v79.DrawText2(pFontArrus, 0, v20, v23, Str[1], 3u);
                   }
-                  v24 = v8->field_28;
+                  v24 = v8->pNumPresenceButton;
                   ++v89;
-                  v25 = v8->field_38 + v24;
+                  v25 = v8->pStartingPosActiveItem + v24;
                   ++v86;
                 }
                 while ( v89 < v25 );
@@ -768,7 +768,7 @@
     if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
       return;
     v28 = *(int *)v84;
-    if ( pDialogueWindow->field_2C_focus_id != 2 )
+    if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
       v28 = v81;
     sprintfex(&Dest, format_4E2DC8, v28);
     sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
@@ -776,7 +776,7 @@
     v90 = pFontArrus->CalcTextHeight(&Dest, &v79, 0, 0);
     strcat(&Dest, "\n \n");
     v29 = *(int *)v84;
-    if ( pDialogueWindow->field_2C_focus_id != 3 )
+    if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
       v29 = v81;
     sprintfex(&a1, format_4E2DC8, v29);
     sprintfex(pTmpBuf2,
@@ -788,7 +788,7 @@
     v88 = pFontArrus->CalcTextHeight(&a1, &v79, 0, 0);
     strcat(&a1, "\n \n");
     v30 = *(int *)v84;
-    if ( pDialogueWindow->field_2C_focus_id != 4 )
+    if ( pDialogueWindow->pCurrentPosActiveItem != 4 )
       v30 = v81;
     sprintfex(&v77, format_4E2DC8, v30);
     strcat(&v77, pGlobalTXT_LocalizationStrings[160]);
@@ -800,7 +800,7 @@
     if ( v31 >= 108 && v31 <= 120 )
     {
       v32 = *(int *)v84;
-      if ( pDialogueWindow->field_2C_focus_id != 5 )
+      if ( pDialogueWindow->pCurrentPosActiveItem != 5 )
         v32 = v81;
       sprintfex(&v75, format_4E2DC8, v32);
       strcat(&v75, pGlobalTXT_LocalizationStrings[611]);
@@ -808,11 +808,11 @@
     }
     v33 = pDialogueWindow;
     Str[1] = (char *)pDialogueWindow;
-    v34 = pDialogueWindow->field_38;
-    v35 = v34 + pDialogueWindow->field_28;
+    v34 = pDialogueWindow->pStartingPosActiveItem;
+    v35 = v34 + pDialogueWindow->pNumPresenceButton;
     v36 = LOBYTE(pFontArrus->uFontHeight) - 3;
-    v37 = -pDialogueWindow->field_28 < 0;
-    pOutString = (GUIFont *)pDialogueWindow->field_38;
+    v37 = -pDialogueWindow->pNumPresenceButton < 0;
+    pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
     if ( !(v37 ^ __OFSUB__(v34, v35)) )
     {
 LABEL_75:
@@ -858,9 +858,9 @@
 LABEL_73:
         v38->uW = v41;
       }
-      v47 = v33->field_38;
+      v47 = v33->pStartingPosActiveItem;
       pOutString = (GUIFont *)((char *)pOutString + 1);
-      if ( (signed int)pOutString >= v33->field_28 + v47 )
+      if ( (signed int)pOutString >= v33->pNumPresenceButton + v47 )
         goto LABEL_75;
     }
     v42 = v90 + v88 + 2 * v36 + 146;
@@ -890,11 +890,11 @@
     v51 = pDialogueWindow;
     v52 = 174 - v48 * (174 - (signed int)pOutString) / v48 - (signed int)pOutString;
     v53 = v52 - HIDWORD(v52);
-    LODWORD(v52) = pDialogueWindow->field_38;
-    HIDWORD(v52) = v52 + pDialogueWindow->field_28;
+    LODWORD(v52) = pDialogueWindow->pStartingPosActiveItem;
+    HIDWORD(v52) = v52 + pDialogueWindow->pNumPresenceButton;
     v54 = (v53 >> 1) - v86 / 2 + 138;
-    v37 = -pDialogueWindow->field_28 < 0;
-    v89 = pDialogueWindow->field_38;
+    v37 = -pDialogueWindow->pNumPresenceButton < 0;
+    v89 = pDialogueWindow->pStartingPosActiveItem;
     if ( v37 ^ __OFSUB__((int)v52, HIDWORD(v52)) )
     {
       v85 = (Player *)2;
@@ -911,7 +911,7 @@
         v54 = v57 + v58 - 1;
         v55->uW = v54;
         v60 = v84[0];
-        if ( (Player *)pDialogueWindow->field_2C_focus_id != v59 )
+        if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v59 )
           v60 = v81;
         v79.DrawText2(pFontArrus, 0, v58, v60, *(const char **)&pOutString->cFirstChar, 3u);
         v51 = pDialogueWindow;
@@ -919,7 +919,7 @@
         pOutString = (GUIFont *)((char *)pOutString + 4);
         ++v89;
       }
-      while ( v89 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+      while ( v89 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
     }
   }
 }
@@ -1144,11 +1144,11 @@
       while ( (signed int)v66 < (signed int)&pShopOptions[3] );
       v68 = pDialogueWindow;
       v109 = (const char **)((174 - v65) / 3);
-      result = (char *)pDialogueWindow->field_38;
-      v69 = (int)&result[pDialogueWindow->field_28];
+      result = (char *)pDialogueWindow->pStartingPosActiveItem;
+      v69 = (int)&result[pDialogueWindow->pNumPresenceButton];
       v70 = (3 * (58 - (signed int)v109) - v65) / 2 - (174 - v65) / 3 / 2 + 138;
-      v20 = -pDialogueWindow->field_28 < 0;
-      v106.y = pDialogueWindow->field_38;
+      v20 = -pDialogueWindow->pNumPresenceButton < 0;
+      v106.y = pDialogueWindow->pStartingPosActiveItem;
       if ( v20 ^ __OFSUB__((int)result, (int)v69) )
       {
         _this = (Player *)2;
@@ -1165,14 +1165,14 @@
           v70 = v73 + v74 - 1;
           v71->uW = v70;
           v76 = v104;
-          if ( (Player *)pDialogueWindow->field_2C_focus_id != v75 )
+          if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v75 )
             v76 = v105;
           v101.DrawText2(pFontArrus, 0, v74, v76, *(const char **)v108, 3u);
           v68 = pDialogueWindow;
           _this = (Player *)((char *)_this + 1);
           v108 += 4;
           ++v106.y;
-          result = (char *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+          result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
         }
         while ( v106.y < (signed int)result );
       }
@@ -1195,8 +1195,8 @@
           v108 = v32 * (100 - _this->GetMerchant()) / 100;
           if ( v108 < v32 / 3 )
             v108 = v32 / 3;
-          v33 = v30->field_38;
-          v34 = v33 + v30->field_28;
+          v33 = v30->pStartingPosActiveItem;
+          v34 = v33 + v30->pNumPresenceButton;
           v109 = 0;
           if ( (signed int)v33 >= v34 )
             goto LABEL_105;
@@ -1211,7 +1211,7 @@
             }
             ++v33;
           }
-          while ( (signed int)v33 < v30->field_28 + v30->field_38 );
+          while ( (signed int)v33 < v30->pNumPresenceButton + v30->pStartingPosActiveItem );
           if ( !v109 )
           {
 LABEL_105:
@@ -1232,11 +1232,11 @@
           v108 = (149 - v106.y) / (signed int)v109;
           if ( (149 - v106.y) / (signed int)v109 > 32 )
             v108 = 32;
-          result = (char *)v30->field_38;
+          result = (char *)v30->pStartingPosActiveItem;
           v37 = (149 - (signed int)v109 * v108 - v106.y) / 2 - v108 / 2 + 162;
           v106.y = (LONG)result;
           v103 = v37;
-          if ( (signed int)result < (signed int)&result[v30->field_28] )
+          if ( (signed int)result < (signed int)&result[v30->pNumPresenceButton] )
           {
             v109 = (const char **)2;
             do
@@ -1263,13 +1263,13 @@
                 v39->uW = v45;
                 v103 = v45;
                 v46 = v104;
-                if ( (const char **)pDialogueWindow->field_2C_focus_id != v44 )
+                if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v44 )
                   v46 = v105;
                 v101.DrawText2(pFontArrus, 0, v43, v46, Str, 3u);
               }
-              v47 = v30->field_38;
+              v47 = v30->pStartingPosActiveItem;
               ++v106.y;
-              result = (char *)(v30->field_28 + v47);
+              result = (char *)(v30->pNumPresenceButton + v47);
               v109 = (const char **)((char *)v109 + 1);
             }
             while ( v106.y < (signed int)result );
@@ -1345,11 +1345,11 @@
         while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
         v17 = pDialogueWindow;
         v103 = (174 - v14) / 4;
-        result = (char *)pDialogueWindow->field_38;
-        v18 = (int)&result[pDialogueWindow->field_28];
+        result = (char *)pDialogueWindow->pStartingPosActiveItem;
+        v18 = (int)&result[pDialogueWindow->pNumPresenceButton];
         v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
-        v20 = -pDialogueWindow->field_28 < 0;
-        _this = (Player *)pDialogueWindow->field_38;
+        v20 = -pDialogueWindow->pNumPresenceButton < 0;
+        _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
         if ( v20 ^ __OFSUB__((int)result, v18) )
         {
           v108 = 2;
@@ -1366,14 +1366,14 @@
             v19 = v24 + v23 - 1;
             v21->uW = v19;
             v26 = v104;
-            if ( pDialogueWindow->field_2C_focus_id != v25 )
+            if ( pDialogueWindow->pCurrentPosActiveItem != v25 )
               v26 = v105;
             v101.DrawText2(pFontArrus, 0, v24, v26, *v109, 3u);
             v17 = pDialogueWindow;
             ++v108;
             ++v109;
             _this = (Player *)((char *)_this + 1);
-            result = (char *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+            result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
           }
           while ( (signed int)_this < (signed int)result );
         }
@@ -1762,11 +1762,11 @@
       while ( (signed int)v73 < (signed int)&unk_F8B1C8 );
       v75 = pDialogueWindow;
       Str = (char *)((174 - v72) / 4);
-      result = (POINT *)pDialogueWindow->field_38;
-      v76 = (int)((char *)result + pDialogueWindow->field_28);
+      result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+      v76 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
       v77 = (174 - 4 * (174 - v72) / 4 - v72) / 2 - (174 - v72) / 4 / 2 + 138;
-      v28 = -pDialogueWindow->field_28 < 0;
-      v112 = pDialogueWindow->field_38;
+      v28 = -pDialogueWindow->pNumPresenceButton < 0;
+      v112 = pDialogueWindow->pStartingPosActiveItem;
       if ( v28 ^ __OFSUB__((int)result, v76) )
       {
         _this = (Player *)2;
@@ -1783,14 +1783,14 @@
           v77 = v81 + v80 - 1;
           v78->uW = v77;
           v83 = v106;
-          if ( (Player *)pDialogueWindow->field_2C_focus_id != v82 )
+          if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v82 )
             v83 = v108;
           v104.DrawText2(pFontArrus, 0, v81, v83, *v111, 3u);
           v75 = pDialogueWindow;
           _this = (Player *)((char *)_this + 1);
           ++v111;
           ++v112;
-          result = (POINT *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+          result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
         }
         while ( (signed int)v112 < (signed int)result );
       }
@@ -1885,11 +1885,11 @@
         while ( (signed int)v23 < (signed int)&pShopOptions[2] );
         Str = (char *)((174 - v22) / 2);
         v25 = pDialogueWindow;
-        result = (POINT *)pDialogueWindow->field_38;
-        v26 = (int)((char *)result + pDialogueWindow->field_28);
+        result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+        v26 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
         v27 = (2 * (87 - (174 - v22) / 2) - v22) / 2 - (174 - v22) / 2 / 2 + 138;
-        v28 = -pDialogueWindow->field_28 < 0;
-        v112 = pDialogueWindow->field_38;
+        v28 = -pDialogueWindow->pNumPresenceButton < 0;
+        v112 = pDialogueWindow->pStartingPosActiveItem;
         if ( v28 ^ __OFSUB__((int)result, v26) )
         {
           _this = (Player *)2;
@@ -1907,14 +1907,14 @@
             v29->uW = v34;
             v27 = v34;
             v35 = v106;
-            if ( (Player *)pDialogueWindow->field_2C_focus_id != v33 )
+            if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v33 )
               v35 = v108;
             v104.DrawText2(pFontArrus, 0, v32, v35, *v111, 3u);
             v25 = pDialogueWindow;
             _this = (Player *)((char *)_this + 1);
             ++v111;
             ++v112;
-            result = (POINT *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+            result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
           }
           while ( (signed int)v112 < (signed int)result );
         }
@@ -1935,8 +1935,8 @@
         v111 = (const char **)(v5 * (100 - _this->GetMerchant()) / 100);
         if ( (signed int)v111 < v5 / 3 )
           v111 = (const char **)(v5 / 3);
-        v6 = v2->field_38;
-        v7 = v6 + v2->field_28;
+        v6 = v2->pStartingPosActiveItem;
+        v7 = v6 + v2->pNumPresenceButton;
         v114 = 0;
         if ( (signed int)v6 < v7 )
         {
@@ -1951,7 +1951,7 @@
             }
             ++v6;
           }
-          while ( (signed int)v6 < v2->field_28 + v2->field_38 );
+          while ( (signed int)v6 < v2->pNumPresenceButton + v2->pStartingPosActiveItem );
           if ( v114 )
           {
             sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
@@ -1959,11 +1959,11 @@
             v111 = (const char **)((signed int)(149 - v112) / v114);
             if ( (signed int)(149 - v112) / v114 > 32 )
               v111 = (const char **)32;
-            result = (POINT *)v2->field_38;
+            result = (POINT *)v2->pStartingPosActiveItem;
             v10 = (signed int)(149 - v114 * (int)v111 - v112) / 2 - (signed int)v111 / 2 + 162;
             v112 = (unsigned int)result;
             v105 = v10;
-            if ( (signed int)result < (signed int)((char *)result + v2->field_28) )
+            if ( (signed int)result < (signed int)((char *)result + v2->pNumPresenceButton) )
             {
               v114 = 2;
               do
@@ -1990,13 +1990,13 @@
                   v12->uW = v18;
                   v105 = v18;
                   v19 = v106;
-                  if ( pDialogueWindow->field_2C_focus_id != v17 )
+                  if ( pDialogueWindow->pCurrentPosActiveItem != v17 )
                     v19 = v108;
                   v104.DrawText2(pFontArrus, 0, v16, v19, Str, 3u);
                 }
-                v20 = v2->field_38;
+                v20 = v2->pStartingPosActiveItem;
                 ++v112;
-                result = (POINT *)(v2->field_28 + v20);
+                result = (POINT *)(v2->pNumPresenceButton + v20);
                 ++v114;
               }
               while ( (signed int)v112 < (signed int)result );
@@ -2486,11 +2486,11 @@
       while ( (signed int)v81 < (signed int)&pShopOptions[3] );
       v83 = pDialogueWindow;
       v152 = (174 - v80) / 3;
-      v84 = pDialogueWindow->field_38;
-      v85 = v84 + pDialogueWindow->field_28;
+      v84 = pDialogueWindow->pStartingPosActiveItem;
+      v85 = v84 + pDialogueWindow->pNumPresenceButton;
       v86 = (3 * (58 - v152) - v80) / 2 - v152 / 2 + 138;
-      v24 = -pDialogueWindow->field_28 < 0;
-      _this = (Player *)pDialogueWindow->field_38;
+      v24 = -pDialogueWindow->pNumPresenceButton < 0;
+      _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
       if ( v24 ^ __OFSUB__(v84, v85) )
       {
         v153 = 2;
@@ -2506,7 +2506,7 @@
           v86 = v90 + v89 - 1;
           v88->uW = v86;
           v92 = v147;
-          if ( pDialogueWindow->field_2C_focus_id != v91 )
+          if ( pDialogueWindow->pCurrentPosActiveItem != v91 )
             v92 = v148;
           v144.DrawText2(pFontArrus, 0, v90, v92, *v79, 3u);
           v83 = pDialogueWindow;
@@ -2514,7 +2514,7 @@
           ++v79;
           _this = (Player *)((char *)_this + 1);
         }
-        while ( (signed int)_this < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+        while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
       }
       return;
     }
@@ -2529,8 +2529,8 @@
       _this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100);
       if ( (signed int)_this < v38 / 3 )
         _this = (Player *)(v38 / 3);
-      v39 = v37->field_38;
-      v40 = v37->field_28;
+      v39 = v37->pStartingPosActiveItem;
+      v40 = v37->pNumPresenceButton;
       v153 = 0;
       if ( (signed int)v39 < (signed int)(v39 + v40) )
       {
@@ -2545,7 +2545,7 @@
           }
           ++v39;
         }
-        while ( (signed int)v39 < v37->field_28 + v37->field_38 );
+        while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem );
         if ( v153 )
         {
           sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
@@ -2554,9 +2554,9 @@
           if ( (149 - v152) / v153 > 32 )
             _this = (Player *)32;
           v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162;
-          v152 = v37->field_38;
+          v152 = v37->pStartingPosActiveItem;
           v146 = v43;
-          if ( v152 < v152 + v37->field_28 )
+          if ( v152 < v152 + v37->pNumPresenceButton )
           {
             v153 = 2;
             do
@@ -2583,13 +2583,13 @@
                 v45->uW = v51;
                 v146 = v51;
                 v52 = v147;
-                if ( pDialogueWindow->field_2C_focus_id != v50 )
+                if ( pDialogueWindow->pCurrentPosActiveItem != v50 )
                   v52 = v148;
                 v144.DrawText2(pFontArrus, 0, v49, v52, Str, 3u);
               }
-              v53 = v37->field_38;
+              v53 = v37->pStartingPosActiveItem;
               ++v152;
-              v54 = v37->field_28 + v53;
+              v54 = v37->pNumPresenceButton + v53;
               ++v153;
             }
             while ( v152 < v54 );
@@ -2816,11 +2816,11 @@
       while ( (signed int)v18 < (signed int)&unk_F8B1C8 );
       v20 = pDialogueWindow;
       v146 = (174 - v17) / 4;
-      v21 = pDialogueWindow->field_38;
-      v22 = v21 + pDialogueWindow->field_28;
+      v21 = pDialogueWindow->pStartingPosActiveItem;
+      v22 = v21 + pDialogueWindow->pNumPresenceButton;
       v23 = (174 - 4 * (174 - v17) / 4 - v17) / 2 - (174 - v17) / 4 / 2 + 138;
-      v24 = -pDialogueWindow->field_28 < 0;
-      v152 = pDialogueWindow->field_38;
+      v24 = -pDialogueWindow->pNumPresenceButton < 0;
+      v152 = pDialogueWindow->pStartingPosActiveItem;
       if ( v24 ^ __OFSUB__(v21, v22) )
       {
         _this = (Player *)2;
@@ -2836,7 +2836,7 @@
           v23 = v28 + v27 - 1;
           v26->uW = v23;
           v30 = v147;
-          if ( (Player *)pDialogueWindow->field_2C_focus_id != v29 )
+          if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v29 )
             v30 = v148;
           v144.DrawText2(pFontArrus, 0, v28, v30, *v16, 3u);
           v20 = pDialogueWindow;
@@ -2844,7 +2844,7 @@
           ++v16;
           ++v152;
         }
-        while ( v152 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+        while ( v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
       }
     }
     return;
@@ -3773,7 +3773,7 @@
   v1 = 0;
   v2 = a1;
   v55 = a1;
-  if ( !pDialogueWindow->field_28 )
+  if ( !pDialogueWindow->pNumPresenceButton )
     return;
   pRenderer->ClearZBuffer(0, 479);
   v3 = dword_F8B198;
--- a/mm7_3.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_3.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -16351,8 +16351,8 @@
   v52.uFrameX = 483;
   v52.uFrameWidth = 148;
   v52.uFrameZ = 334;
-  for ( pOutString = (GUIFont *)v52.field_38;
-        (signed int)pOutString < v52.field_38 + v52.field_28;
+  for ( pOutString = (GUIFont *)v52.pStartingPosActiveItem;
+        (signed int)pOutString < v52.pStartingPosActiveItem + v52.pNumPresenceButton;
         pOutString = (GUIFont *)((char *)pOutString + 1) )
   {
     v14 = v52.GetControl((unsigned int)pOutString);
@@ -16501,8 +16501,8 @@
   v33 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
   v34 = pDialogueWindow;
   *(int *)v54 = v33;
-  v35 = pDialogueWindow->field_38;
-  for ( i = v35 + pDialogueWindow->field_28; v35 < i; i = pDialogueWindow->field_28 + pDialogueWindow->field_38 )
+  v35 = pDialogueWindow->pStartingPosActiveItem;
+  for ( i = v35 + pDialogueWindow->pNumPresenceButton; v35 < i; i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem )
   {
     v37 = v34->GetControl(v35);
     if ( !v37 )
@@ -16515,7 +16515,7 @@
     v32 += v38;
     ++v35;
   }
-  v39 = v34->field_28;
+  v39 = v34->pNumPresenceButton;
   if ( v39 )
   {
     pOutString = (GUIFont *)((174 - v32) / v39);
@@ -16523,7 +16523,7 @@
       pOutString = (GUIFont *)32;
     v55 = (unsigned __int16 *)1;
     v40 = 174 - (int)pOutString * v39 - v32;
-    v41 = v34->field_38;
+    v41 = v34->pStartingPosActiveItem;
     v42 = v40 / 2 - (signed int)pOutString / 2 + 138;
     if ( (signed int)v41 < (signed int)(v41 + v39) )
     {
@@ -16541,14 +16541,14 @@
         v42 = v45 + v44 - 1;
         v43->uW = v42;
         v47 = v54[0];
-        if ( (unsigned __int16 *)pDialogueWindow->field_2C_focus_id != v46 )
+        if ( (unsigned __int16 *)pDialogueWindow->pCurrentPosActiveItem != v46 )
           v47 = (unsigned __int16)pInString;
         v52.DrawText2(pFontArrus, 0, v45, v47, Str, 3u);
         v34 = pDialogueWindow;
         v55 = (unsigned __int16 *)((char *)v55 + 1);
         ++v41;
       }
-      while ( (signed int)v41 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+      while ( (signed int)v41 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
     }
   }
   pRenderer->DrawTextureIndexed(
--- a/mm7_4.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_4.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -5280,7 +5280,6 @@
 //----- (00495B39) --------------------------------------------------------
 void __cdecl PlayerCreationUI_Draw()
 {
-  Texture *v0; // edi@1
   const char *uTitleText; // ST10_4@3
   int v2; // eax@3
   IconFrame *v3; // eax@3
@@ -5424,16 +5423,14 @@
   uColorWhite = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
   pRenderer->BeginScene();
   pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX);
-  v0 = pTexture_MAKESKY;
-  pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos, 2u, pTexture_MAKESKY);
-  pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos++ - 640, 2u, v0);
+  pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos, 2, pTexture_MAKESKY);
+  pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos++ - 640, 2, pTexture_MAKESKY);
   if ( (signed int)uPlayerCreationUI_SkySliderPos > 640 )
     uPlayerCreationUI_SkySliderPos = 0;
   pRenderer->DrawTextureTransparent(0, 0, pTexture_MAKETOP);
   uTitleText = pGlobalTXT_LocalizationStrings[51];
-  uPlayerCreationUI_SelectedCharacter = (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38)
-                                      / 7;
-  v2 = pFontCChar->AlignText_Center(640u, pGlobalTXT_LocalizationStrings[51]);
+  uPlayerCreationUI_SelectedCharacter = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) / 7;
+  v2 = pFontCChar->AlignText_Center(640, pGlobalTXT_LocalizationStrings[51]);
   pGUIWindow_CurrentMenu->DrawText(pFontCChar, v2 + 1, 0, 0, uTitleText, 0, 0, 0);
   pRenderer->DrawTextureTransparent(17u, 35u, pPlayerPortraits[(char)pParty->pPlayers[0].uFace]);
   pRenderer->DrawTextureTransparent(176u, 35u, pPlayerPortraits[(char)pParty->pPlayers[1].uFace]);
@@ -5463,7 +5460,7 @@
     v4 = 12;
   }
   pRenderer->DrawTextureTransparent(v4, 29, &pIcons_LOD->pTextures[v3->uTextureID]);
-  uPosActiveItem = pGUIWindow_CurrentMenu->GetControl(pGUIWindow_CurrentMenu->field_2C_focus_id);
+  uPosActiveItem = pGUIWindow_CurrentMenu->GetControl(pGUIWindow_CurrentMenu->pCurrentPosActiveItem);
   pRenderer->DrawTextureTransparent(uPosActiveItem->uZ - 4, uPosActiveItem->uY, pTextures_arrowl[uPlayerCreationUI_ArrowAnim + 1]);
   pRenderer->DrawTextureTransparent(uPosActiveItem->uX - 12, uPosActiveItem->uY, pTextures_arrowr[uPlayerCreationUI_ArrowAnim-- + 1]);
   if ( uPlayerCreationUI_ArrowAnim < 0 )
@@ -9634,12 +9631,12 @@
   pPlayer = pPlayers[uActiveCharacter];
   if ( pPlayer->CanAct() )
   {
-    pDialogueWindow->field_28 = dword_F8B1E0;
+    pDialogueWindow->pNumPresenceButton = dword_F8B1E0;
     result = 1;
   }
   else
   {
-    pDialogueWindow->field_28 = 0;
+    pDialogueWindow->pNumPresenceButton = 0;
     memcpy(&v4, pGUIWindow0, sizeof(v4));
     v4.uFrameX = 483;
     v4.uFrameWidth = 148;
@@ -10762,8 +10759,8 @@
   v52.uFrameX = 483;
   v52.uFrameWidth = 148;
   v52.uFrameZ = 334;
-  v56 = v52.field_38;
-  if ( v52.field_38 < v52.field_38 + v52.field_28 )
+  v56 = v52.pStartingPosActiveItem;
+  if ( v52.pStartingPosActiveItem < v52.pStartingPosActiveItem + v52.pNumPresenceButton )
   {
     v15 = (char *)v54;
     while ( 1 )
@@ -10882,7 +10879,7 @@
 LABEL_49:
       strcpy(v16->pButtonName, v15);
       ++v56;
-      if ( v56 >= v52.field_38 + v52.field_28 )
+      if ( v56 >= v52.pStartingPosActiveItem + v52.pNumPresenceButton )
       {
         v14 = pDialogueWindow;
         break;
@@ -10892,10 +10889,10 @@
   v34 = 0;
   v54 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
   v35 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-  v36 = v14->field_38;
+  v36 = v14->pStartingPosActiveItem;
   v55 = v35;
-  for ( i = v36 + v14->field_28; (signed int)v36 < (signed int)i; i = pDialogueWindow->field_28
-                                                                    + pDialogueWindow->field_38 )
+  for ( i = v36 + v14->pNumPresenceButton; (signed int)v36 < (signed int)i; i = pDialogueWindow->pNumPresenceButton
+                                                                    + pDialogueWindow->pStartingPosActiveItem )
   {
     v37 = v14->GetControl(v36);
     v38 = pFontArrus->CalcTextHeight(v37->pButtonName, &v52, 0, 0);
@@ -10903,7 +10900,7 @@
     v34 += v38;
     ++v36;
   }
-  v39 = v14->field_28;
+  v39 = v14->pNumPresenceButton;
   if ( v39 )
   {
     v58 = (NPCData *)((174 - v34) / v39);
@@ -10911,7 +10908,7 @@
       v58 = (NPCData *)32;
     pInString = (char *)2;
     v40 = (174 - (signed int)v58 * v39 - v34) / 2 - (signed int)v58 / 2 + 138;
-    v56 = v14->field_38;
+    v56 = v14->pStartingPosActiveItem;
     i = v56;
     if ( (signed int)i < (signed int)(i + v39) )
     {
@@ -10927,13 +10924,13 @@
         v40 = v45 + v44 - 1;
         v42->uW = v40;
         v46 = v55;
-        if ( (char *)pDialogueWindow->field_2C_focus_id != pInString )
+        if ( (char *)pDialogueWindow->pCurrentPosActiveItem != pInString )
           v46 = v54;
         v52.DrawText2(pFontArrus, 0, v45, v46, v43, 3u);
         v14 = pDialogueWindow;
         ++pInString;
         ++v56;
-        i = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+        i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
         if ( v56 >= (signed int)i )
           break;
         i = v56;
@@ -11359,8 +11356,8 @@
   }
 LABEL_107:
   pDialogueWindow->_41D08F(a2, 1, 0, 2);
-  result = pDialogueWindow->field_28;
-  dword_F8B1E0 = pDialogueWindow->field_28;
+  result = pDialogueWindow->pNumPresenceButton;
+  dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
   return result;
 }
 
@@ -11384,8 +11381,8 @@
     }
   }
   pDialogueWindow->_41D08F(v1, 1, 0, 2);
-  result = pDialogueWindow->field_28;
-  dword_F8B1E0 = pDialogueWindow->field_28;
+  result = pDialogueWindow->pNumPresenceButton;
+  dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
   return result;
 }
 // F8B1E0: using guessed type int dword_F8B1E0;
@@ -11426,8 +11423,8 @@
     }
   }
 LABEL_7:
-  result = pDialogueWindow->field_28;
-  dword_F8B1E0 = pDialogueWindow->field_28;
+  result = pDialogueWindow->pNumPresenceButton;
+  dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
   return result;
 }
 // F8B1E0: using guessed type int dword_F8B1E0;
@@ -11626,8 +11623,8 @@
       break;
   }
 LABEL_43:
-  result = pDialogueWindow->field_28;
-  dword_F8B1E0 = pDialogueWindow->field_28;
+  result = pDialogueWindow->pNumPresenceButton;
+  dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
   return result;
 }
 // F8B1E0: using guessed type int dword_F8B1E0;
@@ -12046,8 +12043,8 @@
       }
       pDialogueWindow->_41D08F(v1, 1, 0, 2);
       v4 = 1;
-      result = (GUIButton *)pDialogueWindow->field_28;
-      dword_F8B1E0 = pDialogueWindow->field_28;
+      result = (GUIButton *)pDialogueWindow->pNumPresenceButton;
+      dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
     }
     dword_F8B19C = v4;
   }
@@ -12213,8 +12210,8 @@
             v73 = v14 * (100 - v0->GetMerchant()) / 100;
             if ( v73 < v14 / 3 )
               v73 = v14 / 3;
-            v15 = v13->field_38;
-            v16 = v13->field_28;
+            v15 = v13->pStartingPosActiveItem;
+            v16 = v13->pNumPresenceButton;
             v72 = 0;
             if ( (signed int)v15 >= (signed int)(v15 + v16) )
               goto LABEL_76;
@@ -12229,7 +12226,7 @@
               }
               ++v15;
             }
-            while ( (signed int)v15 < v13->field_28 + v13->field_38 );
+            while ( (signed int)v15 < v13->pNumPresenceButton + v13->pStartingPosActiveItem );
             if ( v72 )
             {
               sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v73);// "Skill Cost: %lu"
@@ -12237,11 +12234,11 @@
               v73 = (signed int)(149 - i) / v72;
               if ( v73 > 32 )
                 v73 = 32;
-              result = v13->field_38;
+              result = v13->pStartingPosActiveItem;
               v19 = (signed int)(149 - v72 * v73 - i) / 2 - v73 / 2 + 162;
               i = result;
               v68 = v19;
-              if ( result < result + v13->field_28 )
+              if ( result < result + v13->pNumPresenceButton )
               {
                 v72 = 2;
                 do
@@ -12267,13 +12264,13 @@
                     v21->uW = v26;
                     v68 = v26;
                     v27 = v71;
-                    if ( pDialogueWindow->field_2C_focus_id != v72 )
+                    if ( pDialogueWindow->pCurrentPosActiveItem != v72 )
                       v27 = white;
                     v65.DrawText2(pFontArrus, 0, v25, v27, (char *)HIDWORD(v66), 3u);
                   }
-                  v28 = v13->field_38;
+                  v28 = v13->pStartingPosActiveItem;
                   ++i;
-                  result = v13->field_28 + v28;
+                  result = v13->pNumPresenceButton + v28;
                   ++v72;
                 }
                 while ( (signed int)i < result );
@@ -12301,7 +12298,7 @@
         v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0);
         v65.DrawText2(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u);
         result = (int)pDialogueWindow;
-        pDialogueWindow->field_28 = 0;
+        pDialogueWindow->pNumPresenceButton = 0;
         return result;
       }
       v34 = v0->uLevel;
@@ -12391,8 +12388,8 @@
       v72 = 0;
       pShopOptions[0] = pTmpBuf;
       pShopOptions[1] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
-      v44 = pDialogueWindow->field_28;
-      v73 = pDialogueWindow->field_38;
+      v44 = pDialogueWindow->pNumPresenceButton;
+      v73 = pDialogueWindow->pStartingPosActiveItem;
       if ( v73 < v73 + v44 )
       {
         v45 = pShopOptions;
@@ -12430,14 +12427,14 @@
           ++v45;
           ++v73;
         }
-        while ( v73 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+        while ( v73 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
       }
       HIDWORD(v66) = (174 - v72) / 2;
-      result = v43->field_38;
-      v48 = result + v43->field_28;
+      result = v43->pStartingPosActiveItem;
+      v48 = result + v43->pNumPresenceButton;
       v49 = (2 * (87 - (174 - v72) / 2) - v72) / 2 - (174 - v72) / 2 / 2 + 138;
-      v50 = -v43->field_28 < 0;
-      v73 = v43->field_38;
+      v50 = -v43->pNumPresenceButton < 0;
+      v73 = v43->pStartingPosActiveItem;
       if ( v50 ^ __OFSUB__(result, v48) )
       {
         i = 2;
@@ -12454,14 +12451,14 @@
           v53->uW = v56;
           v49 = v56;
           v57 = v71;
-          if ( pDialogueWindow->field_2C_focus_id != i )
+          if ( pDialogueWindow->pCurrentPosActiveItem != i )
             v57 = white;
           v65.DrawText2(pFontArrus, 0, v55, v57, *v51, 3u);
           v43 = pDialogueWindow;
           ++i;
           ++v51;
           ++v73;
-          result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
         }
         while ( v73 < result );
       }
@@ -12633,11 +12630,11 @@
       while ( (signed int)v77 < (signed int)&pShopOptions[3] );
       v79 = pDialogueWindow;
       _this = (Player *)((174 - v76) / 3);
-      result = pDialogueWindow->field_38;
-      v80 = result + pDialogueWindow->field_28;
+      result = pDialogueWindow->pStartingPosActiveItem;
+      v80 = result + pDialogueWindow->pNumPresenceButton;
       v81 = (3 * (58 - (signed int)_this) - v76) / 2 - (174 - v76) / 3 / 2 + 138;
-      v20 = -pDialogueWindow->field_28 < 0;
-      v118 = pDialogueWindow->field_38;
+      v20 = -pDialogueWindow->pNumPresenceButton < 0;
+      v118 = pDialogueWindow->pStartingPosActiveItem;
       if ( v20 ^ __OFSUB__(result, v80) )
       {
         v122 = 2;
@@ -12654,14 +12651,14 @@
           v81 = v84 + v85 - 1;
           v82->uW = v81;
           v87 = color2;
-          if ( pDialogueWindow->field_2C_focus_id != v86 )
+          if ( pDialogueWindow->pCurrentPosActiveItem != v86 )
             v87 = white;
           v112.DrawText2(pFontArrus, 0, v85, v87, *v119, 3u);
           v79 = pDialogueWindow;
           ++v122;
           ++v119;
           ++v118;
-          result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
         }
         while ( v118 < result );
       }
@@ -12684,8 +12681,8 @@
           v119 = (const char **)(v33 * (100 - _this->GetMerchant()) / 100);
           if ( (signed int)v119 < v33 / 3 )
             v119 = (const char **)(v33 / 3);
-          v34 = v31->field_38;
-          v35 = v34 + v31->field_28;
+          v34 = v31->pStartingPosActiveItem;
+          v35 = v34 + v31->pNumPresenceButton;
           v122 = 0;
           if ( (signed int)v34 >= v35 )
             goto LABEL_140;
@@ -12700,7 +12697,7 @@
             }
             ++v34;
           }
-          while ( (signed int)v34 < v31->field_28 + v31->field_38 );
+          while ( (signed int)v34 < v31->pNumPresenceButton + v31->pStartingPosActiveItem );
           if ( !v122 )
           {
 LABEL_140:
@@ -12722,11 +12719,11 @@
           v119 = (const char **)((149 - v118) / v122);
           if ( (149 - v118) / v122 > 32 )
             v119 = (const char **)32;
-          result = v31->field_38;
+          result = v31->pStartingPosActiveItem;
           v38 = (149 - v122 * (signed int)v119 - v118) / 2 - (signed int)v119 / 2 + 162;
           v118 = result;
           v114 = v38;
-          if ( result < result + v31->field_28 )
+          if ( result < result + v31->pNumPresenceButton )
           {
             v122 = 2;
             do
@@ -12753,13 +12750,13 @@
                 v40->uW = v46;
                 v114 = v46;
                 v47 = color2;
-                if ( pDialogueWindow->field_2C_focus_id != v45 )
+                if ( pDialogueWindow->pCurrentPosActiveItem != v45 )
                   v47 = white;
                 v112.DrawText2(pFontArrus, 0, v44, v47, Str, 3u);
               }
-              v48 = v31->field_38;
+              v48 = v31->pStartingPosActiveItem;
               ++v118;
-              result = v31->field_28 + v48;
+              result = v31->pNumPresenceButton + v48;
               ++v122;
             }
             while ( v118 < result );
@@ -12817,11 +12814,11 @@
         while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
         v17 = pDialogueWindow;
         v114 = (174 - v14) / 4;
-        result = pDialogueWindow->field_38;
-        v18 = result + pDialogueWindow->field_28;
+        result = pDialogueWindow->pStartingPosActiveItem;
+        v18 = result + pDialogueWindow->pNumPresenceButton;
         v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
-        v20 = -pDialogueWindow->field_28 < 0;
-        v122 = pDialogueWindow->field_38;
+        v20 = -pDialogueWindow->pNumPresenceButton < 0;
+        v122 = pDialogueWindow->pStartingPosActiveItem;
         if ( v20 ^ __OFSUB__(result, v18) )
         {
           v119 = (const char **)2;
@@ -12838,14 +12835,14 @@
             v19 = v24 + v23 - 1;
             v21->uW = v19;
             v26 = color2;
-            if ( (const char **)pDialogueWindow->field_2C_focus_id != v25 )
+            if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v25 )
               v26 = white;
             v112.DrawText2(pFontArrus, 0, v24, v26, (const char *)LODWORD(_this->pConditions[0]), 3u);
             v17 = pDialogueWindow;
             v119 = (const char **)((char *)v119 + 1);
             _this = (Player *)((char *)_this + 4);
             ++v122;
-            result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+            result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
           }
           while ( v122 < result );
         }
@@ -13698,7 +13695,7 @@
     v38 = pFontArrus->CalcTextHeight(pNPCTopics[121].pText, &v52, 0, 0);
     v52.DrawText2(pFontArrus, 0, (212 - v38) / 2 + 101, v37, v36, 3u);
     result = (int)pDialogueWindow;
-    pDialogueWindow->field_28 = 0;
+    pDialogueWindow->pNumPresenceButton = 0;
     return result;
   }
   result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
@@ -13708,8 +13705,8 @@
   v5 = 0;
   v62 = 0;
   Str = 0;
-  v21 = pDialogueWindow->field_38;
-  v22 = v21 + pDialogueWindow->field_28;
+  v21 = pDialogueWindow->pStartingPosActiveItem;
+  v22 = v21 + pDialogueWindow->pNumPresenceButton;
   v61 = 0;
   if ( v21 >= v22 )
     goto LABEL_64;
@@ -13741,7 +13738,7 @@
     }
     ++v21;
   }
-  while ( v21 < v20->field_28 + v20->field_38 );
+  while ( v21 < v20->pNumPresenceButton + v20->pStartingPosActiveItem );
   if ( !v61 )
   {
 LABEL_64:
@@ -13765,11 +13762,11 @@
   v63 = (signed int)(149 - v62) / v61;
   if ( v63 > 32 )
     v63 = 32;
-  result = v20->field_38;
+  result = v20->pStartingPosActiveItem;
   v26 = (signed int)(149 - v61 * v63 - v62) / 2 - v63 / 2 + 162;
   v62 = result;
   v55 = v26;
-  if ( result < result + v20->field_28 )
+  if ( result < result + v20->pNumPresenceButton )
   {
     v61 = 2;
     while ( 1 )
@@ -13800,7 +13797,7 @@
         v28->uW = v33;
         v55 = v33;
         v34 = v57;
-        if ( pDialogueWindow->field_2C_focus_id != v61 )
+        if ( pDialogueWindow->pCurrentPosActiveItem != v61 )
           v34 = v56;
         v52.DrawText2(pFontArrus, 0, v32, v34, Str, 3u);
         goto LABEL_58;
@@ -13809,9 +13806,9 @@
       v28->uHeight = 0;
       v28->uY = 0;
 LABEL_58:
-      v35 = v20->field_38;
+      v35 = v20->pStartingPosActiveItem;
       ++v62;
-      result = v20->field_28 + v35;
+      result = v20->pNumPresenceButton + v35;
       ++v61;
       if ( (signed int)v62 >= result )
         return result;
@@ -13928,8 +13925,8 @@
             v64 = (signed int)(v65 * (100 - v6)) / 100;
             if ( v64 < (signed int)v65 / 3 )
               v64 = (signed int)v65 / 3;
-            v7 = v4->field_38;
-            v8 = v7 + v4->field_28;
+            v7 = v4->pStartingPosActiveItem;
+            v8 = v7 + v4->pNumPresenceButton;
             v65 = 0;
             v62 = v7;
             if ( (signed int)v7 >= v8 )
@@ -13943,10 +13940,10 @@
                 v66 = (DDM_DLV_Header *)((char *)v66 + v10);
                 ++v65;
               }
-              v11 = v4->field_38;
+              v11 = v4->pStartingPosActiveItem;
               ++v62;
             }
-            while ( (signed int)v62 < v4->field_28 + v11 );
+            while ( (signed int)v62 < v4->pNumPresenceButton + v11 );
             if ( v65 )
             {
               sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v64);
@@ -13956,9 +13953,9 @@
                 v64 = 32;
               v65 = (signed int)(149 - v65 * v64 - (int)v66) / 2 - v64 / 2 + 162;
               v12 = v61;
-              result = v61->field_38;
-              v13 = result + v61->field_28;
-              v62 = v61->field_38;
+              result = v61->pStartingPosActiveItem;
+              v13 = result + v61->pNumPresenceButton;
+              v62 = v61->pStartingPosActiveItem;
               if ( result < v13 )
               {
                 v66 = (DDM_DLV_Header *)2;
@@ -13985,14 +13982,14 @@
                     v15->uW = v20;
                     v65 = v20;
                     v21 = WORD2(v59);
-                    if ( (DDM_DLV_Header *)pDialogueWindow->field_2C_focus_id != v66 )
+                    if ( (DDM_DLV_Header *)pDialogueWindow->pCurrentPosActiveItem != v66 )
                       v21 = WORD2(v58);
                     v57.DrawText2(pFontArrus, 0, v19, v21, (const char *)HIDWORD(v60), 3u);
                   }
                   result = (int)v61;
                   ++v62;
                   v66 = (DDM_DLV_Header *)((char *)v66 + 1);
-                  if ( (signed int)v62 >= v61->field_28 + v61->field_38 )
+                  if ( (signed int)v62 >= v61->pNumPresenceButton + v61->pStartingPosActiveItem )
                     break;
                   v12 = v61;
                 }
@@ -14149,7 +14146,7 @@
     return result;
   }
   v63 = 1;
-  v41 = pDialogueWindow->GetControl(pDialogueWindow->field_38);
+  v41 = pDialogueWindow->GetControl(pDialogueWindow->pStartingPosActiveItem);
   strcpy(a1, nullstring);
   v41->uHeight = 0;
   v41->uY = 0;
@@ -14164,7 +14161,7 @@
   v43 = pDialogueWindow;
   v44 = v63;
   v66 = 0;
-  if ( v63 < pDialogueWindow->field_28 )
+  if ( v63 < pDialogueWindow->pNumPresenceButton )
   {
     v61 = (GUIWindow *)&a1[100 * v63];
     do
@@ -14175,16 +14172,16 @@
       v61 = (GUIWindow *)((char *)v61 + 100);
       ++v44;
     }
-    while ( v44 < pDialogueWindow->field_28 );
-  }
-  v46 = v43->field_28 - v42;
+    while ( v44 < pDialogueWindow->pNumPresenceButton );
+  }
+  v46 = v43->pNumPresenceButton - v42;
   v64 = (174 - (signed int)v66) / v46;
   if ( v64 > 32 )
     v64 = 32;
-  result = v43->field_38;
+  result = v43->pStartingPosActiveItem;
   v47 = (174 - v64 * v46 - (signed int)v66) / 2 - v64 / 2 + 138;
   v65 = v42 + result;
-  if ( v42 + result < result + v43->field_28 )
+  if ( v42 + result < result + v43->pNumPresenceButton )
   {
     v61 = (GUIWindow *)(v42 + 2);
     v66 = (DDM_DLV_Header *)&a1[100 * v42];
@@ -14200,14 +14197,14 @@
       v47 = v52 + v51 - 1;
       v50->uW = v47;
       v53 = WORD2(v59);
-      if ( (GUIWindow *)pDialogueWindow->field_2C_focus_id != v61 )
+      if ( (GUIWindow *)pDialogueWindow->pCurrentPosActiveItem != v61 )
         v53 = WORD2(v58);
       v57.DrawText2(pFontArrus, 0, v52, v53, (const char *)v66, 3u);
       v43 = pDialogueWindow;
       v66 = (DDM_DLV_Header *)((char *)v66 + 100);
       v61 = (GUIWindow *)((char *)v61 + 1);
       ++v65;
-      result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+      result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
     }
     while ( (signed int)v65 < result );
   }
@@ -14419,7 +14416,7 @@
     v26 = pFontArrus->CalcTextHeight(pNPCTopics[171].pText, &v28, 0, 0);
     v28.DrawText2(pFontArrus, 0, (212 - v26) / 2 + 101, v25, v24, 3u);
     result = (int)pDialogueWindow;
-    pDialogueWindow->field_28 = 0;
+    pDialogueWindow->pNumPresenceButton = 0;
     return result;
   }
   result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
@@ -14429,9 +14426,9 @@
   v33 = 0;
   v34 = 0;
   v29 = pDialogueWindow;
-  v9 = pDialogueWindow->field_38;
-  v10 = v9 + pDialogueWindow->field_28;
-  v35 = pDialogueWindow->field_38;
+  v9 = pDialogueWindow->pStartingPosActiveItem;
+  v10 = v9 + pDialogueWindow->pNumPresenceButton;
+  v35 = pDialogueWindow->pStartingPosActiveItem;
   if ( v9 >= v10 )
     goto LABEL_40;
   do
@@ -14443,10 +14440,10 @@
       v33 += v12;
       ++v34;
     }
-    v13 = v8->field_38;
+    v13 = v8->pStartingPosActiveItem;
     ++v35;
   }
-  while ( v35 < v8->field_28 + v13 );
+  while ( v35 < v8->pNumPresenceButton + v13 );
   if ( !v34 )
   {
 LABEL_40:
@@ -14462,10 +14459,10 @@
   v32 = (149 - v33) / v34;
   if ( (149 - v33) / v34 > 32 )
     v32 = 32;
-  result = v8->field_38;
+  result = v8->pStartingPosActiveItem;
   v35 = result;
   v34 = (149 - v34 * v32 - v33) / 2 - v32 / 2 + 162;
-  if ( result < result + v8->field_28 )
+  if ( result < result + v8->pNumPresenceButton )
   {
     v33 = 2;
     do
@@ -14486,7 +14483,7 @@
           v14->uW = v20;
           v34 = v20;
           v21 = v31;
-          if ( pDialogueWindow->field_2C_focus_id != v33 )
+          if ( pDialogueWindow->pCurrentPosActiveItem != v33 )
             v21 = v30;
           v28.DrawText2(pFontArrus, 0, v19, v21, v17, 3u);
           goto LABEL_34;
@@ -14503,7 +14500,7 @@
       v8 = v29;
       ++v35;
       ++v33;
-      result = v29->field_28 + v29->field_38;
+      result = v29->pNumPresenceButton + v29->pStartingPosActiveItem;
     }
     while ( v35 < result );
   }
@@ -14614,9 +14611,9 @@
       strcpy(&Dest, nullstring);
       sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[405], s1);
       v18 = pFontArrus->CalcTextHeight(pTmpBuf2, &v53, 0, 0);
-      v19 = v16->field_28;
+      v19 = v16->pNumPresenceButton;
       v20 = v18 + v17 + 146;
-      v21 = v16->field_38;
+      v21 = v16->pStartingPosActiveItem;
       v63 = v20;
       v55 = v20;
       v60 = v21;
@@ -14640,7 +14637,7 @@
         {
           v58 = v61;
           v27 = (const char *)v56;
-          if ( pDialogueWindow->field_2C_focus_id != s1 )
+          if ( pDialogueWindow->pCurrentPosActiveItem != s1 )
             v27 = *(const char **)v57;
           v47[1] = v27;
           sprintfex(a1, format_4E2DC8, v27);
@@ -14716,7 +14713,7 @@
           }
         }
         ++v60;
-        if ( (signed int)v60 >= v59->field_28 + v59->field_38 )
+        if ( (signed int)v60 >= v59->pNumPresenceButton + v59->pStartingPosActiveItem )
           break;
         v16 = v59;
       }
--- a/mm7_5.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_5.cpp	Tue Oct 23 17:34:20 2012 +0600
@@ -3400,7 +3400,7 @@
   unsigned int v26; // ecx@127
   unsigned int v27; // eax@129
   unsigned __int8 v28; // of@129
-  SoundID v29; // [sp-2Ch] [bp-3Ch]@36
+  SoundID pSoundID; // [sp-2Ch] [bp-3Ch]@36
   signed int v30; // [sp-28h] [bp-38h]@36
   unsigned int v31; // [sp-24h] [bp-34h]@36
   signed int v32; // [sp-20h] [bp-30h]@36
@@ -3415,17 +3415,19 @@
   signed int v41; // [sp-10h] [bp-20h]@29
   int v42; // [sp-10h] [bp-20h]@36
   int v43; // [sp-10h] [bp-20h]@56
-  unsigned __int8 uClass[4]; // [sp+4h] [bp-Ch]@3
+  int uNum; // [sp+4h] [bp-Ch]@3
   UIMessageType v45; // [sp+8h] [bp-8h]@3
   int v46; // [sp+Ch] [bp-4h]@3
+  Player *pPlayer;
 
   if ( pMessageQueue_50CBD0->uNumMessages )
   {
     //v0 = pAudioPlayer;
     v1 = (char *)pParty->pPlayers;
+	pPlayer = pParty->pPlayers;
     do
     {
-      pMessageQueue_50CBD0->PopMessage(&v45, (int *)uClass, &v46);
+      pMessageQueue_50CBD0->PopMessage(&v45, &uNum, &v46);
       switch (v45)
       {
         case UIMSG_MainMenu_ShowPartyCreationWnd:
@@ -3475,11 +3477,11 @@
           if (pGUIWindow_CurrentMenu->field_40 == 1)
             pKeyActionMap->_459ED1(0);
           if ( pCurrentScreen != 11
-              || uLoadGameUI_SelectedSlot != *(int *)uClass + dword_6A0C9C )
+              || uLoadGameUI_SelectedSlot != uNum + dword_6A0C9C )
           {
             //load clicked line
-              v26 = *(int *)uClass + dword_6A0C9C;
-              if ( dword_6BE138 == *(int *)uClass + dword_6A0C9C )
+              v26 = uNum + dword_6A0C9C;
+              if ( dword_6BE138 == uNum + dword_6A0C9C )
               {
                 pMessageQueue_50CBD0->SendMessage(UIMSG_A4, 0, 0);
                 pMessageQueue_50CBD0->SendMessage(UIMSG_LoadGame, 0, 0);
@@ -3525,24 +3527,23 @@
             GUIWindow::Create(v18, v8, v33, v35, v37, v39, v43);
             continue;
           }
-          if ( v45 == UIMSG_AB )
-          {
-            v23 = (char *)&pParty->pPlayers[*(int *)uClass];
-            v24 = (int)(v23 + 186);
-            v12 = (char)(v23[186] - 1) < 0;
-            --*(char *)v24;
+          if ( v45 == UIMSG_AB ) // sellect face -1
+          {
+            pPlayer = &pParty->pPlayers[uNum];
+            v12 = (char)((int)pPlayer->uFace - 1) < 0;
+            --pPlayer->uFace;
             if ( v12 )
-              *(char *)v24 = 19;
-            *((int *)v23 + 1608) = *(char *)v24;
-            ((Player *)v23)->SetInitialStats();
-            ((Player *)v23)->SetSexByVoice();
-            ((Player *)v23)->RandomizeName();
-            v25 = *(int *)uClass;
-            pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
-                                                       - pGUIWindow_CurrentMenu->field_38)
+              pPlayer->uFace = 19;
+            pPlayer->uVoiceID = pPlayer->uFace;
+            pPlayer->SetInitialStats();
+            pPlayer->SetSexByVoice();
+            pPlayer->RandomizeName();
+            v25 = uNum;
+            pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem
+                                                       - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                                                       % 7
-                                                      + pGUIWindow_CurrentMenu->field_38
-                                                      + 7 * *(int *)uClass;
+                                                      + pGUIWindow_CurrentMenu->pStartingPosActiveItem
+                                                      + 7 * uNum;
             uPlayerCreationUI_SelectedCharacter = v25;
             GUIWindow::Create(
               pCreationUI_BtnPressLeft[v25]->uX,
@@ -3554,24 +3555,24 @@
               1);
             //v0 = pAudioPlayer;
             pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0.0, 0);
-            v22 = (Player *)v23;
+            v22 = pPlayer;
             goto LABEL_117;
           }
-          if ( v45 == UIMSG_AC )
-          {
-            v19 = (int)&v1[6972 * *(int *)uClass];
-            v20 = (char)(*(char *)(v19 + 186) + 1) % 20;
-            *(char *)(v19 + 186) = v20;
-            *(int *)(v19 + 6432) = v20;
-            ((Player *)v19)->SetInitialStats();
-            ((Player *)v19)->SetSexByVoice();
-            ((Player *)v19)->RandomizeName();
-            v21 = *(int *)uClass;
-            pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
-                                                       - pGUIWindow_CurrentMenu->field_38)
+          if ( v45 == UIMSG_AC ) //sellect face +1
+          {
+            pPlayer = &pParty->pPlayers[uNum];
+			v20 = (char)((int)pPlayer->uFace + 1) % 20;
+            pPlayer->uFace = v20;
+            pPlayer->uVoiceID = v20;
+            pPlayer->SetInitialStats();
+            pPlayer->SetSexByVoice();
+            pPlayer->RandomizeName();
+            v21 = uNum;
+            pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem
+                                                       - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                                                       % 7
-                                                      + pGUIWindow_CurrentMenu->field_38
-                                                      + 7 * *(int *)uClass;
+                                                      + pGUIWindow_CurrentMenu->pStartingPosActiveItem
+                                                      + 7 * uNum;
             uPlayerCreationUI_SelectedCharacter = v21;
             GUIWindow::Create(
               pCreationUI_BtnPressRight[v21]->uX,
@@ -3583,7 +3584,7 @@
               1);
             //v0 = pAudioPlayer;
             pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0);
-            v22 = (Player *)v19;
+            v22 = pPlayer;
 LABEL_117:
             v22->PlaySound(102, 0);
             v1 = (char *)pParty->pPlayers;
@@ -3623,8 +3624,8 @@
         if ( v45 == UIMSG_A3 )
         {
           ++dword_6A0C9C;
-          if ( dword_6A0C9C >= *(int *)uClass )
-            dword_6A0C9C = *(int *)uClass - 1;
+          if ( dword_6A0C9C >= uNum )
+            dword_6A0C9C = uNum - 1;
           if ( dword_6A0C9C < 1 )
             dword_6A0C9C = 0;
           v7 = pGUIWindow_CurrentMenu;
@@ -3725,12 +3726,12 @@
         {
           if ( v45 == 118 )
           {
-            v14 = *(int *)uClass;
-            pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
-                                                       - pGUIWindow_CurrentMenu->field_38)
+            v14 = uNum;
+            pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem
+                                                       - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
                                                       % 7
-                                                      + pGUIWindow_CurrentMenu->field_38
-                                                      + 7 * *(int *)uClass;
+                                                      + pGUIWindow_CurrentMenu->pStartingPosActiveItem
+                                                      + 7 * uNum;
             uPlayerCreationUI_SelectedCharacter = v14;
 LABEL_36:
             v42 = 0;
@@ -3740,14 +3741,14 @@
             v32 = -1;
             v31 = 0;
             v30 = 0;
-            v29 = (SoundID)66;
+            pSoundID = (SoundID)66;
 LABEL_40:
-            pAudioPlayer->PlaySound(v29, v30, v31, v32, v34, v36, v38, v42);
+            pAudioPlayer->PlaySound(pSoundID, v30, v31, v32, v34, v36, v38, v42);
             continue;
           }
           if ( v45 == 144 )
           {
-            v9 = (Player *)&v1[6972 * *(int *)uClass];
+            v9 = &pPlayer[uNum];
             v46 = v9->GetSexByVoice();
             do
             {
@@ -3757,12 +3758,12 @@
               v13 = v9->GetSexByVoice();
             }
             while ( v13 != v46 );
-            v11 = pCreationUI_BtnPressLeft2[*(int *)uClass];
+            v11 = pCreationUI_BtnPressLeft2[uNum];
             goto LABEL_60;
           }
           if ( v45 == 145 )
           {
-            v9 = (Player *)&v1[6972 * *(int *)uClass];
+            v9 = &pPlayer[uNum];
             v46 = v9->GetSexByVoice();
             do
             {
@@ -3770,7 +3771,7 @@
               v10 = v9->GetSexByVoice();
             }
             while ( v10 != v46 );
-            v11 = pCreationUI_BtnPressRight2[*(int *)uClass];
+            v11 = pCreationUI_BtnPressRight2[uNum];
 LABEL_60:
             GUIWindow::Create(v11->uX, v11->uY, 0, 0, (enum WindowType)92, (int)v11, 1);
             pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0);
@@ -3800,21 +3801,21 @@
       {
         if ( v45 == 75 )
         {
-          uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
+          uPlayerCreationUI_SelectedCharacter = uNum;
           v41 = 3;
           v1 = (char *)pParty->pPlayers;
-          v5 = (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7
-             + pGUIWindow_CurrentMenu->field_38
-             + 7 * *(int *)uClass;
+          v5 = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7
+             + pGUIWindow_CurrentMenu->pStartingPosActiveItem
+             + 7 * uNum;
           goto LABEL_44;
         }
         if ( (signed int)v45 > 60 )
         {
-          if ( v45 == 62 )
-          {
-            GUIWindow::Create(0x265u, 0x189u, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnPlus, 1);
-            ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->IncreaseAttribute(
-              (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7);
+          if ( v45 == 62 ) //click +
+          {
+            GUIWindow::Create(613, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnPlus, 1);
+            (&pPlayer[uPlayerCreationUI_SelectedCharacter])->IncreaseAttribute(
+              (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
             v42 = 0;
             v38 = 0;
             v36 = 0;
@@ -3822,14 +3823,14 @@
             v32 = -1;
             v31 = 0;
             v30 = 0;
-            v29 = (SoundID)20;
+            pSoundID = (SoundID)20;
             goto LABEL_40;
           }
-          if ( v45 == 63 )
-          {
-            GUIWindow::Create(0x20Bu, 0x189u, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnMinus, 1);
-            ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->DecreaseAttribute(
-              (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7);
+          if ( v45 == 63 ) // click -
+          {
+            GUIWindow::Create(523, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnMinus, 1);
+            (&pPlayer[uPlayerCreationUI_SelectedCharacter])->DecreaseAttribute(
+              (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
             v42 = 0;
             v38 = 0;
             v36 = 0;
@@ -3837,14 +3838,13 @@
             v32 = -1;
             v31 = 0;
             v30 = 0;
-            v29 = (SoundID)23;
+            pSoundID = (SoundID)23;
             goto LABEL_40;
           }
-          if ( v45 == 64 )
-          {
-            auto _t = (Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter];
-            v6 = _t->GetSkillIdxByOrder(
-                   *(int *)uClass + 4);
+          if ( v45 == 64 ) // sellect active skill
+          {
+            auto _t = &pPlayer[uPlayerCreationUI_SelectedCharacter];
+            v6 = _t->GetSkillIdxByOrder(uNum + 4);
             if ( _t->GetSkillIdxByOrder(3) == 37 )
               pParty->pPlayers[0].pActiveSkills[v6 + 3486 * uPlayerCreationUI_SelectedCharacter] = 1;
             v42 = 0;
@@ -3854,15 +3854,15 @@
             v32 = -1;
             v31 = 0;
             v30 = 0;
-            v29 = (SoundID)24;
+            pSoundID = (SoundID)24;
             goto LABEL_40;
           }
           if ( v45 == 65 )
           {
-            ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->Reset(uClass[0]);
+            (&pPlayer[uPlayerCreationUI_SelectedCharacter])->Reset(0);
             goto LABEL_36;
           }
-          if ( v45 == 66 )
+          if ( v45 == 66 ) // click ok
           {
             GUIWindow::Create(0x244u, 0x1AFu, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnOK, 0);
             if ( PlayerCreation_ComputeAttributeBonus() || !sub_4908DE() )
@@ -3871,7 +3871,7 @@
               uGameState = 6;
             continue;
           }
-          if ( v45 == 67 )
+          if ( v45 == 67 ) // click reset
           {
             GUIWindow::Create(0x20Fu, 0x1AFu, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnReset, 0);
             pParty->Reset();
@@ -3880,14 +3880,14 @@
           {
             if ( v45 == 74 )
             {
-              uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
-              v4 = pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38;
-              v46 = pGUIWindow_CurrentMenu->field_38;
+              uPlayerCreationUI_SelectedCharacter = uNum;
+              v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem;
+              v46 = pGUIWindow_CurrentMenu->pStartingPosActiveItem;
               v41 = 2;
-              v5 = v4 % 7 + v46 + 7 * *(int *)uClass;
+              v5 = (v4 % 7) + v46 + 7 * uNum;
 LABEL_44:
-              pGUIWindow_CurrentMenu->field_2C_focus_id = v5;
-              pParty->pPlayers[0].pActiveSkills[((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41)
+              pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v5;
+              pParty->pPlayers[0].pActiveSkills[(&pPlayer[uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41)
                                              + 3486 * uPlayerCreationUI_SelectedCharacter] = 0;
               continue;
             }
@@ -3899,8 +3899,8 @@
           {
             case 60:
               pAudioPlayer->PlaySound((SoundID)24, 0, 0, -1, 0, 0, 0, 0);
-              v3 = *(void **)uClass;
-              uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
+              v3 = (void *)uNum;
+              uPlayerCreationUI_SelectedCharacter = uNum;
               pKeyActionMap->_459E5A(0, 15, pGUIWindow_CurrentMenu);
               pGUIWindow_CurrentMenu->ptr_1C = v3;
               break;