From 7e1c73ae608b445702d263172498bd9c255af923 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Sep 2017 22:09:30 -0300 Subject: [PATCH 1/2] New BaseStat formulas (SB, HW, ARR) --- src/servers/Server_Zone/Actor/CalcBattle.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/servers/Server_Zone/Actor/CalcBattle.cpp b/src/servers/Server_Zone/Actor/CalcBattle.cpp index 1ead6ed5..c3fa344d 100644 --- a/src/servers/Server_Zone/Actor/CalcBattle.cpp +++ b/src/servers/Server_Zone/Actor/CalcBattle.cpp @@ -26,7 +26,7 @@ extern Core::Data::ExdData g_exdData; */ -// Don't know too much about this formula, but seems to work for some of the levels tested. +// 3 Versions. SB and HW are linear, ARR is polynomial. // Originally from Player.cpp, calculateStats(). uint32_t CalcBattle::calculateBaseStat( PlayerPtr pPlayer ) @@ -34,10 +34,20 @@ uint32_t CalcBattle::calculateBaseStat( PlayerPtr pPlayer ) float base = 0.0f; uint8_t level = pPlayer->getLevel(); - if (level < 51) - base = 0.053f * ( level * level ) + ( 1.022f * level ) - 0.907f + 20; + // SB Base Stat Formula (Aligned) + if ( level > 60 ) + { + base = ( ( ( level == 61) ? 224 : 220 ) + ( level - 61 ) * 8); + } + // HW Base Stat Formula (Aligned) + else if ( level > 50 ) + base = 1.63f * level + 121.02f; + // ARR Base Stat Formula (Off by one in several cases) else - base = 1.627f * level + 120.773f; + // Old: base = 0.053f * ( level * level ) + ( 1.022f * level ) - 0.907f + 20; + // V1: base = 0.0523f * ( level * level ) + ( 1.04f * level ) + 19.405; + // V2: base = 0.05223f * ( level * level ) + ( 1.0405f * level ) + 19.405; + base = 0.052602 * ( level * level ) + ( 1.0179f * level ) + 19.6; return base; } From 1dc07c771175dc0eb4e1e27ab99fb4d4b957d06f Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Sep 2017 23:36:31 -0300 Subject: [PATCH 2/2] Floats are cool; --- src/servers/Server_Zone/Actor/CalcBattle.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Zone/Actor/CalcBattle.cpp b/src/servers/Server_Zone/Actor/CalcBattle.cpp index c3fa344d..fd7f84f4 100644 --- a/src/servers/Server_Zone/Actor/CalcBattle.cpp +++ b/src/servers/Server_Zone/Actor/CalcBattle.cpp @@ -45,9 +45,9 @@ uint32_t CalcBattle::calculateBaseStat( PlayerPtr pPlayer ) // ARR Base Stat Formula (Off by one in several cases) else // Old: base = 0.053f * ( level * level ) + ( 1.022f * level ) - 0.907f + 20; - // V1: base = 0.0523f * ( level * level ) + ( 1.04f * level ) + 19.405; - // V2: base = 0.05223f * ( level * level ) + ( 1.0405f * level ) + 19.405; - base = 0.052602 * ( level * level ) + ( 1.0179f * level ) + 19.6; + // V1: base = 0.0523f * ( level * level ) + ( 1.04f * level ) + 19.405f; + // V2: base = 0.05223f * ( level * level ) + ( 1.0405f * level ) + 19.405f; + base = 0.052602f * ( level * level ) + ( 1.0179f * level ) + 19.6f; return base; }