changeset 1008:446175a32a15

player math fix
author Gloval
date Sat, 18 May 2013 22:41:26 +0400
parents 7e4045b6f191
children a32318b557c7 f73e1a219d38
files Player.cpp Player.h
diffstat 2 files changed, 11 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/Player.cpp	Sat May 18 22:01:42 2013 +0400
+++ b/Player.cpp	Sat May 18 22:41:26 2013 +0400
@@ -1982,7 +1982,7 @@
   }
   else
   {
-    if ( v1 >= 0 )
+    if ( (v1&0xFF) >= 0 )
     {
       v4 = ((v1 & 0x40) != 0) + 1;
       return v2 * v4;
@@ -1997,27 +1997,27 @@
 int Player::GetMeditation()
 {
   char v1; // al@1
-  int v2; // ecx@1
+  int base_level; // ecx@1
   int v4; // eax@3
   signed int v6; // [sp-4h] [bp-4h]@2
 
   v1 = GetActualSkillLevel(PLAYER_SKILL_MEDITATION);
-  v2 = v1 & 0x3F;
+  base_level = v1 & 0x3F;
   if ( v1 & 0x100 )
   {
     v6 = 5;
   }
   else
   {
-    if ( v1 >= 0 )
+    if ( (v1&0xFF) >= 0 )
     {
       v4 = ((v1 & 0x40) != 0) + 1;
-      return v2 * v4;
+      return base_level * v4;
     }
     v6 = 3;
   }
   v4 = v6;
-  return v2 * v4;
+  return base_level * v4;
 }
 
 //----- (004910D3) --------------------------------------------------------
@@ -5644,8 +5644,8 @@
 }
 
 //----- (0048F882) --------------------------------------------------------
-char Player::GetActualSkillLevel(PLAYER_SKILL_TYPE uSkillType)
-{
+int Player::GetActualSkillLevel( PLAYER_SKILL_TYPE uSkillType )
+    {
   signed int v2; // esi@1
   unsigned __int16 v3; // ax@126
   char result; // al@127
@@ -5875,10 +5875,10 @@
   }
 
   v3 = pActiveSkills[uSkillType];
-  if ( v2 + (pActiveSkills[uSkillType] & 0x3F) < 60 )
+  if ( v2 + (v3 & 0x3F) < 60 )
     result = v2 + v3;
   else
-    result = v3 & 0xFC | 0x3C;
+    result = v3 & 0xFFFC | 0x3C; //al
   return result;
 }
 
--- a/Player.h	Sat May 18 22:01:42 2013 +0400
+++ b/Player.h	Sat May 18 22:41:26 2013 +0400
@@ -515,7 +515,7 @@
   int _48EA46_calc_special_bonus_by_items(int a2);
   int GetItemsBonus(enum CHARACTER_ATTRIBUTE_TYPE attr, int a3);
   int GetMagicalBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
-  char GetActualSkillLevel(PLAYER_SKILL_TYPE uSkillType);
+  int GetActualSkillLevel(PLAYER_SKILL_TYPE uSkillType);
   int GetSkillBonus(enum CHARACTER_ATTRIBUTE_TYPE a2);
   enum CHARACTER_RACE GetRace();
   PLAYER_SEX GetSexByVoice();