InstanceBaseEffect.cpp
C++:



C++:
// Search
bool g_isEmpireNameMode=false;
// Add under
static DWORD gs_dwDamagePrefixCriticalCRC = 0;
static DWORD gs_dwDamagePrefixPenetrationCRC = 0;
static DWORD gs_dwDamagePrefixMixCRC = 0;
// Search
DWORD index = 0;
DWORD num = 0;
// Add under
const DWORD originalDamage = damage;
// Search func
void CInstanceBase::ProcessDamage()
// Add at the end of the function
const bool isCritical = (flag & DAMAGE_CRITICAL) != 0;
const bool isPenetrate = (flag & DAMAGE_PENETRATE) != 0;
if (isCritical || isPenetrate)
{
DWORD* pdwPrefixCRC = NULL;
const char* c_szPrefixEffectPath = NULL;
if (isCritical && isPenetrate)
{
pdwPrefixCRC = &gs_dwDamagePrefixMixCRC;
c_szPrefixEffectPath = "d:/ymir work/effect/affect/damage_mix.mse";
}
else if (isCritical)
{
pdwPrefixCRC = &gs_dwDamagePrefixCriticalCRC;
c_szPrefixEffectPath = "d:/ymir work/effect/affect/damage_critical.mse";
}
else
{
pdwPrefixCRC = &gs_dwDamagePrefixPenetrationCRC;
c_szPrefixEffectPath = "d:/ymir work/effect/affect/damage_penetration.mse";
}
if (pdwPrefixCRC && *pdwPrefixCRC == 0)
{
if (!rkEftMgr.RegisterEffect2(c_szPrefixEffectPath, pdwPrefixCRC, true))
TraceError("CInstanceBase::ProcessDamage - RegisterEffect2 failed (%s)", c_szPrefixEffectPath);
}
if (pdwPrefixCRC && *pdwPrefixCRC)
{
DWORD digitCount = 0;
DWORD tempDamage = originalDamage;
constexpr float fPrefixPadding = 18.0f;
while (tempDamage > 0)
{
++digitCount;
tempDamage /= 10;
}
D3DXMATRIX matrix, matTrans;
D3DXMatrixIdentity(&matrix);
matrix._41 = v3Pos.x;
matrix._42 = v3Pos.y;
matrix._43 = v3Pos.z;
D3DXMatrixTranslation(&matrix, v3Pos.x, v3Pos.y, v3Pos.z);
D3DXMatrixMultiply(&matrix, &pCamera->GetInverseViewMatrix(), &matrix);
D3DXMatrixTranslation(&matTrans, (FONT_WIDTH * digitCount) + fPrefixPadding, 0, 0);
matTrans._41 = -matTrans._41;
matrix = matTrans * matrix;
D3DXMatrixMultiply(&matrix, &pCamera->GetViewMatrix(), &matrix);
rkEftMgr.CreateEffect(*pdwPrefixCRC, D3DXVECTOR3(matrix._41, matrix._42, matrix._43), v3Rot);
}
}
Kanıt





