Phase N.1 step 3: prove our inline algorithms match WorldBuilder's helpers for representative inputs including the 0xA9B1 edge-vertex case. Four conformance tests pass: Displace, OnRoad, GetNormalZ, ScaleObj. Our hand-ported algorithms match WB's helpers exactly for these. Rotation is intentionally NOT conformance-tested. Investigation against retail's Frame::set_heading (named-retail 0x00535e40) and Frame::set_vector_heading (0x00535db0) showed our acdream port uses a shortcut formula `yawDeg = -(450-degrees)%360` that diverges from retail's atan2 round-trip by ~180°. WorldBuilder's SetHeading ports the round-trip faithfully and matches retail. Our existing port is wrong — undetectable visually because per-tree rotation noise masks the offset. The migration to WB.SceneryHelpers.RotateObj fixes this bug; adding a conformance test would lock in the wrong behavior. Bumps IsOnRoad to internal so the OnRoad conformance test can call it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| DerethDateTimeCollection.cs | ||
| DerethDateTimeTests.cs | ||
| LandblockLoaderTests.cs | ||
| SceneryGeneratorTests.cs | ||
| SceneryWbConformanceTests.cs | ||
| SkyDescLoaderTests.cs | ||
| SkyStateTests.cs | ||
| WbSceneryAdapterTests.cs | ||
| WeatherSystemTests.cs | ||
| WorldTimeDebugTests.cs | ||
| WorldViewTests.cs | ||