int16 Client::CalcAGI() { int16 val = m_pp.AGI + itembonuses.AGI + spellbonuses.AGI - CalcAlcoholPhysicalEffect();; int16 mod = aabonuses.AGI; if(val>255 && GetLevel() <= 60) val = 255; int16 str = GetSTR(); //Encumbered penalty if(weight > (str * 10)) { //AGI is halved when we double our weight, zeroed (defaults to 1) when we triple it. this includes AGI from AAs float total_agi = float(val + mod); float str_float = float(str); AGI = (int16)(((-total_agi) / (str_float * 2)) * (((float)weight / 10) - str_float) + total_agi); //casting to an int assumes this will be floor'd. without using floats & casting to int16, the calculation doesn't work right } else AGI = val + mod; if(AGI < 1) AGI = 1; int m = GetMaxAGI(); if(AGI > m) AGI = m; return(AGI); }
int32 Client::CalcDEX() { int32 val = m_pp.DEX + itembonuses.DEX + spellbonuses.DEX - CalcAlcoholPhysicalEffect();; int32 mod = aabonuses.DEX; DEX = val + mod; if (DEX < 1) { DEX = 1; } int m = GetMaxDEX(); if (DEX > m) { DEX = m; } return (DEX); }
int32 Client::CalcSTA() { int32 val = m_pp.STA + itembonuses.STA + spellbonuses.STA + CalcAlcoholPhysicalEffect();; int32 mod = aabonuses.STA; STA = val + mod; if (STA < 1) { STA = 1; } int m = GetMaxSTA(); if (STA > m) { STA = m; } return (STA); }
int32 Client::CalcSTR() { int32 val = m_pp.STR + itembonuses.STR + spellbonuses.STR + CalcAlcoholPhysicalEffect(); int32 mod = aabonuses.STR; STR = val + mod; if (STR < 1) { STR = 1; } int m = GetMaxSTR(); if (STR > m) { STR = m; } return (STR); }
int16 Client::CalcDEX() { int16 val = m_pp.DEX + itembonuses.DEX + spellbonuses.DEX - CalcAlcoholPhysicalEffect();; int16 mod = aabonuses.DEX; if(val>255 && GetLevel() <= 60) val = 255; DEX = val + mod; if(DEX < 1) DEX = 1; int m = GetMaxDEX(); if(DEX > m) DEX = m; return(DEX); }
int16 Client::CalcSTA() { int16 val = m_pp.STA + itembonuses.STA + spellbonuses.STA + CalcAlcoholPhysicalEffect();; int16 mod = aabonuses.STA; if(val>255 && GetLevel() <= 60) val = 255; STA = val + mod; if(STA < 1) STA = 1; int m = GetMaxSTA(); if(STA > m) STA = m; return(STA); }
int16 Client::CalcSTR() { int16 val = m_pp.STR + itembonuses.STR + spellbonuses.STR + CalcAlcoholPhysicalEffect(); int16 mod = aabonuses.STR; if(val>255 && GetLevel() <= 60) val = 255; STR = val + mod; if(STR < 1) STR = 1; int m = GetMaxSTR(); if(STR > m) STR = m; return(STR); }