changeset 1034:aa848c90181f

Merge
author Nomad
date Tue, 21 May 2013 23:45:26 +0200
parents 3a5c8df8381d (current diff) 9408f98f4929 (diff)
children 306ec23b37df 7f8be9f9769e
files Player.cpp
diffstat 1 files changed, 160 insertions(+), 339 deletions(-) [+]
line wrap: on
line diff
--- a/Player.cpp	Tue May 21 23:44:51 2013 +0200
+++ b/Player.cpp	Tue May 21 23:45:26 2013 +0200
@@ -4531,31 +4531,25 @@
 //----- (0048EA46) --------------------------------------------------------
 int Player::_48EA46_calc_special_bonus_by_items(int a2)
 {
-  int v3; // esi@1
-  int v4; // edx@2
-  int v5; // eax@3
-  char *v6; // eax@4
-
-  v3 = 0;
-  while ( 1 )
-  {
-    if ( !HasItemEquipped((ITEM_EQUIP_TYPE)v3) )
-      goto LABEL_11;
-    v5 = pEquipment.pIndices[v3]  - 1;
-    if ( a2 != 17 )
-    {
-      if ( a2 != 24 || this->pInventoryItems[v5].uSpecEnchantmentType != 24 )
-        goto LABEL_11;
-      return 5;
-    }
-    v6 = (char *)this + 36 * v5;
-    if ( *((int *)v6 + 133) == 533 || *((int *)v6 + 136) == 17 )
-      return 50;
-LABEL_11:
-    ++v3;
-    if ( (signed int)v3 >= 16 )
-      return 0;
-  }
+  int inv_indx; // eax@3
+
+  for (int i=EQUIP_OFF_HAND; i<EQUIP_BOOK; ++i )
+      {
+      if ( !HasItemEquipped((ITEM_EQUIP_TYPE)i) )
+          continue;
+      inv_indx = pEquipment.pIndices[i]  - 1;
+      if (a2==17)
+          {
+          if ((pInventoryItems[inv_indx].uSpecEnchantmentType==17)||(pInventoryItems[inv_indx].uItemID=533)) //Elven Chainmail+Increases rate of Recovery
+              return 50;
+          }
+      if (a2==24)
+          {
+          if (pInventoryItems[inv_indx].uSpecEnchantmentType==24) //Increased Knockback.
+              return 5;
+          }
+      }
+  return 0;
 }
 
 //----- (0048EAAE) --------------------------------------------------------
@@ -6836,78 +6830,29 @@
 void Player::UseItem_DrinkPotion_etc(signed int player_num, int a3)
     {
     Player *v3; // esi@1
-    unsigned int v4; // ebx@4
     signed int v5; // eax@17
-    unsigned int v6; // eax@26
-    unsigned __int8 v7; // cf@37
     int v8; // edx@39
-    int v9; // edx@40
-    int v10; // edx@41
-    int v11; // edx@42
-    int v12; // edx@43
     char *v13; // eax@45
-    AudioPlayer *v14; // ecx@62
     signed int v15; // edi@68
     int v16; // edx@73
     unsigned __int16 v17; // edi@73
     unsigned int v18; // eax@73
-    int v19; // eax@74
-    int v20; // eax@75
-    signed int v21; // eax@81
     const char *v22; // eax@84
-    char *v23; // ecx@90
     int scroll_id; // esi@96
     int v25; // eax@109
     int v26; // eax@113
     int new_mana_val; // edi@114
     signed __int64 v28; // qax@120
-    char *v29; // ecx@120
     __int64 v30; // edi@137
-    int v31; // ST30_4@137
     __int64 v32; // ST3C_4@137
-    int v33; // ST40_4@137
     __int64 v34; // ST34_4@137
-    int v35; // ST38_4@137
-    unsigned __int8 v36; // al@173
-    SoundID v37; // [sp-20h] [bp-4Ch]@18
-    SoundID v38; // [sp-20h] [bp-4Ch]@174
-    signed int v39; // [sp-1Ch] [bp-48h]@18
-    signed int v40; // [sp-1Ch] [bp-48h]@174
-    unsigned int v41; // [sp-18h] [bp-44h]@18
-    unsigned int v42; // [sp-18h] [bp-44h]@174
-    signed int v43; // [sp-14h] [bp-40h]@18
-    signed int v44; // [sp-14h] [bp-40h]@174
-    signed int v45; // [sp-10h] [bp-3Ch]@18
-    unsigned __int16 v46; // [sp-10h] [bp-3Ch]@120
-    signed int v47; // [sp-10h] [bp-3Ch]@174
-    int v48; // [sp-Ch] [bp-38h]@18
-    unsigned int v49; // [sp-Ch] [bp-38h]@33
     unsigned __int16 v50; // [sp-Ch] [bp-38h]@120
-    int v51; // [sp-Ch] [bp-38h]@174
-    unsigned int v52; // [sp-8h] [bp-34h]@18
-    char *v53; // [sp-8h] [bp-34h]@33
-    int v54; // [sp-8h] [bp-34h]@34
-    unsigned int v55; // [sp-8h] [bp-34h]@60
-    int v56; // [sp-8h] [bp-34h]@66
-    const char *v57; // [sp-8h] [bp-34h]@69
-    const char *v58; // [sp-8h] [bp-34h]@89
-    int v59; // [sp-8h] [bp-34h]@120
-    unsigned int v60; // [sp-8h] [bp-34h]@174
-    int v61; // [sp-4h] [bp-30h]@18
-    char *v62; // [sp-4h] [bp-30h]@33
-    char *v63; // [sp-4h] [bp-30h]@34
-    int v64; // [sp-4h] [bp-30h]@60
-    int v65; // [sp-4h] [bp-30h]@66
     const char *v66; // [sp-4h] [bp-30h]@69
     signed int v67; // [sp-4h] [bp-30h]@77
     const char *v68; // [sp-4h] [bp-30h]@89
-    int v69; // [sp-4h] [bp-30h]@110
-    unsigned __int8 v70; // [sp-4h] [bp-30h]@120
-    int v71; // [sp-4h] [bp-30h]@174
     char v72; // [sp+20h] [bp-Ch]@68
     signed int v73; // [sp+24h] [bp-8h]@1
-    char *v74; // [sp+24h] [bp-8h]@23
-    int v75; // [sp+24h] [bp-8h]@73
+    char*  v74; // [sp+24h] [bp-8h]@23
     Player *thisb; // [sp+28h] [bp-4h]@1
     unsigned int thisa; // [sp+28h] [bp-4h]@22
 
@@ -6916,7 +6861,6 @@
     v73 = 1;
     if ( pParty->bTurnBasedModeOn == 1 && (pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 3) )
         return;
-    v4 = 0;
     if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_REAGENT )
         {
         if ( pParty->pPickedItem.uItemID == 160 )
@@ -6940,13 +6884,33 @@
         else
             {    
             v68 = pParty->pPickedItem.GetDisplayName();
-            v58 = pGlobalTXT_LocalizationStrings[36];//"%s can not be used that way"
-            sprintfex(pTmpBuf, v58, v68);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[36], v68);//"%s can not be used that way"
             ShowStatusBarString(pTmpBuf, 2);
             pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
             return;
             }
-        goto LABEL_173;
+        pAudioPlayer->PlaySound((SoundID)211, 0, 0, -1, 0, 0, 0, 0);
+
+        if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null)
+            {
+            pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 0, 0);
+            }
+        if ( v73 )
+            {
+            if ( pParty->bTurnBasedModeOn )
+                {
+                pParty->pTurnBasedPlayerRecoveryTimes[player_num-1] = 100;
+                thisb->SetRecoveryTime(100);
+                pTurnEngine->_40471C();
+                }
+            else
+                {
+                thisb->SetRecoveryTime((signed __int64)(flt_6BE3A4_debug_recmod1 * 213.3333333333333));
+                }
+            }
+        pMouse->RemoveHoldingItem();
+        return;
+
 
         }
     if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_POTION )
@@ -7008,13 +6972,13 @@
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 231: //Preservation
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[11].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 232: //Shield
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[13].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
@@ -7041,37 +7005,37 @@
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 240: //Might Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[19].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 241: //Intellect Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[17].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 242: //Personality Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[20].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 243://Endurance Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[16].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 244: //Speed Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[21].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 245: //Accuracy Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[15].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
@@ -7104,43 +7068,43 @@
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 255: //Luck Boost
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[18].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 256: //Fire Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[5].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
-            goto LABEL_173;
+            break;
         case 257: //Air Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[0].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 258: //Water Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[22].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 259: //Earth Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[3].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 260: //Mind Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[9].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
             break;
         case 261: //Body Resistance
-            v50 = 3 * LOWORD(pParty->pPickedItem.uEnchantmentType);
+            v50 = 3 * pParty->pPickedItem.uEnchantmentType;
             v28 = (signed __int64)((double)(230400 * pParty->pPickedItem.uEnchantmentType) * 0.033333335);
             v3->pPlayerBuffs[2].Apply(pParty->uTimePlayed + v28, 0, v50, 0, 0);
             v3->PlaySound(SPEECH_36, 0);
@@ -7212,15 +7176,37 @@
 
         default:
             v68 = pParty->pPickedItem.GetDisplayName();
-            v58 = pGlobalTXT_LocalizationStrings[36];  //"%s can not be used that way"
-            sprintfex(pTmpBuf, v58, v68);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[36], v68);//"%s can not be used that way"
             ShowStatusBarString(pTmpBuf, 2u);
             pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
             return;
-
+            }
+        pAudioPlayer->PlaySound((SoundID)210, 0, 0, -1, 0, 0, 0, 0);
+        if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null)
+            {
+            if ( !v73 )
+                {
+                pMouse->RemoveHoldingItem();
+                return;
+                }
+            pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 0, 0);
             }
-       // pParty->pPlayers[player_num-1].SetCondition(Condition_Poison1, 1);
-        goto LABEL_173;
+        if ( v73 )
+            {
+            if ( pParty->bTurnBasedModeOn )
+                {
+                pParty->pTurnBasedPlayerRecoveryTimes[player_num-1] = 100;
+                thisb->SetRecoveryTime(100);
+                pTurnEngine->_40471C();
+                }
+            else
+                {
+                thisb->SetRecoveryTime((signed __int64)(flt_6BE3A4_debug_recmod1 * 213.3333333333333));
+                }
+            }
+        pMouse->RemoveHoldingItem();
+        return;
+    
         }
 
 
@@ -7233,39 +7219,16 @@
         if ( !pParty->pPlayers[player_num-1].CanAct() )
             {
 
-            
             v68 = aCharacterConditionNames[v3->GetMajorConditionIdx()];
-        v58 = pGlobalTXT_LocalizationStrings[382];
-        sprintfex(pTmpBuf, v58, v68);
-        v23 = pTmpBuf;
-
-        ShowStatusBarString(v23, 2u);
-        v4 = 0;
-        v61 = v4;
-        v52 = v4;
-        v48 = v4;
-        v45 = v4;
-        v43 = -1;
-        v41 = v4;
-        v39 = v4;
-        v37 = (SoundID)27;
-        pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+        sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[382], v68);
+        ShowStatusBarString(pTmpBuf, 2u);
+        pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
         return;
             }
         if ( bUnderwater == 1 )
             {
-            v23 = pGlobalTXT_LocalizationStrings[652]; //"You can not do that while you are underwater!"
-            ShowStatusBarString(v23, 2u);
-            v4 = 0;
-            v61 = v4;
-            v52 = v4;
-            v48 = v4;
-            v45 = v4;
-            v43 = -1;
-            v41 = v4;
-            v39 = v4;
-            v37 = (SoundID)27;
-            pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+            ShowStatusBarString(pGlobalTXT_LocalizationStrings[652], 2u);//"You can not do that while you are underwater!"
+            pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
             return;
             }
         dword_50C9AC = 1;
@@ -7301,143 +7264,70 @@
         if ( v72 )
             {
             v66 = pParty->pPickedItem.GetDisplayName();
-            v57 = pGlobalTXT_LocalizationStrings[380];//"You already know the %s spell"
-LABEL_72:
-            sprintf(pTmpBuf, v57, v66);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[380], v66);//"You already know the %s spell"
             ShowStatusBarString(pTmpBuf, 2u);
-LABEL_92:
-            v61 = v4;
-            v52 = v4;
-            v48 = v4;
-            v45 = v4;
-            v43 = -1;
-            v41 = v4;
-            v39 = v4;
-            v37 = (SoundID)27;
-LABEL_93:
-            v14 = pAudioPlayer;
-LABEL_63:
-            pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+            pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
             return;
             }
         if ( !pParty->pPlayers[player_num-1].CanAct() )
             {
             v66 = aCharacterConditionNames[v3->GetMajorConditionIdx()];
-            v57 = pGlobalTXT_LocalizationStrings[382];//"That player is %s"
-            sprintf(pTmpBuf, v57, v66);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[382], v66);//"That player is %s"
             ShowStatusBarString(pTmpBuf, 2u);
-            v61 = v4;
-            v52 = v4;
-            v48 = v4;
-            v45 = v4;
-            v43 = -1;
-            v41 = v4;
-            v39 = v4;
-            v37 = (SoundID)27;
-            v14 = pAudioPlayer;
-            pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+            pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
             return;
             }
         v16 = v15 % 11 + 1;
         v17 = v3->pActiveSkills[v15 / 11 + 12];
-        v75 = v16;
         v18 = SkillToMastery(v17) - 1;
-        if ( v18 )
+        switch (v18)
+            {
+        case 0: v67 = 4; break;
+        case 1: v67 = 7; break;
+        case 2: v67 = 10; break;
+        case 3: v67 = 11; break;
+        default:
+            v67 = player_num;   
+            }
+  
+        if ( v16 > v67 || !v17 )
             {
-            v19 = v18 - 1;
-            if ( v19 )
+            v22 = pParty->pPickedItem.GetDisplayName();
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[381], v22); //"You don't have the skill to learn %s"
+            ShowStatusBarString(pTmpBuf, 2u);
+            v3->PlaySound((PlayerSpeech)20, 0);
+            return; 
+            }
+     //   v72 = 1;
+        v3->PlaySound(SPEECH_21, 0);
+        v73 = 0;
+
+
+        if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null)
+            {
+            if ( !v73 )
                 {
-                v20 = v19 - 1;
-                if ( v20 )
-                    {
-                    if ( v20 != 1 )
-                        {
-                        v21 = player_num;
-LABEL_83:
-                        if ( v75 > v21 || !v17 )
-                            {
-                            v22 = pParty->pPickedItem.GetDisplayName();
-                            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[381], v22);
-                            ShowStatusBarString(pTmpBuf, 2u);
-                            v3->PlaySound((PlayerSpeech)20, 0);
-                            return; 
-                            }
-                        v72 = 1;
-                        v3->PlaySound(SPEECH_21, 0);
-                        v73 = 0;
-LABEL_173:
-                        v36 = pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType;
-                        if ( v36 == EQUIP_POTION )
-                            {
-                            v71 = 0;
-                            v60 = 0;
-                            v51 = 0;
-                            v47 = 0;
-                            v44 = -1;
-                            v42 = 0;
-                            v40 = 0;
-                            v38 = (SoundID)210;
-                            }
-                        else
-                            {
-                            if ( v36 != EQUIP_REAGENT )
-                                {
-LABEL_178:
-                                if ( pGUIWindow_CurrentMenu && pGUIWindow_CurrentMenu->eWindowType != WINDOW_null)
-                                    {
-                                    if ( !v73 )
-                                        {
-                                        pMouse->RemoveHoldingItem();
-                                         return;
-                                         }
-                                    pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 0, 0);
-                                    }
-                                if ( v73 )
-                                    {
-                                    if ( pParty->bTurnBasedModeOn )
-                                        {
-                                        *(&pParty->field_16140 + player_num) = 100;
-                                        thisb->SetRecoveryTime(100);
-                                        pTurnEngine->_40471C();
-                                        }
-                                    else
-                                        {
-                                        thisb->SetRecoveryTime((signed __int64)(flt_6BE3A4_debug_recmod1 * 213.3333333333333));
-                                        }
-                                    }
-                                pMouse->RemoveHoldingItem();
-                                return;
-                                }
-                            v71 = 0;
-                            v60 = 0;
-                            v51 = 0;
-                            v47 = 0;
-                            v44 = -1;
-                            v42 = 0;
-                            v40 = 0;
-                            v38 = (SoundID)211;
-                            }
-                        pAudioPlayer->PlaySound(v38, v40, v42, v44, v47, v51, v60, v71);
-                        goto LABEL_178;
-                        }
-                    v67 = 11;
-                    }
-                else
-                    {
-                    v67 = 10;
-                    }
+                pMouse->RemoveHoldingItem();
+                return;
+                }
+            pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 0, 0);
+            }
+        if ( v73 )
+            {
+            if ( pParty->bTurnBasedModeOn )
+                {
+                pParty->pTurnBasedPlayerRecoveryTimes[player_num-1] = 100;
+                thisb->SetRecoveryTime(100);
+                pTurnEngine->_40471C();
                 }
             else
                 {
-                v67 = 7;
+                thisb->SetRecoveryTime((signed __int64)(flt_6BE3A4_debug_recmod1 * 213.3333333333333));
                 }
             }
-        else
-            {
-            v67 = 4;
-            }
-        v21 = v67;
-        goto LABEL_83;
+        pMouse->RemoveHoldingItem();
+        return;
+
         }
 
     if ( pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType == EQUIP_MESSAGE_SCROLL )
@@ -7446,30 +7336,13 @@
         if ( pParty->pPlayers[player_num-1].CanAct() )
             {
             CreateMsgScrollWindow(pParty->pPickedItem.uItemID);
-            v65 = 0;
-            v56 = SPEECH_37;
-LABEL_67:
-            v3->PlaySound((PlayerSpeech)v56, v65);
+            v3->PlaySound(SPEECH_37, 0);
             return;
             }
-LABEL_89:
         v68 = aCharacterConditionNames[v3->GetMajorConditionIdx()];
-        v58 = pGlobalTXT_LocalizationStrings[382];
-LABEL_90:
-        sprintfex(pTmpBuf, v58, v68);
-        v23 = pTmpBuf;
-LABEL_91:
-        ShowStatusBarString(v23, 2u);
-        v4 = 0;
-        v61 = v4;
-        v52 = v4;
-        v48 = v4;
-        v45 = v4;
-        v43 = -1;
-        v41 = v4;
-        v39 = v4;
-        v37 = (SoundID)27;
-        pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+        sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[382], v68);
+        ShowStatusBarString(pTmpBuf, 2u);
+        pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
         return;
         }
     else
@@ -7478,90 +7351,54 @@
             {
             thisa = pParty->uCurrentMonthWeek + 1;
             if ( pParty->uCurrentMonth >= 7 )
-                v74 = 0;
+                v74 = NULL;
             else
                 v74 = aAttributeNames[pParty->uCurrentMonth];
             switch ( pParty->uCurrentMonth )
                 {
             case 0:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uMight += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121]; //"Permanent"	
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 1:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uIntelligence += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 2:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uWillpower += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 3:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uEndurance += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 4:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uAccuracy += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+               sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 5:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uSpeed += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 6:
-                v6 = pParty->uCurrentMonthWeek + 1;
                 v3->uLuck += thisa;
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v74;
-                v49 = v6;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+               sprintf(pTmpBuf, "+%u %s %s", thisa, v74, pGlobalTXT_LocalizationStrings[121]);//"Permanent"	
                 break;
             case 7:
                 party_finds_gold(1000 * thisa, 0);
-                v63 = pGlobalTXT_LocalizationStrings[97];//"Gold"
-                v54 = 1000 * thisa;
-                sprintf(pTmpBuf, "+%u %s", v54, v63);
+                sprintf(pTmpBuf, "+%u %s", 1000 * thisa, pGlobalTXT_LocalizationStrings[97]);//"Gold"
                 break;
             case 8:
                 Party::GiveFood(5 * thisa); 
-                v63 = pGlobalTXT_LocalizationStrings[653]; //"Food"
-                v54 = 5 * thisa;
-                sprintf(pTmpBuf, "+%u %s", v54, v63);
+                sprintf(pTmpBuf, "+%u %s",5 * thisa , pGlobalTXT_LocalizationStrings[653]);//"Food"
                 break;
             case 9u:
-                v63 = pGlobalTXT_LocalizationStrings[LOCSTR_SKILL_POINTS];
                 v3->uSkillPoints += 2 * thisa;
-                v54 = 2 * thisa;
-                sprintf(pTmpBuf, "+%u %s", v54, v63);
+                sprintf(pTmpBuf, "+%u %s", 2 * thisa, pGlobalTXT_LocalizationStrings[LOCSTR_SKILL_POINTS]);
                 break;
             case 10:
-                v63 = pGlobalTXT_LocalizationStrings[LOCSTR_EXPIRIENCE];
-                v54 = 2500 * thisa;
                 v3->uExperience += 2500 * thisa;
-                sprintf(pTmpBuf, "+%u %s", v54, v63);
+                sprintf(pTmpBuf, "+%u %s", 2500 * thisa, pGlobalTXT_LocalizationStrings[LOCSTR_EXPIRIENCE]);
                 break;
             case 11:
                 v8 = rand() % 6;
@@ -7592,10 +7429,7 @@
                     v13 = pGlobalTXT_LocalizationStrings[29];
                     break;
                     }
-                v62 = pGlobalTXT_LocalizationStrings[121];
-                v53 = v13;
-                v49 = thisa;
-                sprintf(pTmpBuf, "+%u %s %s", v49, v53, v62);
+                sprintf(pTmpBuf, "+%u %s %s", thisa, v13, pGlobalTXT_LocalizationStrings[121]);
                 break;
 
                 }
@@ -7603,7 +7437,7 @@
             pMouse->RemoveHoldingItem();
             pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, player_num - 1);
             v3->PlaySound(SPEECH_93, 0);
-            pAudioPlayer->PlaySound((SoundID)(SOUND_Bell|0x2), 0, 0, -1, 0, 0, 0, 0);
+            pAudioPlayer->PlaySound((SoundID)219, 0, 0, -1, 0, 0, 0, 0);
             if ( pParty->uDaysPlayed == 6 || pParty->uDaysPlayed == 20 )
                 {
                 v3->SetCondition(Condition_Eradicated, 0);
@@ -7642,11 +7476,10 @@
                 pAudioPlayer->PlaySound((SoundID)135,  0, 0, -1, 0, 0, 0, 0);
                 return;
                 }
-        else if ( pParty->pPickedItem.uItemID == 646 )
+        else if ( pParty->pPickedItem.uItemID == 646 ) //Horseshoe
                 {
                 pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, player_num - 1);
-                v5 = 8 * player_num + 392;
-                LOBYTE(v5) = PID(OBJECT_Player,player_num - 120);
+                v5 = PID(OBJECT_Player,player_num + 49);
                 pAudioPlayer->PlaySound(SOUND_20001, v5, 0, -1, 0, 0, 0, 0);
                 v3->AddVariable(VAR_NumSkillPoints, 2);
                 }
@@ -7659,24 +7492,12 @@
                 {
    
                 v68 = pParty->pPickedItem.GetDisplayName();
-                v58 = pGlobalTXT_LocalizationStrings[36];
-                sprintfex(pTmpBuf, v58, v68);
-                v23 = pTmpBuf;
-                ShowStatusBarString(v23, 2u);
-                v4 = 0;
-                v61 = v4;
-                v52 = v4;
-                v48 = v4;
-                v45 = v4;
-                v43 = -1;
-                v41 = v4;
-                v39 = v4;
-                v37 = (SoundID)27;
-                pAudioPlayer->PlaySound(v37, v39, v41, v43, v45, v48, v52, v61);
+                sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[36],v68);//"%s can not be used that way"
+                ShowStatusBarString(pTmpBuf, 2u);
+                pAudioPlayer->PlaySound((SoundID)27, 0, 0, -1, 0, 0, 0, 0);
                 return;
                 }
-   
-LABEL_187:
+
         pMouse->RemoveHoldingItem();
         return;
         }