# HG changeset patch # User Grumpy7 # Date 1370957045 -7200 # Node ID 7ef8ae7ce42a353420e1e2cb9939a7b3937650c1 # Parent c515e406df4ad3b3ea8352b6b15a01f0e405eea6 Player::SetVariable cleanup - moved around some cases to group similar types together, some cases reordered according to enum values diff -r c515e406df4a -r 7ef8ae7ce42a Player.cpp --- a/Player.cpp Mon Jun 10 04:16:49 2013 +0200 +++ b/Player.cpp Tue Jun 11 15:24:05 2013 +0200 @@ -7871,7 +7871,7 @@ void Player::SetVariable(enum VariableType var_type, signed int var_value) { signed int currPlayerId; // ebx@1 - Player *v4; // esi@1 + Player *unused4; // esi@1 unsigned int v5; // edi@1 unsigned int v6; // esi@13 unsigned int v7; // esi@14 @@ -7879,7 +7879,7 @@ ItemGen *v9; // ecx@17 int v10; // eax@21 signed int v11; // eax@30 - Player *v12; // ecx@44 + Player *unused12; // ecx@44 char *v13; // ecx@45 Player *v14; // ecx@49 int v15; // ecx@86 @@ -7894,23 +7894,26 @@ DDM_DLV_Header *v24; // ecx@148 signed int v25; // eax@172 int v26; // [sp-8h] [bp-3Ch]@84 - signed int v27; // [sp-4h] [bp-38h]@4 + signed int unused27; // [sp-4h] [bp-38h]@4 int v28; // [sp-4h] [bp-38h]@84 ItemGen item; // [sp+Ch] [bp-28h]@52 char v30; // [sp+32h] [bp-2h]@1 char v31; // [sp+33h] [bp-1h]@1 - currPlayerId = 0; v30 = 0; v31 = 0; - v4 = this; v5 = 0; - if ( this == pPlayers[2] ) - currPlayerId = 1; - else if ( this == pPlayers[3] ) - currPlayerId = 2; - else if ( this == pPlayers[4] ) - currPlayerId = 3; + + currPlayerId = -1; + for (int i = 1; i <= 4; i++) //TODO: add a member variable for playerid in the future + { + if ( this == pPlayers[i] ) + { + currPlayerId = i - 1; + break; + } + } + assert(currPlayerId != -1); if ( var_type > VAR_AutoNotes ) { if ( var_type <= VAR_GoldInBank ) @@ -7982,26 +7985,26 @@ pAudioPlayer->PlaySound(SOUND_20001, v25, v5, -1, v5, v5, v5, v5); return; } - if ( var_type != 307 ) + if ( var_type != VAR_NumDeaths ) { switch ( var_type ) { - case 308: + case VAR_NumBounties: pParty->uNumBountiesCollected = var_value; break; - case 309: + case VAR_PrisonTerms: pParty->uNumPrisonTerms = var_value; break; - case 310: + case VAR_ArenaWinsPage: pParty->uNumArenaPageWins = var_value; break; - case 311: + case VAR_ArenaWinsSquire: pParty->uNumArenaSquireWins = var_value; break; - case 312: + case VAR_ArenaWinsKnight: pParty->uNumArenaKnightWins = var_value; break; - case 313: + case VAR_ArenaWinsLord: pParty->uNumArenaLordWins = var_value; break; } @@ -8009,17 +8012,16 @@ } pParty->uNumDeaths = var_value; LABEL_168: - if ( v30 != 1 ) - { + if (v30 == 1) + { +LABEL_169: + pGame->pStru6Instance->SetPlayerBuffAnim(0x96u, currPlayerId); + } LABEL_170: - if ( v31 != 1 ) - return; - v5 = 0; - goto LABEL_172; - } -LABEL_169: - pGame->pStru6Instance->SetPlayerBuffAnim(0x96u, currPlayerId); - goto LABEL_170; + if ( v31 != 1 ) + return; + v5 = 0; + goto LABEL_172; } if ( var_type == VAR_AutoNotes ) { @@ -8038,191 +8040,186 @@ v31 = 1; goto LABEL_168; } - if ( var_type <= VAR_ActualMight ) - { - if ( var_type != VAR_ActualMight ) - { - switch ( var_type ) - { - case VAR_RandomGold: - v6 = rand() % var_value + 1; - Party::SetGold(v6); - sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[500], v6);// You have %lu gold - ShowStatusBarString(pTmpBuf.data(), 2u); - GameUI_DrawFoodAndGold(); - return; - case VAR_RandomFood: - v7 = rand() % var_value + 1; - Party::SetFood(v7); - sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[501], v7);// You have %lu food - ShowStatusBarString(pTmpBuf.data(), 2u); - GameUI_DrawFoodAndGold(); - goto LABEL_124; - case VAR_Sex: - this->uSex = (PLAYER_SEX)var_value; - goto LABEL_124; - case VAR_Class: - this->classType = (PLAYER_CLASS_TYPE)var_value; - if ( (char)var_value != 35 ) - goto LABEL_124; + if ( var_type <= VAR_BaseLuck ) + { + switch ( var_type ) + { + case VAR_Sex: + this->uSex = (PLAYER_SEX)var_value; + goto LABEL_124; + case VAR_Class: + this->classType = (PLAYER_CLASS_TYPE)var_value; + if ( (char)var_value == PLAYER_CLASS_LICH ) + { v8 = 0; v9 = this->pInventoryItems; - break; - case VAR_CurrentHP: - this->sHealth = var_value; - goto LABEL_124; - case VAR_MaxHP: - this->sHealth = GetMaxHealth(); - return; - case VAR_CurrentSP: - this->sMana = var_value; - goto LABEL_124; - case VAR_MaxSP: - this->sMana = GetMaxMana(); - return; - case VAR_ACModifier: - this->sACModifier = (unsigned __int8)var_value; - goto LABEL_124; - case VAR_BaseLevel: - this->uLevel = (unsigned __int8)var_value; - goto LABEL_124; - case VAR_LevelModifier: - this->sLevelModifier = (unsigned __int8)var_value; - goto LABEL_124; - case VAR_Age: - this->sAgeModifier = var_value; - return; - case VAR_Award: - if ( !((unsigned __int8)(0x80u >> ((signed __int16)var_value - 1) % 8) & - pPlayers[currPlayerId + 1]->_guilds_member_bits[((signed __int16)var_value - 1)/ 8]) - //&& dword_723E80_award_related[2 * a3] ) - && pAwards[var_value].pText ) + while ( v9->uItemID != 615 ) { - v30 = 1; - v31 = 1; - pPlayers[currPlayerId + 1]->PlaySound(SPEECH_96, 0); + ++v8; + ++v9; + if ( v8 >= 138 ) + goto LABEL_22; + } + v10 = (int)((char *)this + 36 * v8); + *(int *)(v10 + 532) = 601; + *(char *)(v10 + 558) = currPlayerId + 1; +LABEL_22: + if ( this->sResFireBase < 20 ) + this->sResFireBase = 20; + if ( this->sResAirBase < 20 ) + this->sResAirBase = 20; + if ( this->sResWaterBase < 20 ) + this->sResWaterBase = 20; + if ( this->sResEarthBase < 20 ) + this->sResEarthBase = 20; + this->sResMindBase = 200; + this->sResBodyBase = 200; + v11 = this->GetSexByVoice(); + this->uPrevVoiceID = this->uVoiceID; + this->uPrevFace = this->uCurrentFace; + if ( v11 ) + { + this->uCurrentFace = 21; + this->uVoiceID = 21; + } + else + { + this->uCurrentFace = 20; + this->uVoiceID = 20; } - _449B7E_toggle_bit((unsigned char *)v4->_guilds_member_bits, var_value, 1u); - goto LABEL_168; - case VAR_Experience: - this->uExperience = var_value; - goto LABEL_124; - case VAR_QBits_QuestsDone: - if ( !((unsigned __int8)(0x80u >> ((signed __int16)var_value - 1) % 8) & pParty->_quest_bits[((signed __int16)var_value - 1) >> 3]) - // && (&dword_722F10)[4 * a3] ) - && pQuestTable[var_value-1] ) + ReloadPlayerPortraits(currPlayerId, this->uCurrentFace); + } + goto LABEL_124; + case VAR_CurrentHP: + this->sHealth = var_value; + goto LABEL_124; + case VAR_MaxHP: + this->sHealth = GetMaxHealth(); + return; + case VAR_CurrentSP: + this->sMana = var_value; + goto LABEL_124; + case VAR_MaxSP: + this->sMana = GetMaxMana(); + return; + case VAR_ACModifier: + this->sACModifier = (unsigned __int8)var_value; + goto LABEL_124; + case VAR_BaseLevel: + this->uLevel = (unsigned __int8)var_value; + goto LABEL_124; + case VAR_LevelModifier: + this->sLevelModifier = (unsigned __int8)var_value; + goto LABEL_124; + case VAR_Age: + this->sAgeModifier = var_value; + return; + case VAR_Award: + if ( !((unsigned __int8)(0x80u >> ((signed __int16)var_value - 1) % 8) & + pPlayers[currPlayerId + 1]->_guilds_member_bits[((signed __int16)var_value - 1)/ 8]) + //&& dword_723E80_award_related[2 * a3] ) + && pAwards[var_value].pText ) + { + v30 = 1; + v31 = 1; + pPlayers[currPlayerId + 1]->PlaySound(SPEECH_96, 0); + } + _449B7E_toggle_bit((unsigned char *)this->_guilds_member_bits, var_value, 1u); + goto LABEL_168; + case VAR_Experience: + this->uExperience = var_value; + goto LABEL_124; + case VAR_QBits_QuestsDone: + if ( !((unsigned __int8)(0x80u >> ((signed __int16)var_value - 1) % 8) & pParty->_quest_bits[((signed __int16)var_value - 1) >> 3]) + // && (&dword_722F10)[4 * a3] ) + && pQuestTable[var_value-1] ) { - v14 = pPlayers[currPlayerId + 1]; - bFlashQuestBook = 1; - v30 = 1; - v31 = 1; - v14->PlaySound(SPEECH_93, 0); - } - v13 = (char *)pParty->_quest_bits; + v14 = pPlayers[currPlayerId + 1]; + bFlashQuestBook = 1; + v30 = 1; + v31 = 1; + v14->PlaySound(SPEECH_93, 0); + } + v13 = (char *)pParty->_quest_bits; LABEL_51: - _449B7E_toggle_bit((unsigned char *)v13, var_value, 1u); - if (( v30 != 1 )&&( v31 != 1 )) - return; - else - pGame->pStru6Instance->SetPlayerBuffAnim(0x96u, currPlayerId); - if ( v31 != 1 ) - return; - v25 = 8 * currPlayerId + 400; - LOBYTE(v25) = PID(OBJECT_Player,currPlayerId - 112); - pAudioPlayer->PlaySound(SOUND_20001, v25, 0, -1, 0, 0, 0, 0); - return; - case VAR_PlayerItemInHands: - item.Reset(); - item.Reset(); - item.uItemID = var_value; - item.uAttributes = 1; - pParty->SetHoldingItem(&item); - if ( var_value >= ITEM_ARTIFACT_PUCK && var_value <= ITEM_RELIC_MEKORIGS_HAMMER ) - pParty->pIsArtifactFound[var_value-500] = 1; - return; - case VAR_FixedGold: - Party::SetGold(var_value); + _449B7E_toggle_bit((unsigned char *)v13, var_value, 1u); + if (( v30 != 1 )&&( v31 != 1 )) return; - case VAR_BaseMight: - this->uMight = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BaseIntellect: - this->uIntelligence = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BasePersonality: - this->uWillpower = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BaseEndurance: - this->uEndurance = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BaseSpeed: - this->uSpeed = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BaseAccuracy: - this->uAccuracy = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_BaseLuck: - this->uLuck = (unsigned __int8)var_value; - goto LABEL_84; - case VAR_FixedFood: - Party::SetFood(var_value); - goto LABEL_124; - case VAR_MightBonus: - goto LABEL_64; - case VAR_IntellectBonus: - goto LABEL_68; - case VAR_PersonalityBonus: - goto LABEL_69; - case VAR_EnduranceBonus: - goto LABEL_70; - case VAR_SpeedBonus: - goto LABEL_71; - case VAR_AccuracyBonus: - goto LABEL_72; - case VAR_LuckBonus: - goto LABEL_73; - default: + else + pGame->pStru6Instance->SetPlayerBuffAnim(0x96u, currPlayerId); + if ( v31 != 1 ) return; - } - while ( v9->uItemID != 615 ) - { - ++v8; - ++v9; - if ( v8 >= 138 ) - goto LABEL_22; - } - v10 = (int)((char *)v4 + 36 * v8); - *(int *)(v10 + 532) = 601; - *(char *)(v10 + 558) = currPlayerId + 1; -LABEL_22: - if ( v4->sResFireBase < 20 ) - v4->sResFireBase = 20; - if ( v4->sResAirBase < 20 ) - v4->sResAirBase = 20; - if ( v4->sResWaterBase < 20 ) - v4->sResWaterBase = 20; - if ( v4->sResEarthBase < 20 ) - v4->sResEarthBase = 20; - v4->sResMindBase = 200; - v4->sResBodyBase = 200; - v11 = v4->GetSexByVoice(); - v4->uPrevVoiceID = v4->uVoiceID; - v4->uPrevFace = v4->uCurrentFace; - if ( v11 ) - { - v4->uCurrentFace = 21; - v4->uVoiceID = 21; - } - else - { - v4->uCurrentFace = 20; - v4->uVoiceID = 20; - } - ReloadPlayerPortraits(currPlayerId, v4->uCurrentFace); - goto LABEL_124; - } -LABEL_64: - this->uMightBonus = (unsigned __int8)var_value; + v25 = 8 * currPlayerId + 400; + LOBYTE(v25) = PID(OBJECT_Player,currPlayerId - 112); + pAudioPlayer->PlaySound(SOUND_20001, v25, 0, -1, 0, 0, 0, 0); + return; + case VAR_PlayerItemInHands: + item.Reset(); + item.Reset(); + item.uItemID = var_value; + item.uAttributes = 1; + pParty->SetHoldingItem(&item); + if ( var_value >= ITEM_ARTIFACT_PUCK && var_value <= ITEM_RELIC_MEKORIGS_HAMMER ) + pParty->pIsArtifactFound[var_value-500] = 1; + return; + case VAR_FixedGold: + Party::SetGold(var_value); + return; + case VAR_RandomGold: + v6 = rand() % var_value + 1; + Party::SetGold(v6); + sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[500], v6);// You have %lu gold + ShowStatusBarString(pTmpBuf.data(), 2u); + GameUI_DrawFoodAndGold(); + return; + case VAR_FixedFood: + Party::SetFood(var_value); + goto LABEL_124; + case VAR_RandomFood: + v7 = rand() % var_value + 1; + Party::SetFood(v7); + sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[501], v7);// You have %lu food + ShowStatusBarString(pTmpBuf.data(), 2u); + GameUI_DrawFoodAndGold(); + goto LABEL_124; + case VAR_MightBonus: + goto LABEL_64; + case VAR_IntellectBonus: + goto LABEL_68; + case VAR_PersonalityBonus: + goto LABEL_69; + case VAR_EnduranceBonus: + goto LABEL_70; + case VAR_SpeedBonus: + goto LABEL_71; + case VAR_AccuracyBonus: + goto LABEL_72; + case VAR_LuckBonus: + goto LABEL_73; + case VAR_BaseMight: + this->uMight = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BaseIntellect: + this->uIntelligence = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BasePersonality: + this->uWillpower = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BaseEndurance: + this->uEndurance = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BaseSpeed: + this->uSpeed = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BaseAccuracy: + this->uAccuracy = (unsigned __int8)var_value; + goto LABEL_84; + case VAR_BaseLuck: + this->uLuck = (unsigned __int8)var_value; + goto LABEL_84; + default: + return; + } LABEL_111: v28 = 0; v26 = SPEECH_91; @@ -8232,15 +8229,14 @@ v19->PlaySound((PlayerSpeech)v26, v28); goto LABEL_169; } - if ( var_type <= VAR_FireResistanceBonus ) - { - if ( var_type == VAR_FireResistanceBonus ) - { - this->sResFireBonus = (unsigned __int8)var_value; - goto LABEL_111; - } + if ( var_type <= VAR_MagicResistance ) + { switch ( var_type ) { + case VAR_ActualMight: +LABEL_64: + this->uMightBonus = (unsigned __int8)var_value; + goto LABEL_111; case VAR_ActualIntellect: LABEL_68: this->uIntelligenceBonus = (unsigned __int8)var_value; @@ -8312,7 +8308,7 @@ return; if ( var_type <= VAR_Eradicated ) { - v4->SetCondition(var_type - 105, 1); + this->SetCondition(var_type - 105, 1); } else { @@ -8322,14 +8318,14 @@ byte_5E4C15[var_type] = var_value; return; } - memset(v4, 0, 0xA0u); + memset(this, 0, 0xA0u); } LABEL_124: v31 = 1; goto LABEL_169; } LABEL_106: - v16 = (int)((char *)&v4->pConditions[16] + 2 * var_type); + v16 = (int)((char *)&this->pConditions[16] + 2 * var_type); v17 = *(char *)v16; if ( var_value <= VAR_BodyResistanceBonus ) { @@ -8353,48 +8349,51 @@ } pGame->pStru6Instance->SetPlayerBuffAnim(0x96u, currPlayerId); goto LABEL_170; - if ( var_type <= VAR_BodyResistanceBonus ) + if ( var_type <= VAR_MagicResistanceBonus ) { switch ( var_type ) { - case VAR_BodyResistanceBonus: - v4->sResBodyBonus = (unsigned __int8)var_value; + case VAR_FireResistanceBonus: + this->sResFireBonus = (unsigned __int8)var_value; break; case VAR_AirResistanceBonus: - v4->sResAirBonus = (unsigned __int8)var_value; + this->sResAirBonus = (unsigned __int8)var_value; break; case VAR_WaterResistanceBonus: - v4->sResWaterBonus = (unsigned __int8)var_value; + this->sResWaterBonus = (unsigned __int8)var_value; break; case VAR_EarthResistanceBonus: - v4->sResEarthBonus = (unsigned __int8)var_value; + this->sResEarthBonus = (unsigned __int8)var_value; break; case VAR_SpiritResistanceBonus: - v4->sResSpiritBonus = (unsigned __int8)var_value; + this->sResSpiritBonus = (unsigned __int8)var_value; + break; + case VAR_MindResistanceBonus: + this->sResMindBonus = (unsigned __int8)var_value; + break; + case VAR_BodyResistanceBonus: + this->sResBodyBonus = (unsigned __int8)var_value; + break; + case VAR_LightResistanceBonus: + this->sResLightBonus = (unsigned __int8)var_value; + break; + case VAR_DarkResistanceBonus: + this->sResDarkBonus = (unsigned __int8)var_value; + break; + case VAR_PhysicalResistanceBonus: + assert("VAR_PhysicalResistanceBonus variable unsupported" && false); + return; + break; + case VAR_MagicResistanceBonus: + this->sResMagicBonus = (unsigned __int8)var_value; break; default: - if ( var_type != 62 ) + assert("Unexpected var_type" && false); return; - v4->sResMindBonus = (unsigned __int8)var_value; break; } goto LABEL_111; } - if ( var_type == VAR_LightResistanceBonus ) - { - v4->sResLightBonus = (unsigned __int8)var_value; - goto LABEL_111; - } - if ( var_type == VAR_DarkResistanceBonus ) - { - v4->sResDarkBonus = (unsigned __int8)var_value; - goto LABEL_111; - } - if ( var_type == VAR_MagicResistanceBonus ) - { - v4->sResMagicBonus = (unsigned __int8)var_value; - goto LABEL_111; - } if ( var_type > VAR_MagicResistanceBonus && var_type <= VAR_DiplomacySkill ) if ( v30 != 1 ) {