Mercurial > mm7
diff Player.cpp @ 1649:d25389b91029
DamagePlayerFromMonster continuing cleanup
author | Grumpy7 |
---|---|
date | Wed, 18 Sep 2013 06:30:53 +0200 |
parents | a4390cef284c |
children | 56847118d50c |
line wrap: on
line diff
--- a/Player.cpp Tue Sep 17 07:30:41 2013 +0200 +++ b/Player.cpp Wed Sep 18 06:30:53 2013 +0200 @@ -7464,13 +7464,15 @@ return false; } + + //----- (00439FCB) -------------------------------------------------------- void __fastcall DamagePlayerFromMonster(unsigned int uObjID, int a2, Vec3_int_ *pPos, unsigned int a4) { signed int v4; // esi@1 unsigned int v5; // ecx@1 - Player *v6; // ebx@3 - Actor *v7; // esi@3 + Player *playerPtr; // ebx@3 + Actor *actorPtr; // esi@3 unsigned int v8; // eax@4 char *v9; // eax@5 signed int v10; // eax@6 @@ -7550,16 +7552,19 @@ uActorID = v4; if ( v5 ) { - if ( v5 != 1 - || (v6 = &pParty->pPlayers[a4], v7 = &pActors[v4], - v75 = v6->sHealth, - !stru_50C198.ActorHitOrMiss(v7, v6)) ) + playerPtr = &pParty->pPlayers[a4]; + actorPtr = &pActors[v4]; + v75 = playerPtr->sHealth; + if ( v5 != 1 || !stru_50C198.ActorHitOrMiss(actorPtr, playerPtr) ) return; - v8 = v6->pEquipment.uArmor; + v8 = playerPtr->pEquipment.uArmor; if ( !v8 - || (v9 = (char *)v6 + 36 * v8, v9[516] & 2) - || (v10 = pItemsTable->pItems[*((int *)v9 + 124)].uSkillType, v10 < 10) - || v10 > 11 ) + || playerPtr->pInventoryItemList[v8 - 1].IsBroken() + || + (pItemsTable->pItems[playerPtr->pInventoryItemList[v8 - 1].uItemID].uSkillType != PLAYER_SKILL_CHAIN + && pItemsTable->pItems[playerPtr->pInventoryItemList[v8 - 1].uItemID].uSkillType != PLAYER_SKILL_PLATE + ) + ) { v14 = rand() % 4; switch (v14) @@ -7582,29 +7587,29 @@ } } pAudioPlayer->PlaySound(v17, PID(OBJECT_Player,a4 + 80), 0, -1, 0, 0, 0, 0); - v18 = Actor::_43B3E0_CalcDamage(v7, v74); - v19 = HIDWORD(v7->pActorBuffs[3].uExpireTime) == 0; - v20 = SHIDWORD(v7->pActorBuffs[3].uExpireTime) < 0; + v18 = Actor::_43B3E0_CalcDamage(actorPtr, v74); + v19 = HIDWORD(actorPtr->pActorBuffs[3].uExpireTime) == 0; + v20 = SHIDWORD(actorPtr->pActorBuffs[3].uExpireTime) < 0; v77 = v18; - if ( !v20 && (!(v20 | v19) || LODWORD(v7->pActorBuffs[3].uExpireTime) > 0) ) - { - v21 = v7->pActorBuffs[3].uPower; + if ( !v20 && (!(v20 | v19) || LODWORD(actorPtr->pActorBuffs[3].uExpireTime) > 0) ) + { + v21 = actorPtr->pActorBuffs[3].uPower; if ( v21 ) v77 /= (signed int)v21; } switch (v74) { - case 0: v22 = v7->pMonsterInfo.uAttack1Type; + case 0: v22 = actorPtr->pMonsterInfo.uAttack1Type; break; - case 1: v22 = v7->pMonsterInfo.uAttack2Type; + case 1: v22 = actorPtr->pMonsterInfo.uAttack2Type; break; - case 2: v23 = v7->pMonsterInfo.uSpell1ID; + case 2: v23 = actorPtr->pMonsterInfo.uSpell1ID; v22 = LOBYTE(pSpellStats->pInfos[v23].uSchool); break; - case 3: v23 = v7->pMonsterInfo.uSpell2ID; + case 3: v23 = actorPtr->pMonsterInfo.uSpell2ID; v22 = LOBYTE(pSpellStats->pInfos[v23].uSchool); break; - case 4: v22 = v7->pMonsterInfo.field_3C_some_special_attack; + case 4: v22 = actorPtr->pMonsterInfo.field_3C_some_special_attack; break; default: case 5: v22 = 4; //yes, the original just assigned the value 4 @@ -7612,68 +7617,68 @@ } if ( !(dword_6BE368_debug_settings_2 & 0x10) ) { - v24 = v6->ReceiveDamage(v77, (DAMAGE_TYPE)v22); - if ( SHIDWORD(v6->pPlayerBuffs[10].uExpireTime) >= 0 - && (SHIDWORD(v6->pPlayerBuffs[10].uExpireTime) > 0 || LODWORD(v6->pPlayerBuffs[10].uExpireTime)) ) + v24 = playerPtr->ReceiveDamage(v77, (DAMAGE_TYPE)v22); + if ( SHIDWORD(playerPtr->pPlayerBuffs[10].uExpireTime) >= 0 + && (SHIDWORD(playerPtr->pPlayerBuffs[10].uExpireTime) > 0 || LODWORD(playerPtr->pPlayerBuffs[10].uExpireTime)) ) { - v25 = v7->uAIState; + v25 = actorPtr->uAIState; if ( v25 != Dying && v25 != Dead) { - v26 = stru_50C198.CalcMagicalDamageToActor(v7, v22, v24); - v7->sCurrentHP -= v26; + v26 = stru_50C198.CalcMagicalDamageToActor(actorPtr, v22, v24); + actorPtr->sCurrentHP -= v26; if ( v26 ) { - if ( v7->sCurrentHP >= 1 ) + if ( actorPtr->sCurrentHP >= 1 ) { Actor::AI_Stun(uActorID, PID(OBJECT_Player,a4), 0); Actor::AggroSurroundingPeasants(uActorID, 1); } else { - if ( pMonsterStats->pInfos[v7->pMonsterInfo.uID].bQuestMonster & 1 ) + if ( pMonsterStats->pInfos[actorPtr->pMonsterInfo.uID].bQuestMonster & 1 ) { - v27 = byte_4D864C && BYTE2(pGame->uFlags) & 8 ? 10 * v7->uActorRadius : v7->uActorRadius; + v27 = byte_4D864C && BYTE2(pGame->uFlags) & 8 ? 10 * actorPtr->uActorRadius : actorPtr->uActorRadius; if ( pRenderer->pRenderD3D ) { if ( pGame->uFlags2 & GAME_FLAGS_2_DRAW_BLOODSPLATS ) { - pDecalBuilder->AddBloodsplat(v7->vPosition.x, v7->vPosition.y, v7->vPosition.z, 1.0, 0.0, 0.0, v27, 0, 0); + pDecalBuilder->AddBloodsplat(actorPtr->vPosition.x, actorPtr->vPosition.y, actorPtr->vPosition.z, 1.0, 0.0, 0.0, v27, 0, 0); } } } Actor::Die(uActorID); Actor::ApplyFineForKillingPeasant(uActorID); Actor::AggroSurroundingPeasants(uActorID, 1); - if ( v7->pMonsterInfo.uExp ) - GivePartyExp(pMonsterStats->pInfos[v7->pMonsterInfo.uID].uExp); + if ( actorPtr->pMonsterInfo.uExp ) + GivePartyExp(pMonsterStats->pInfos[actorPtr->pMonsterInfo.uID].uExp); v34 = SPEECH_51; if ( rand() % 100 < 20 ) - v34 = ((signed int)v7->pMonsterInfo.uHP >= 100) + 1; - v6->PlaySound((PlayerSpeech)v34, 0); + v34 = ((signed int)actorPtr->pMonsterInfo.uHP >= 100) + 1; + playerPtr->PlaySound((PlayerSpeech)v34, 0); } } } } if ( !(dword_6BE368_debug_settings_2 & 0x10) - && v7->pMonsterInfo.uSpecialAttack - && rand() % 100 < v7->pMonsterInfo.uLevel * v7->pMonsterInfo.uSpecialAttackType ) - v6->_48DCF6(v7->pMonsterInfo.uSpecialAttack, v7); + && actorPtr->pMonsterInfo.uSpecialAttack + && rand() % 100 < actorPtr->pMonsterInfo.uLevel * actorPtr->pMonsterInfo.uSpecialAttackType ) + playerPtr->_48DCF6(actorPtr->pMonsterInfo.uSpecialAttack, actorPtr); } if ( !pParty->bTurnBasedModeOn ) { - v35 = v6->GetActualEndurance(); - v36 = (double)(20 - v6->GetParameterBonus(v35)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333; - v6->SetRecoveryTime((signed __int64)v36); + v35 = playerPtr->GetActualEndurance(); + v36 = (double)(20 - playerPtr->GetParameterBonus(v35)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333; + playerPtr->SetRecoveryTime((signed __int64)v36); } if ( v77 ) { v73 = (double)(signed int)v75; - if ( (double)v6->GetMaxHealth() * 0.25 < v73 ) + if ( (double)playerPtr->GetMaxHealth() * 0.25 < v73 ) { - if ( v6->sHealth > 0 ) + if ( playerPtr->sHealth > 0 ) { - if ( (double)v6->GetMaxHealth() * 0.25 >= (double)v6->sHealth ) - v6->PlaySound(SPEECH_48, 0); + if ( (double)playerPtr->GetMaxHealth() * 0.25 >= (double)playerPtr->sHealth ) + playerPtr->PlaySound(SPEECH_48, 0); } } } @@ -7739,13 +7744,13 @@ if ( v45->HasItemEquipped(EQUIP_MAIN_HAND)) { v48 = v45->pInventoryItemList[v45->pEquipment.uMainHand - 1].uItemID; - if ( v48 == ITEM_RELIC_KELEBRIM || v48 == ITEM_ARTIFACT_ELFBANE || (v45->GetEquippedItemEquipType((ITEM_EQUIP_TYPE)v75) == EQUIP_SHIELD && SkillToMastery(v45->pActiveSkills[PLAYER_SKILL_SHIELD]) == 4)) + if ( v48 == ITEM_RELIC_KELEBRIM || v48 == ITEM_ARTIFACT_ELFBANE || (v45->GetEquippedItemEquipType(EQUIP_MAIN_HAND) == EQUIP_SHIELD && SkillToMastery(v45->pActiveSkills[PLAYER_SKILL_SHIELD]) == 4)) v77 >>= 1; } if ( v45->HasItemEquipped(EQUIP_OFF_HAND)) { v48 = v45->pInventoryItemList[v45->pEquipment.uShield - 1].uItemID; - if ( v48 == ITEM_RELIC_KELEBRIM || v48 == ITEM_ARTIFACT_ELFBANE || (v45->GetEquippedItemEquipType((ITEM_EQUIP_TYPE)v75) == EQUIP_SHIELD && SkillToMastery(v45->pActiveSkills[PLAYER_SKILL_SHIELD]) == 4)) + if ( v48 == ITEM_RELIC_KELEBRIM || v48 == ITEM_ARTIFACT_ELFBANE || (v45->GetEquippedItemEquipType(EQUIP_OFF_HAND) == EQUIP_SHIELD && SkillToMastery(v45->pActiveSkills[PLAYER_SKILL_SHIELD]) == 4)) v77 >>= 1; } LABEL_115: