# HG changeset patch # User Grumpy7 # Date 1382588008 25200 # Node ID 5fcf6023f9c393cc62afb535c34a67269c47e003 # Parent 28b8ecb5dac6ced2ea67e312bedae9da45c6638f DamageMonsterFromParty some additional vars removed, changed the ordering part to something more readable diff -r 28b8ecb5dac6 -r 5fcf6023f9c3 Actor.cpp --- a/Actor.cpp Wed Oct 23 21:10:11 2013 -0700 +++ b/Actor.cpp Wed Oct 23 21:13:28 2013 -0700 @@ -3612,7 +3612,7 @@ float v39; // ST00_4@104 int v40; // ebx@107 unsigned int v41; // ebx@109 - signed __int64 v42; // qax@125 + signed __int64 extraRecoveryTime; // qax@125 unsigned __int16 v43; // ax@132 char v44; // bl@132 unsigned __int16 v45; // ax@132 @@ -3711,32 +3711,13 @@ v61 = projectileSprite->field_60_distance_related_prolly_lod; if ( projectileSprite->spell_id != SPELL_DARK_SOULDRINKER ) { - v50 = pParty->vPosition.x - projectileSprite->vPosition.x; - pMonsterName = (char *)(pParty->vPosition.y - projectileSprite->vPosition.y); - pPlayerName = (char *)(pParty->vPosition.z - projectileSprite->vPosition.z); - v52 = abs((int)pPlayerName); - v61 = abs(v50); - v10 = abs(v50); - v11 = (int)abs((int)pMonsterName); - v12 = v52; - if ( v10 < v11) - { - v10 = (int)v11; - v11 = v10; - } - if ( v10 < v12 ) - { - v13 = v10; - v10 = v12; - v12 = v13; - } - if ( v11 < (signed int)v12 ) - { - v14 = v12; - v12 = v11; - v11 = v14; - } - v61 = ((unsigned int)(11 * v11) >> 5) + (v12 >> 2) + v10; + std::array distances; + distances[0] = abs(pParty->vPosition.x - projectileSprite->vPosition.x); + distances[1] = abs(pParty->vPosition.y - projectileSprite->vPosition.y); + distances[2] = abs(pParty->vPosition.z - projectileSprite->vPosition.z); + std::sort(distances.begin(), distances.end()); + v61 = ((unsigned int)(11 * distances[1]) >> 5) + (distances[0] >> 2) + distances[2]; + if ( v61 >= 5120 && !(BYTE1(pMonster->uAttributes) & 4) ) { return; @@ -3754,10 +3735,10 @@ switch (projectileSprite->spell_id) { case SPELL_LASER_PROJECTILE: - v16 = player->pActiveSkills[7]; + v16 = player->pActiveSkills[PLAYER_SKILL_BLASTER]; v61 = 1; if ( (signed int)SkillToMastery(v16) >= 3 ) - a4 = player->pActiveSkills[7] & 0x3F; + a4 = player->pActiveSkills[PLAYER_SKILL_BLASTER] & 0x3F; attackElement = DMGT_PHISYCAL; uDamageAmount = player->CalculateMeleeDamageTo(true, true, 0); if ( !stru_50C198.PlayerHitOrMiss(player, pMonster, v61, a4) ) @@ -3802,9 +3783,8 @@ } break; case SPELL_BOW_ARROW: - v50 = pMonster->word_000086_some_monster_id; attackElement = DMGT_PHISYCAL; - uDamageAmount = player->CalculateRangedDamageTo(v50); + uDamageAmount = player->CalculateRangedDamageTo(pMonster->word_000086_some_monster_id); if ( pMonster->pActorBuffs[ACTOR_BUFF_SHIELD].uExpireTime > 0 ) uDamageAmount /= 2; IsAdditionalDamagePossible = true; @@ -3834,8 +3814,7 @@ v61 = stru_50C198.CalcMagicalDamageToActor(pMonster, attackElement, uDamageAmount); if ( !projectileSprite && player->IsUnarmed() && player->pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uExpireTime > 0 ) { - v50 = player->pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uPower; - v29 = stru_50C198.CalcMagicalDamageToActor(pMonster, 8, v50); + v29 = stru_50C198.CalcMagicalDamageToActor(pMonster, 8, player->pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uPower); v61 += v29; } uDamageAmount = v61; @@ -3849,7 +3828,6 @@ player->sHealth += v61 / 5; if ( player->sHealth > player->GetMaxHealth() ) player->sHealth = player->GetMaxHealth(); - v62 = 0; } v30 = stru_50C198.CalcMagicalDamageToActor(pMonster, attackElement, a4); uDamageAmount += v30; @@ -3871,17 +3849,14 @@ player->sHealth += v61 / 5; if ( player->sHealth > player->GetMaxHealth() ) player->sHealth = player->GetMaxHealth(); - v62 = 0; } - v31 = stru_50C198.CalcMagicalDamageToActor(pMonster, attackElement, a4); - uDamageAmount += v31; + uDamageAmount += stru_50C198.CalcMagicalDamageToActor(pMonster, attackElement, a4); } } } } - v32 = uDamageAmount; pMonster->sCurrentHP -= uDamageAmount; - if ( !v32 && !hit_will_stun ) + if ( uDamageAmount == 0 && !hit_will_stun ) { player->PlaySound(SPEECH_52, 0); return; @@ -3904,28 +3879,10 @@ { if ( pMonsterStats->pInfos[pMonster->pMonsterInfo.uID].bQuestMonster & 1 ) { - v33 = byte_4D864C && pGame->uFlags & 80000 ? 10 * pMonster->uActorRadius : pMonster->uActorRadius; - //v55 = v33; - if ( pRenderer->pRenderD3D ) + if ( pRenderer->pRenderD3D && pGame->uFlags2 & GAME_FLAGS_2_DRAW_BLOODSPLATS ) { - if ( pGame->uFlags2 & GAME_FLAGS_2_DRAW_BLOODSPLATS ) - { - pMonsterName = 0; - v34 = pMonster->vPosition.z; - *(float *)&pPlayerName = (double)v33; - //v51 = (unsigned __int64 *)v34; - *(float *)&v47 = 0.0; - v35 = pMonster->vPosition.y; - *((float *)&v46 + 1) = 0.0; - *(float *)&v46 = 1.0; - v36 = (double)(signed int)pMonster->vPosition.z; - //v51 = (unsigned __int64 *)v35; - v37 = v36; - //v51 = (unsigned __int64 *)pMonster->vPosition.x; - v38 = (double)v35; - v39 = (double)(signed int)pMonster->vPosition.x; - pDecalBuilder->AddBloodsplat(v39, v38, v37, 1.0, 0.0, 0.0, *(float *)&pPlayerName, 0, 0); - } + v33 = byte_4D864C && pGame->uFlags & 80000 ? 10 * pMonster->uActorRadius : pMonster->uActorRadius; + pDecalBuilder->AddBloodsplat(pMonster->vPosition.x, pMonster->vPosition.y, pMonster->vPosition.z, 1.0, 0.0, 0.0, v33, 0, 0); } } Actor::Die(uActorID_Monster_); @@ -3949,14 +3906,13 @@ && uDamageAmount != 0 ) player->ReceiveDamage(uDamageAmount, attackElement); int knockbackValue = 20 * v61 / (signed int)pMonster->pMonsterInfo.uHP; - if ( (player->GetSpecialItemBonus(24) || hit_will_stun) - && stru_50C198.GetMagicalResistance(pMonster, DMGT_EARTH) ) + if ( (player->GetSpecialItemBonus(24) || hit_will_stun) && stru_50C198.GetMagicalResistance(pMonster, DMGT_EARTH) ) { - v42 = 20; + extraRecoveryTime = 20; knockbackValue = 10; if ( !pParty->bTurnBasedModeOn ) - v42 = (signed __int64)(flt_6BE3A8_debug_recmod2 * 42.66666666666666); - pMonster->pMonsterInfo.uRecoveryTime += v42; + extraRecoveryTime = (signed __int64)(flt_6BE3A8_debug_recmod2 * 42.66666666666666); + pMonster->pMonsterInfo.uRecoveryTime += extraRecoveryTime; if ( bShowDamage ) { pMonsterName = player->pName; // "%s stuns %s" @@ -3964,23 +3920,17 @@ ShowStatusBarString(pTmpBuf.data(), 2u); } } - if ( hit_will_paralyze ) + if ( hit_will_paralyze && pMonster->CanAct() && stru_50C198.GetMagicalResistance(pMonster, DMGT_EARTH)) { - if ( pMonster->CanAct() ) + v43 = player->GetActualSkillLevel(PLAYER_SKILL_MACE); + v45 = SkillToMastery(v43); + v46 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)(7680 * (v43 & 0x3F)) * 0.033333335); + pMonster->pActorBuffs[ACTOR_BUFF_PARALYZED].Apply(v46, v45, 0, 0, 0); + if ( bShowDamage ) { - if ( stru_50C198.GetMagicalResistance(pMonster, DMGT_EARTH) ) - { - LOBYTE(v43) = player->GetActualSkillLevel(PLAYER_SKILL_MACE); - v45 = SkillToMastery(v43); - v46 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)(7680 * (v43 & 0x3F)) * 0.033333335); - pMonster->pActorBuffs[6].Apply(v46, v45, 0, 0, 0); - if ( bShowDamage ) - { - pMonsterName = player->pName; // "%s paralyzes %s" - sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[636], player->pName, pMonster); - ShowStatusBarString(pTmpBuf.data(), 2u); - } - } + pMonsterName = player->pName; // "%s paralyzes %s" + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[636], player->pName, pMonster); + ShowStatusBarString(pTmpBuf.data(), 2u); } } if ( knockbackValue > 10 ) diff -r 28b8ecb5dac6 -r 5fcf6023f9c3 Items.cpp --- a/Items.cpp Wed Oct 23 21:10:11 2013 -0700 +++ b/Items.cpp Wed Oct 23 21:13:28 2013 -0700 @@ -154,6 +154,7 @@ //----- (00439DF3) -------------------------------------------------------- int ItemGen::_439DF3_get_additional_damage(int *damage_type, bool *draintargetHP) { + *draintargetHP = false; *damage_type = 0; if ( !uItemID ) return 0;