changeset 1818:253194aba8b8

Player::SubtractVariable helper functions
author Grumpy7
date Mon, 07 Oct 2013 07:56:07 +0200
parents 0f1543750bf8
children 1641ab7f21ec
files Player.cpp Player.h
diffstat 2 files changed, 95 insertions(+), 249 deletions(-) [+]
line wrap: on
line diff
--- a/Player.cpp	Mon Oct 07 06:37:49 2013 +0200
+++ b/Player.cpp	Mon Oct 07 07:56:07 2013 +0200
@@ -6612,47 +6612,54 @@
   signed int v24; // [sp-4h] [bp-10h]@4
   int v25; // [sp-4h] [bp-10h]@45
 
+  v4 = 0;
+  if ( this == pPlayers[2] )
+    v4 = 1;
+  else if ( this == pPlayers[3] )
+    v4 = 2;
+  else if ( this == pPlayers[4] )  
+    v4 = 3;
+
   v3 = 0;
-  v4 = uActiveCharacter - 1;
   result = false;
-  if ( (signed int)VarNum > 222 )
-  {
-    if ( (signed int)VarNum <= 307 )
+  if ( VarNum >= VAR_AutoNotes )
+  {
+    if ( VarNum <= VAR_NumDeaths )
     {
-      if ( VarNum == 307 )
+      if ( VarNum == VAR_NumDeaths )
       {
         pParty->uNumDeaths -= (unsigned int)pValue;
         return pValue;
       }
-      if ( VarNum == 223 )
+      if ( VarNum == VAR_AutoNotes )
       {
         v11 = (char *)pParty->_autonote_bits;
         v22 = (short)pValue - 1;
       }
       else
       {
-        if ( VarNum != 231 )
+        if ( VarNum != VAR_PlayerBits )
         {
           switch ( VarNum )
           {
-            case 232:
-              VarNum = (VariableType)0;
-              GetNewNPCData(sDialogue_SpeakingActorNPC_ID, (int*)&VarNum);
+            case VAR_NPCs2:
+              v18 = 0;
+              GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &v18);
               result = (bool) pValue;
-			  npcIdToDismissAfterDialogue = 0;
-              if ( (int)VarNum == pValue )
+              if ( v18 == pValue )
               {
-                npcIdToDismissAfterDialogue = (int)pValue;
+                npcIdToDismissAfterDialogue = pValue;
               }
               else
               {
+                npcIdToDismissAfterDialogue = 0;
                 pParty->hirelingScrollPosition = 0;
                 LOBYTE(pNPCStats->pNewNPCData[(int)pValue].uFlags) &= 0x7Fu;
                 pParty->CountHirelings();
                 viewparams->bRedrawGameUI = true;
               }
               break;
-            case 241:
+            case VAR_HiredNPCHasSpeciality:
               if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
               {
                 v20 = (char *)&pNPCStats->pNewNPCData[0].uFlags;
@@ -6677,7 +6684,7 @@
               pParty->hirelingScrollPosition = 0;
               pParty->CountHirelings();
               break;
-            case 243:
+            case VAR_NumSkillPoints:
               v17 = (char *)&this->uSkillPoints;
 			  result = *v17 != NULL;
               if ( (unsigned int)pValue <= *(int *)v17 )
@@ -6688,7 +6695,7 @@
               else
                 *(int *)v17 = 0;
               break;
-            case 275:
+            case VAR_ReputationInCurrentLocation:
               v16 = (char *)&pOutdoor->ddm;
               if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor )
                 v16 = (char *)&pIndoor->dlv;
@@ -6696,7 +6703,7 @@
               if ( *((int *)v16 + 2) < -10000 )
                 *((int *)v16 + 2) = -10000;
               break;
-            case 306:
+            case VAR_GoldInBank:
 				result = VarNum - 306;
               if ( (unsigned int)pValue <= pParty->uNumGoldInBank )
 			  {
@@ -6718,27 +6725,27 @@
     }
     switch ( VarNum )
     {
-      case 308:
+      case VAR_NumBounties:
 		  result = (bool)pValue;
         pParty->uNumBountiesCollected -= (unsigned int)pValue;
         break;
-      case 309:
+      case VAR_PrisonTerms:
 		  result = (bool)pValue;
         pParty->uNumPrisonTerms -= (int)pValue;
         break;
-      case 310:
+      case VAR_ArenaWinsPage:
 		  result = (bool)pValue;
         pParty->uNumArenaPageWins -= (char)pValue;
         break;
-      case 311:
+      case VAR_ArenaWinsSquire:
 		  result = (bool)pValue;
         pParty->uNumArenaSquireWins -= (char)pValue;
         break;
-      case 312:
+      case VAR_ArenaWinsKnight:
 		  result = (bool)pValue;
         pParty->uNumArenaKnightWins -= (char)pValue;
         break;
-      case 313:
+      case VAR_ArenaWinsLord:
 		  result = (bool)pValue;
         pParty->uNumArenaLordWins -= (char)pValue;
         break;
@@ -6747,7 +6754,7 @@
   }
   else
   {
-    if ( (signed int)VarNum >= 123 )
+    if ( VarNum >= VAR_MapPersistentVariable_0 )
     {
       byte_5E4C15[VarNum] -= (char)pValue;
     }
@@ -6772,70 +6779,41 @@
           sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[504], v7);
           ShowStatusBarString(pTmpBuf.data(), 2u);
           GameUI_DrawFoodAndGold();
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_CurrentHP:
           ReceiveDamage((signed int)pValue, DMGT_PHISYCAL);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_CurrentSP:
-          v9 = (char *)&this->sMana;
-          v10 = this->sMana - (signed int)pValue < 0;
-          *(int *)v9 -= (int)pValue;
-          if ( v10 )
-            *(int *)v9 = 0;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->sMana = max(this->sMana - pValue, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_ACModifier:
           this->sACModifier -= (unsigned __int8)pValue;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_BaseLevel:
           this->uLevel -= (unsigned __int8)pValue;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_LevelModifier:
           this->sLevelModifier -= (unsigned __int8)pValue;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_Age:
           this->sAgeModifier -= (signed __int16)pValue;
           return result;
         case VAR_Award:
-          _449B7E_toggle_bit((unsigned char *)this->_achieved_awards_bits, (signed __int16)pValue, 0);
+          _449B7E_toggle_bit(this->_achieved_awards_bits, (signed __int16)pValue, 0);
           return result;
         case VAR_Experience:
-          v12 = (char *)&this->uExperience;
-          v13 = (signed int)pValue;
-          v14 = *(int *)v12 < (unsigned int)pValue;
-          *(int *)v12 -= (int)pValue;
-          *((int *)v12 + 1) -= v14 + HIDWORD(v13);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->uExperience -= pValue;
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_QBits_QuestsDone:
           _449B7E_toggle_bit(pParty->_quest_bits, (__int16)pValue, 0);
-          pPlayers[v4 + 1]->PlaySound(SPEECH_96, 0);
+          this->PlaySound(SPEECH_96, 0);
           return true;
         case VAR_PlayerItemInHands:
           v15 = this->pInventoryMatrix;
@@ -6848,290 +6826,149 @@
         case VAR_MightBonus:
         case VAR_ActualMight:
           this->uMightBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_IntellectBonus:
         case VAR_ActualIntellect:
           this->uIntelligenceBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_PersonalityBonus:
         case VAR_ActualPersonality:
           this->uWillpowerBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_EnduranceBonus:
         case VAR_ActualEndurance:
           this->uEnduranceBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_SpeedBonus:
         case VAR_ActualSpeed:
           this->uSpeedBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_AccuracyBonus:
         case VAR_ActualAccuracy:
           this->uAccuracyBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_LuckBonus:
         case VAR_ActualLuck:
           this->uLuckBonus -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_BaseMight:
           this->uMight -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BaseIntellect:
           this->uIntelligence -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BasePersonality:
           this->uWillpower -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BaseEndurance:
           this->uEndurance -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BaseSpeed:
           this->uSpeed -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BaseAccuracy:
           this->uAccuracy -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BaseLuck:
           this->uLuck -= (unsigned __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_FireResistance:
           this->sResFireBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_AirResistance:
           this->sResAirBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_WaterResistance:
           this->sResWaterBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_EarthResistance:
           this->sResEarthBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_SpiritResistance:
           this->sResSpiritBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_MindResistance:
           this->sResMindBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_BodyResistance:
           this->sResBodyBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_LightResistance:
           this->sResLightBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_DarkResistance:
           this->sResDarkBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_MagicResistance:
           this->sResMagicBase -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_FireResistanceBonus:
           this->sResFireBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_AirResistanceBonus:
           this->sResAirBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)92, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_92);
           return result;
         case VAR_WaterResistanceBonus:
           this->sResWaterBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_EarthResistanceBonus:
           this->sResEarthBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_SpiritResistanceBonus:
           this->sResSpiritBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_MindResistanceBonus:
           this->sResMindBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_BodyResistanceBonus:
           this->sResBodyBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_LightResistanceBonus:
           this->sResLightBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_DarkResistanceBonus:
           this->sResDarkBonus -= (signed __int16)pValue;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)SPEECH_91, 0);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_MagicResistanceBonus:
           this->sResMagicBonus -= (signed __int16)pValue;
-          v25 = 0;
-          v23 = SPEECH_91;
-          pPlayers[v4 + 1]->PlaySound((PlayerSpeech)v23, v25);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->PlayAwardSound_Anim98_Face(v4, SPEECH_91);
           return result;
         case VAR_FixedFood:
           Party::TakeFood((unsigned int)pValue);
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_StaffSkill:
         case VAR_SwordSkill:
@@ -7164,10 +7001,7 @@
         case VAR_DisarmTrapSkill:
         case VAR_LearningSkill:
           *((short *)&this->pConditions[16] + VarNum) -= (unsigned __int8)pValue;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          PlayAwardSound_Anim98(v4);
           return result;
         case VAR_Cursed:
         case VAR_Weak:
@@ -7188,11 +7022,8 @@
         case VAR_Eradicated:
           //*((int *)this + 2 * VarNum - 210) = 0;
 		  //*((int *)this + 2 * result - 209) = 0;
-		  this->pConditions[VarNum] = 0;
-          pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, v4);
-          v8 = 8 * v4 + 400;
-          LOBYTE(v8) = PID(OBJECT_Player,v4 - 112);
-          pAudioPlayer->PlaySound(SOUND_20001, v8, 0, -1, 0, 0, 0, 0);
+          this->pConditions[VarNum] = 0;
+          PlayAwardSound_Anim98(v4);
           return result;
         default:
           return result;
@@ -7220,6 +7051,19 @@
 // 5B65C4: using guessed type int dword_5B65C4;
 // 5B65CC: using guessed type int dword_5B65CC;
 
+//----- (new function) --------------------------------------------------------
+void Player::PlayAwardSound_Anim98(int currPlayerId)
+{
+  pGame->pStru6Instance->SetPlayerBuffAnim(0x98u, currPlayerId);
+  PlayAwardSound(currPlayerId);
+}
+
+//----- (new function) --------------------------------------------------------
+void Player::PlayAwardSound_Anim98_Face(int currPlayerId, PlayerSpeech speech)
+{
+  this->PlaySound(speech, 0);
+  PlayAwardSound_Anim98(currPlayerId);
+}
 
 //----- (00467E7F) --------------------------------------------------------
 void Player::EquipBody(ITEM_EQUIP_TYPE uEquipType)
--- a/Player.h	Mon Oct 07 06:37:49 2013 +0200
+++ b/Player.h	Mon Oct 07 07:56:07 2013 +0200
@@ -608,6 +608,8 @@
   void PlayAwardSound_Anim_Face(int currPlayerId, PlayerSpeech speech);
   void PlayAwardSound_Anim97(int currPlayerId);
   void PlayAwardSound_Anim97_Face(int currPlayerId, PlayerSpeech speech);
+	void PlayAwardSound_Anim98(int currPlayerId);
+	void PlayAwardSound_Anim98_Face(int currPlayerId, PlayerSpeech speech);
 
   bool IsWeak();
   bool IsDead();