namespace AcDream.Core.Physics;
///
/// Retail EncumbranceSystem (named-retail decomp
/// docs/research/named-retail/acclient_2013_pseudo_c.txt pc 256393),
/// the pure load/capacity math consumed by and
/// 's InqLoad-equivalent chain.
///
///
/// These are the SAME three formulas AcDream.Core.Items.BurdenMath
/// already ports (verified against the identical retail addresses, used by
/// the burden HUD / character sheet / indicator bar). Rather than re-derive
/// them a second time under a different name, this class delegates —
/// P1 (2026-07-30, Campaign P) needs the retail-named surface next to
/// for citation clarity, but a single formula
/// implementation keeps the burden HUD and movement physics from drifting
/// apart. See docs/research/2026-07-30-stat-coupled-movement-pseudocode.md
/// §2 and §6.
///
///
public static class EncumbranceSystem
{
///
/// EncumbranceSystem::EncumbranceCapacity 0x004fcc00:
/// strength <= 0 ? 0 : strength*150 + clamp(aug*30, 0, 150)*strength.
///
public static int EncumbranceCapacity(int strength, int aug) =>
AcDream.Core.Items.BurdenMath.EncumbranceCapacity(strength, aug);
///
/// EncumbranceSystem::Load 0x004fcc40: burden / capacity
/// (1.0 = at capacity). Returns 0 when capacity <= 0 (no-data).
///
public static float Load(int capacity, int burden) =>
AcDream.Core.Items.BurdenMath.LoadRatio(capacity, burden);
///
/// EncumbranceSystem::LoadMod 0x004fcc70: full effectiveness
/// through 100% load, linear falloff to zero at 200%, zero above it.
///
public static float LoadMod(float load) =>
AcDream.Core.Items.BurdenMath.LoadModifier(load);
}