Merge branch 'encumbrance' into 'master'

Properly detect overencumbrance for zero capacity again

See merge request OpenMW/openmw!4883
This commit is contained in:
psi29a 2025-08-31 17:59:24 +00:00
commit b0a27fd041
2 changed files with 9 additions and 3 deletions

View File

@ -953,7 +953,8 @@ namespace MWClass
float Npc::getJump(const MWWorld::Ptr& ptr) const
{
if (getEncumbrance(ptr) > getCapacity(ptr))
const float normalizedEncumbrance = getNormalizedEncumbrance(ptr);
if (normalizedEncumbrance > 1.0f)
return 0.f;
const MWMechanics::NpcStats& stats = getNpcStats(ptr);
@ -963,7 +964,7 @@ namespace MWClass
const GMST& gmst = getGmst();
const MWMechanics::MagicEffects& mageffects = stats.getMagicEffects();
const float encumbranceTerm = gmst.fJumpEncumbranceBase->mValue.getFloat()
+ gmst.fJumpEncumbranceMultiplier->mValue.getFloat() * (1.0f - Npc::getNormalizedEncumbrance(ptr));
+ gmst.fJumpEncumbranceMultiplier->mValue.getFloat() * (1.0f - normalizedEncumbrance);
float a = getSkill(ptr, ESM::Skill::Acrobatics);
float b = 0.0f;

View File

@ -481,11 +481,16 @@ namespace MWWorld
float capacity = getCapacity(ptr);
float encumbrance = getEncumbrance(ptr);
// Intentional deviation: Morrowind doesn't do this
// but handling (0 / 0) as 1.0 encumbrance feels like a clear oversight
if (encumbrance == 0)
return 0.f;
// Another deviation: handle (non-zero encumbrance / zero capacity) as "overencumbered"
// Morrowind uses 1, but this means that for zero capacity,
// normalized encumbrance cannot be used to detect overencumbrance
if (capacity == 0)
return 1.f;
return 1.f + 1e-6f;
return encumbrance / capacity;
}