diff --git a/Generals/Code/GameEngine/Include/GameLogic/Object.h b/Generals/Code/GameEngine/Include/GameLogic/Object.h index 54ca8613dc8..2119da5f441 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Object.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Object.h @@ -220,6 +220,7 @@ class Object : public Thing, public Snapshot ExperienceTracker* getExperienceTracker() {return m_experienceTracker;} const ExperienceTracker* getExperienceTracker() const {return m_experienceTracker;} VeterancyLevel getVeterancyLevel() const; + Real getMaxHealthUpgradeScale() const; inline const AsciiString& getName() const { return m_name; } inline void setName( const AsciiString& newName ) { m_name = newName; } diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp index afd6ee9660d..89d6733ef6f 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp @@ -2727,6 +2727,12 @@ VeterancyLevel Object::getVeterancyLevel() const return m_experienceTracker ? m_experienceTracker->getVeterancyLevel() : LEVEL_REGULAR; } +//------------------------------------------------------------------------------------------------- +Real Object::getMaxHealthUpgradeScale() const +{ + return TheGlobalData->m_healthBonus[getVeterancyLevel()]; +} + //------------------------------------------------------------------------------------------------- void Object::friend_bindToDrawable( Drawable *draw ) { diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp index a9fbf946960..c606f620320 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp @@ -81,13 +81,17 @@ void MaxHealthUpgrade::upgradeImplementation() { const MaxHealthUpgradeModuleData *data = getMaxHealthUpgradeModuleData(); - //Simply add the xp scalar to the xp tracker! Object *obj = getObject(); BodyModuleInterface *body = obj->getBodyModule(); if( body ) { +#if RETAIL_COMPATIBLE_CRC body->setMaxHealth( body->getMaxHealth() + data->m_addMaxHealth, data->m_maxHealthChangeType ); +#else + Real maxHealth = body->getMaxHealth() + data->m_addMaxHealth * obj->getMaxHealthUpgradeScale(); + body->setMaxHealth( maxHealth, data->m_maxHealthChangeType ); +#endif } } diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Object.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Object.h index 13019ab3fa7..9118bbf72e2 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Object.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Object.h @@ -236,6 +236,7 @@ class Object : public Thing, public Snapshot ExperienceTracker* getExperienceTracker() {return m_experienceTracker;} const ExperienceTracker* getExperienceTracker() const {return m_experienceTracker;} VeterancyLevel getVeterancyLevel() const; + Real getMaxHealthUpgradeScale() const; inline const AsciiString& getName() const { return m_name; } inline void setName( const AsciiString& newName ) { m_name = newName; } diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp index f99f83dfd27..0822e76d6f2 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp @@ -3015,6 +3015,12 @@ VeterancyLevel Object::getVeterancyLevel() const return m_experienceTracker ? m_experienceTracker->getVeterancyLevel() : LEVEL_REGULAR; } +//------------------------------------------------------------------------------------------------- +Real Object::getMaxHealthUpgradeScale() const +{ + return TheGlobalData->m_healthBonus[getVeterancyLevel()]; +} + //------------------------------------------------------------------------------------------------- void Object::friend_bindToDrawable( Drawable *draw ) { diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp index e7f73297662..872bb85680c 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Upgrade/MaxHealthUpgrade.cpp @@ -81,13 +81,17 @@ void MaxHealthUpgrade::upgradeImplementation() { const MaxHealthUpgradeModuleData *data = getMaxHealthUpgradeModuleData(); - //Simply add the xp scalar to the xp tracker! Object *obj = getObject(); BodyModuleInterface *body = obj->getBodyModule(); if( body ) { +#if RETAIL_COMPATIBLE_CRC body->setMaxHealth( body->getMaxHealth() + data->m_addMaxHealth, data->m_maxHealthChangeType ); +#else + Real maxHealth = body->getMaxHealth() + data->m_addMaxHealth * obj->getMaxHealthUpgradeScale(); + body->setMaxHealth( maxHealth, data->m_maxHealthChangeType ); +#endif } }