changeset 269:b34b53ee874d

skill_learn_ability_by_class_table[36][37]
author Ritor1
date Mon, 18 Feb 2013 16:02:02 +0600
parents fb890fb66cad
children d5c41d5e01e0
files mm7_5.cpp mm7_data.cpp mm7_data.h
diffstat 3 files changed, 106 insertions(+), 61 deletions(-) [+]
line wrap: on
line diff
--- a/mm7_5.cpp	Mon Feb 18 12:51:51 2013 +0600
+++ b/mm7_5.cpp	Mon Feb 18 16:02:02 2013 +0600
@@ -16766,74 +16766,73 @@
 //----- (00417AD4) --------------------------------------------------------
 unsigned int __fastcall sub_417AD4(unsigned int uPlayerClass, enum PLAYER_SKILL_TYPE uPlayerSkillType, signed int a3)
 {
-  enum PLAYER_SKILL_TYPE v3; // ebx@1
-  signed int v4; // edi@1
+  //enum PLAYER_SKILL_TYPE v3; // ebx@1
+  //signed int v4; // edi@1
   unsigned int v5; // ecx@1
   int v6; // edx@1
   int v7; // eax@7
   int v8; // eax@10
   unsigned __int8 v9; // sf@10
   unsigned __int8 v10; // of@10
-  int v11; // eax@11
+  //int v11; // eax@11
   int v12; // eax@14
   unsigned int yellow; // [sp+Ch] [bp-Ch]@1
   unsigned int red; // [sp+10h] [bp-8h]@1
   unsigned int white; // [sp+14h] [bp-4h]@1
 
-  v3 = uPlayerSkillType;
-  v4 = uPlayerClass;
+  //v3 = uPlayerSkillType;
+  //v4 = uPlayerClass;
   white = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
   red = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0);
   yellow = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0);
   v5 = 0;
-  v6 = v4 % 4;
-  if ( !(v4 % 4) )
-  {
-    v11 = 37 * v4 + v3;
-    if ( byte_4ED970_skill_learn_ability_by_class_table[0][v11] >= a3 )
-      goto LABEL_8;
-    if ( byte_4ED970_skill_learn_ability_by_class_table[1][v11] < a3
-      && byte_4ED970_skill_learn_ability_by_class_table[2][v11] < a3 )
-    {
-      v12 = byte_4ED970_skill_learn_ability_by_class_table[3][v11];
-      v10 = __OFSUB__(v12, a3);
-      v9 = v12 - a3 < 0;
-LABEL_15:
-      v5 = red;
-      if ( v9 ^ v10 )
-        return v5;
+  //v6 = uPlayerClass % 4;
+  if ( !(uPlayerClass % 4) )
+  {
+    //v11 = 37 * uPlayerClass + uPlayerSkillType;
+    if ( byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass][uPlayerSkillType] >= a3 )
+      return white;
+    if ( byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass + 1][uPlayerSkillType] < a3
+      && byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass + 2][uPlayerSkillType] < a3 )
+    {
+      v12 = byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass + 3][uPlayerSkillType];
+      //v10 = __OFSUB__(v12, a3);
+      //v9 = v12 - a3 < 0;
+//LABEL_15:
+      //v5 = red;
+      if ( v12 < a3 )
+        return red;
     }
     return yellow;
   }
   if ( v6 == 1 )
   {
-    v7 = 37 * v4 + v3;
-    if ( byte_4ED970_skill_learn_ability_by_class_table[0][v7] >= a3 )
-      goto LABEL_8;
-    if ( byte_4ED970_skill_learn_ability_by_class_table[1][v7] < a3 )
-    {
-      v8 = byte_4ED970_skill_learn_ability_by_class_table[2][v7];
-      v10 = __OFSUB__(v8, a3);
-      v9 = v8 - a3 < 0;
-      goto LABEL_15;
+    //v7 = 37 * uPlayerClass + uPlayerSkillType;
+    if ( byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass][uPlayerSkillType] >= a3 )
+      return white;
+    if ( byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass + 1][uPlayerSkillType] < a3 )
+    {
+      v8 = byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass + 2][uPlayerSkillType];
+      //v10 = __OFSUB__(v8, a3);
+      //v9 = v8 - a3 < 0;
+      if ( v8 < a3)
+		  return red;
     }
     return yellow;
   }
-  if ( v6 > 1 && v6 <= 3 )
-  {
-    if ( byte_4ED970_skill_learn_ability_by_class_table[v4][v3] < a3 )
+  if ( v6 == 2 || v6 == 3 )
+  {
+    if ( byte_4ED970_skill_learn_ability_by_class_table[uPlayerClass][uPlayerSkillType] < a3 )
       return red;
-LABEL_8:
-    v5 = white;
-  }
-  return v5;
+  }
+  return white;
 }
 
 //----- (00417BB5) --------------------------------------------------------
 const char *__fastcall CharacterUI_GetSkillDescText(unsigned int uPlayerID, enum PLAYER_SKILL_TYPE uPlayerSkillType)
 {
-  enum PLAYER_SKILL_TYPE v2; // esi@1
-  unsigned int v3; // ebx@1
+  //enum PLAYER_SKILL_TYPE v2; // esi@1
+  //unsigned int v3; // ebx@1
   int v4; // edi@1
   int v5; // eax@1
   Player *pPlayer; // ebx@7
@@ -16865,11 +16864,11 @@
   unsigned __int16 *v33; // [sp+534h] [bp-10h]@1
   int v34; // [sp+538h] [bp-Ch]@1
   unsigned __int16 *v35; // [sp+53Ch] [bp-8h]@1
-  enum PLAYER_SKILL_TYPE v36; // [sp+540h] [bp-4h]@1
-
-  v2 = uPlayerSkillType;
-  v3 = uPlayerID;
-  v36 = uPlayerSkillType;
+  //enum PLAYER_SKILL_TYPE v36; // [sp+540h] [bp-4h]@1
+
+  //v2 = uPlayerSkillType;
+  //v3 = uPlayerID;
+  //v36 = uPlayerSkillType;
   v4 = pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[431]);// Normal
   v34 = pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[433]);// Expert
   v33 = (unsigned __int16 *)pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[432]);// Master
@@ -16881,30 +16880,30 @@
     v35 = v33;
   if ( v5 > (signed int)v35 )
     v35 = (unsigned __int16 *)v5;
-  pPlayer = &pParty->pPlayers[v3];
-  v33 = &pPlayer->pActiveSkills[v2];
-  v7 = pPlayer->GetActualSkillLevel(v2);
-  v8 = LOBYTE(pPlayer->pActiveSkills[v2]);
+  pPlayer = &pParty->pPlayers[uPlayerID];
+  //v33 = &pPlayer->pActiveSkills[uPlayerSkillType];
+  v7 = pPlayer->GetActualSkillLevel(uPlayerSkillType);
+  v8 = pPlayer->pActiveSkills[uPlayerSkillType];
   a2[0] = 0;
   Source[0] = 0;
   if ( (v8 & 0x3F) == (v7 & 0x3F) )
   {
     strcpy(a2, "%s\n\n");
-    v24 = sub_417AD4(pPlayer->classType, v2, 1);
+    v24 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 1);
     sprintf(Source, format_4E2DC8, v24);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
-    v25 = sub_417AD4(pPlayer->classType, v36, 2);
+    v25 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 2);
     sprintf(Source, format_4E2DC8, v25);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
-    v26 = sub_417AD4(pPlayer->classType, v36, 3);
+    v26 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 3);
     sprintf(Source, format_4E2DC8, v26);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
     v27 = pPlayer->classType;
-    v28 = v36;
-    v29 = sub_417AD4(v27, v36, 4);
+    v28 = uPlayerSkillType;
+    v29 = sub_417AD4(v27, uPlayerSkillType, 4);
     sprintf(Source, format_4E2DC8, v29);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
@@ -16919,20 +16918,20 @@
   else
   {
     strcpy(a2, "%s\n\n");
-    v9 = sub_417AD4(pPlayer->classType, v2, 1);
+    v9 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 1);
     sprintf(Source, format_4E2DC8, v9);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
-    v10 = sub_417AD4(pPlayer->classType, v36, 2);
+    v10 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 2);
     sprintf(Source, format_4E2DC8, v10);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
-    v11 = sub_417AD4(pPlayer->classType, v36, 3);
+    v11 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 3);
     sprintf(Source, format_4E2DC8, v11);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n");
-    v12 = v36;
-    v13 = sub_417AD4(pPlayer->classType, v36, 4);
+    v12 = uPlayerSkillType;
+    v13 = sub_417AD4(pPlayer->classType, uPlayerSkillType, 4);
     sprintf(Source, format_4E2DC8, v13);
     strcat(a2, Source);
     strcat(a2, "%s\t%03d:\t%03d%s\t000\n\n");
@@ -16944,7 +16943,7 @@
     v16 = (int)(v35 + 5);
     v15 = (PLAYER_SKILL_TYPE)((int)v15 * 4);
     v34 = (int)((char *)v35 + 3);
-    v17 = pPlayer->GetActualSkillLevel(v36);
+    v17 = pPlayer->GetActualSkillLevel(uPlayerSkillType);
     v18 = *(int *)((char *)pGrandSkillDesc + v15);
     v19 = *(int *)((char *)pMasterSkillDesc + v15);
     v20 = *(int *)((char *)pExpertSkillDesc + v15);
--- a/mm7_data.cpp	Mon Feb 18 12:51:51 2013 +0600
+++ b/mm7_data.cpp	Mon Feb 18 16:02:02 2013 +0600
@@ -1262,7 +1262,53 @@
   {17,  0,  0,  0,  0,  0,  0,  0}
 };
 __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4] = {34, 149, 264, 379};
-char byte_4ED970_skill_learn_ability_by_class_table[32][37];
+char byte_4ED970_skill_learn_ability_by_class_table[36][37] = 
+{
+ 2, 3, 2, 3, 3, 2, 3, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 2, 1, 0, 1, 2, 2, 0, 3, 0, 0, 1,//Knight
+ 2, 3, 2, 3, 3, 2, 3, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 2, 1, 0, 1, 2, 2, 0, 3, 0, 0, 1,
+ 2, 4, 2, 3, 4, 2, 3, 4, 4, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 0, 2, 1, 0, 1, 2, 2, 0, 4, 0, 0, 1,
+ 2, 4, 2, 3, 4, 2, 3, 4, 4, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 0, 2, 1, 0, 1, 2, 2, 0, 4, 0, 0, 1,
+ 
+ 0, 3, 3, 0, 0, 2, 2, 4, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 2, 0, 3, 0, 0, 3, 3, 2, 0, 3, 3, 2, 2,//Thief
+ 0, 3, 3, 0, 0, 2, 2, 4, 1, 3, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 2, 0, 3, 0, 0, 3, 3, 2, 0, 3, 3, 2, 2,
+ 0, 3, 4, 0, 0, 2, 2, 4, 1, 4, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 2, 0, 3, 0, 0, 4, 3, 2, 0, 3, 4, 2, 2,
+ 0, 3, 4, 0, 0, 2, 2, 4, 1, 4, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 3, 3, 1, 2, 0, 3, 0, 0, 4, 3, 2, 0, 3, 4, 2, 2,
+
+ 3, 2, 2, 0, 2, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 1, 0, 1, 3, 3, 2, 3, 1, 0, 3,//Monk
+ 3, 2, 2, 0, 2, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 3, 0, 2, 1, 0, 2, 3, 3, 2, 3, 1, 0, 3,
+ 4, 2, 2, 0, 2, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 4, 0, 2, 1, 0, 2, 4, 4, 2, 3, 1, 0, 4,
+ 4, 2, 2, 0, 2, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 4, 0, 2, 1, 0, 3, 4, 4, 2, 3, 2, 0, 4,
+
+ 1, 3, 2, 2, 2, 2, 3, 4, 3, 2, 2, 3, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 2, 3, 3, 2, 1, 3, 0, 0, 1, 1, 0, 2, 0, 0, 1,//Paladin
+ 1, 3, 2, 2, 2, 2, 3, 4, 3, 2, 2, 3, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 3, 3, 2, 1, 3, 0, 0, 1, 1, 0, 2, 0, 0, 1,
+ 1, 3, 2, 2, 2, 2, 4, 4, 4, 2, 2, 3, 0, 0, 0, 0, 3, 3, 3, 1, 0, 0, 2, 4, 3, 2, 1, 4, 0, 0, 1, 1, 0, 2, 0, 0, 1,
+ 1, 3, 2, 2, 2, 2, 4, 4, 4, 2, 2, 3, 0, 0, 0, 0, 3, 3, 3, 0, 1, 0, 2, 4, 3, 2, 1, 4, 0, 0, 1, 1, 0, 2, 0, 0, 1,
+
+ 1, 2, 2, 2, 3, 3, 0, 4, 0, 3, 3, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 0, 0, 1, 2, 1, 0, 2, 0, 0, 3,//Archer
+ 1, 2, 2, 2, 3, 3, 0, 4, 0, 3, 3, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 0, 0, 1, 2, 1, 0, 2, 0, 0, 3,
+ 1, 2, 2, 2, 3, 4, 0, 4, 0, 3, 4, 0, 3, 3, 3, 3, 0, 0, 0, 1, 0, 0, 2, 2, 2, 2, 4, 0, 0, 2, 2, 1, 0, 2, 0, 0, 3,
+ 1, 2, 2, 2, 3, 4, 0, 4, 0, 3, 4, 0, 3, 3, 3, 3, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 4, 0, 0, 2, 2, 1, 0, 2, 0, 0, 3,
+
+ 1, 2, 2, 3, 2, 3, 0, 4, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 1, 3, 2, 0, 2, 2, 1, 3, 2, 2, 1, 2,//Ranger
+ 1, 2, 2, 3, 2, 3, 0, 4, 2, 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 2, 1, 3, 2, 0, 2, 2, 1, 3, 2, 2, 1, 2,
+ 1, 2, 2, 4, 2, 3, 0, 4, 2, 3, 3, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 1, 3, 2, 0, 2, 2, 1, 4, 2, 2, 1, 2,
+ 1, 2, 2, 4, 2, 3, 0, 4, 2, 3, 3, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 1, 3, 2, 0, 2, 2, 1, 4, 2, 2, 1, 2,
+
+ 1, 0, 0, 0, 0, 2, 3, 4, 3, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 3, 3, 1, 3, 2, 3, 0, 0, 0, 0, 2, 0, 0, 2, 3,//Cleric
+ 1, 0, 0, 0, 0, 2, 3, 4, 3, 2, 2, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 3, 3, 1, 3, 2, 3, 0, 0, 0, 0, 2, 0, 0, 2, 3,
+ 1, 0, 0, 0, 0, 2, 3, 4, 3, 2, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 4, 3, 1, 3, 2, 3, 0, 0, 0, 0, 2, 0, 0, 2, 3,
+ 1, 0, 0, 0, 0, 2, 3, 4, 3, 2, 2, 0, 0, 0, 0, 0, 4, 4, 4, 0, 4, 0, 4, 3, 1, 3, 2, 3, 0, 0, 0, 0, 2, 0, 0, 2, 3,
+
+ 1, 0, 3, 0, 0, 1, 2, 4, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 3, 2, 0, 0, 0, 0, 0, 2, 1, 0, 3, 3,//Druid
+ 1, 0, 3, 0, 0, 1, 2, 4, 2, 2, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 2, 2, 0, 0, 3, 2, 0, 0, 0, 0, 0, 2, 1, 0, 3, 3,
+ 1, 0, 3, 0, 0, 1, 2, 4, 2, 2, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 2, 2, 0, 0, 4, 2, 0, 0, 0, 0, 0, 2, 1, 0, 4, 3,
+ 1, 0, 3, 0, 0, 1, 2, 4, 2, 2, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 2, 2, 0, 0, 4, 2, 0, 0, 0, 0, 0, 2, 1, 0, 4, 3,
+
+ 3, 0, 2, 0, 0, 1, 0, 4, 0, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 1, 2, 0, 3, 2, 1, 0, 0, 0, 0, 3, 0, 0, 3, 3,//Sorcerer
+ 3, 0, 2, 0, 0, 1, 0, 4, 0, 2, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 1, 2, 0, 3, 2, 1, 0, 0, 0, 0, 3, 0, 0, 3, 3,
+ 3, 0, 2, 0, 0, 1, 0, 4, 0, 2, 0, 0, 4, 4, 4, 4, 0, 0, 0, 4, 0, 4, 1, 2, 0, 3, 2, 1, 0, 0, 0, 0, 4, 0, 0, 3, 3,
+ 3, 0, 2, 0, 0, 1, 0, 4, 0, 2, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 1, 2, 0, 3, 2, 1, 0, 0, 0, 0, 4, 0, 0, 3, 3,
+};
 int dword_4EDEA0[777]; // weak
 int dword_4EDEB4[777]; // weak
 int dword_4EDEC4[777]; // weak
--- a/mm7_data.h	Mon Feb 18 12:51:51 2013 +0600
+++ b/mm7_data.h	Mon Feb 18 16:02:02 2013 +0600
@@ -981,7 +981,7 @@
 extern unsigned char SoundSetAction[110][8]; // weak
 //extern unsigned char byte_4ED498; // weak
 extern __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4];
-extern char byte_4ED970_skill_learn_ability_by_class_table[32][37];
+extern char byte_4ED970_skill_learn_ability_by_class_table[36][37];
 extern int dword_4EDEA0[]; // weak
 extern int dword_4EDEB4[]; // weak
 extern int dword_4EDEC4[]; // weak