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); }