Exemple #1
0
int CItemEnhancement::GetEnhancedRate (int iRate) const

//	GetEnhancedRate
//
//	Returns the enhanced rate

{
    switch (GetType())
    {
    case etSpeed:
    {
        int iMin;
        int iMax;
        int iAdj = GetActivateRateAdj(&iMin, &iMax);
        int iNewRate = Max(iMin, (iRate * iAdj + 50) / 100);
        if (iMax != 0 && iNewRate > iMax)
            return iMax;
        else
            return iNewRate;
    }

    case etSpeedOld:
        return Max(1, (iRate * Level2DamageAdj(GetLevel(), IsDisadvantage()) + 50) / 100);

    default:
        return iRate;
    }
}
Exemple #2
0
int CItemEnhancement::GetDamageAdj (const DamageDesc &Damage) const

//	GetDamageAdj
//
//	Returns the damage adjustment confered by this mod

{
    switch (GetType())
    {
    case etResist:
        return Level2DamageAdj(GetLevel(), IsDisadvantage());

    case etResistEnergy:
        return (Damage.IsEnergyDamage() ? Level2DamageAdj(GetLevel(), IsDisadvantage()) : 100);

    case etResistMatter:
        return (Damage.IsMatterDamage() ? Level2DamageAdj(GetLevel(), IsDisadvantage()) : 100);

    case etResistByLevel:
    {
        if (Damage.GetDamageType() == GetDamageType()
                || Damage.GetDamageType() == GetDamageType() + 1)
            return Level2DamageAdj(GetLevel(), IsDisadvantage());
        else
            return 100;
    }

    case etResistByDamage:
        return (Damage.GetDamageType() == GetDamageType() ? Level2DamageAdj(GetLevel(), IsDisadvantage()) : 100);

    case etResistByDamage2:
    {
        if (Damage.GetDamageType() == GetDamageType())
            //	0 = 100			100
            //	1 = 90			111
            //	2 = 80			125
            //	3 = 70			143
            return Level2DamageAdj(GetLevel(), IsDisadvantage());
        else if (Damage.GetDamageType() == GetDamageType() + 2)
            //	0 = 100			100
            //	1 = 95			105
            //	2 = 90			112
            //	3 = 85			121
            return 100 + ((Level2DamageAdj(GetLevel(), IsDisadvantage()) - 100) / 2);
        else
            return 100;
    }

    default:
        return 100;
    }
}
int CItemEnhancement::GetEnhancedRate (int iRate) const

//	GetEnhancedRate
//
//	Returns the enhanced rate

	{
	switch (GetType())
		{
		case etSpeed:
			return Max(1, (iRate * Level2DamageAdj(GetLevel(), IsDisadvantage()) + 50) / 100);

		default:
			return iRate;
		}
	}
int CItemEnhancement::GetActivateRateAdj (void) const

//	GetActivateRateAdj
//
//	Returns the adj to activate/fire delay

	{
	switch (GetType())
		{
		case etSpeed:
			return Level2DamageAdj(GetLevel(), IsDisadvantage());

		default:
			return 100;
		}
	}
Exemple #5
0
int CItemEnhancement::Level2DamageAdj (int iLevel, bool bDisadvantage)

//	Level2DamageAdj
//
//	Convert from a level (0-15) to a damage adj (%)

{
    if (bDisadvantage)
        return (10000 / Level2DamageAdj(iLevel, false));
    else
    {
        if (iLevel >= 0 && iLevel <= 9)
            return (100 - (10 * iLevel));
        else
            return 10;
    }
}
Exemple #6
0
int CItemEnhancement::GetAbsorbAdj (const DamageDesc &Damage) const

//	GetAbsorbAdj
//
//	Returns damage absorbed

{
    switch (GetType())
    {
    case etReflect:
    {
        if (IsDisadvantage() && Damage.GetDamageType() == GetDamageType())
            return Level2DamageAdj(GetLevel());
        else
            return 100;
    }

    default:
        return 100;
    }
}
Exemple #7
0
int CItemEnhancement::GetActivateRateAdj (int *retiMinDelay, int *retiMaxDelay) const

//	GetActivateRateAdj
//
//	Returns the adj to activate/fire delay

{
    int iAdj = 100;
    int iMinDelay = 0;
    int iMaxDelay = 0;

    switch (GetType())
    {
    case etSpeed:
        if (IsDisadvantage())
            iAdj = 100 + GetDataA() * 5;
        else
            iAdj = GetDataA();

        iMinDelay = GetDataB();
        iMaxDelay = GetDataC();
        break;

    case etSpeedOld:
        iAdj = Level2DamageAdj(GetLevel(), IsDisadvantage());
        break;

    default:
        iAdj = 100;
    }

    if (retiMinDelay)
        *retiMinDelay = iMinDelay;

    if (retiMaxDelay)
        *retiMaxDelay = iMaxDelay;

    return iAdj;
}