feat(core): D.2b-B — port EncumbranceSystem capacity/load + SetLoadLevel fill/percent

EncumbranceCapacity (decomp 0x004fcc00), Load (0x004fcc40), SetLoadLevel
fill=load/3 clamped + percent=floor(load*100) (0x004a6ea0). Golden tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-21 08:54:16 +02:00
parent 5b3295ad13
commit 5875ac857d
2 changed files with 89 additions and 0 deletions

View file

@ -0,0 +1,40 @@
using AcDream.Core.Items;
using Xunit;
namespace AcDream.Core.Tests.Items;
public class BurdenMathTests
{
[Theory]
[InlineData(100, 0, 15000)] // base: str*150
[InlineData(100, 3, 24000)] // +clamp(3*30,0,150)=90 -> +90*100
[InlineData(100, 10, 30000)] // 10*30=300 clamped to 150 -> +150*100
[InlineData(0, 5, 0)] // str<=0 -> 0
public void EncumbranceCapacity_matches_retail(int str, int aug, int expected)
=> Assert.Equal(expected, BurdenMath.EncumbranceCapacity(str, aug));
[Theory]
[InlineData(15000, 7500, 0.5f)]
[InlineData(15000, 0, 0f)]
[InlineData(0, 100, 0f)] // cap<=0 guard
public void LoadRatio_is_burden_over_capacity(int cap, int burden, float expected)
=> Assert.Equal(expected, BurdenMath.LoadRatio(cap, burden), 4);
[Theory]
[InlineData(0f, 0f)]
[InlineData(0.5f, 0.16667f)]
[InlineData(1.0f, 0.33333f)]
[InlineData(3.0f, 1.0f)] // full at 300%
[InlineData(4.0f, 1.0f)] // clamped
public void LoadToFill_is_third_clamped(float load, float expected)
=> Assert.Equal(expected, BurdenMath.LoadToFill(load), 4);
[Theory]
[InlineData(0f, 0)]
[InlineData(0.5f, 50)]
[InlineData(1.0f, 100)]
[InlineData(3.0f, 300)]
[InlineData(4.0f, 400)] // percent NOT clamped
public void LoadToPercent_is_floor_load_times_100(float load, int expected)
=> Assert.Equal(expected, BurdenMath.LoadToPercent(load));
}