feat(physics): port retail complete object frame pipeline

Restore the named-retail object update order across local, remote, static, projectile, animation, shadow, teleport, and effect lifetimes. Separate authoritative root commits from spatial rebucketing, preserve per-owner hook/FIFO ordering, and remove update-path allocations with exact lifecycle and residency gates.

Add deterministic conformance, adversarial lifetime, GUID-reuse, pending-cell, quaternion, timestamp, and allocation coverage. Release build is warning-free and all 6,446 tests pass with five intentional skips; retail, architecture, and adversarial reviews are clean.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-20 09:10:31 +02:00
parent 31a0889f08
commit f961d70023
77 changed files with 12513 additions and 1871 deletions

View file

@ -1,6 +1,7 @@
using AcDream.Content.Vfx;
using AcDream.Content;
using AcDream.Core.Physics;
using AcDream.Core.Physics.Motion;
using AcDream.Core.Tests.Conformance;
using DatReaderWriter;
using DatReaderWriter.DBObjs;
@ -23,6 +24,7 @@ public sealed class HumanoidMotionTableRootMotionTests
private const uint RunForward = 0x40000007u;
private const uint Ready = 0x41000003u;
private const uint InterpretedWalkForward = 0x45000005u;
private const uint TurnRight = 0x6500000Du;
[Theory]
[InlineData(WalkForward)]
@ -76,4 +78,32 @@ public sealed class HumanoidMotionTableRootMotionTests
distance > 1f,
$"Installed retail WalkForward should author root travel; got {distance:F3} m over 2 s.");
}
[Fact]
public void RetailTurnRightModifier_ExposesLiteralSequenceOmega()
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
return;
using var dats = new DatCollection(datDir, DatAccessType.Read);
MotionTable table = Assert.IsType<MotionTable>(dats.Get<MotionTable>(HumanoidMotionTable));
int styledKey = unchecked((int)((NonCombatStyle << 16) | (TurnRight & 0x00FF_FFFFu)));
int unstyledKey = unchecked((int)(TurnRight & 0x00FF_FFFFu));
bool found = table.Modifiers.TryGetValue(styledKey, out MotionData? modifier)
|| table.Modifiers.TryGetValue(unstyledKey, out modifier);
Assert.True(
found,
$"Retail Humanoid TurnRight modifier was absent at styled key 0x{styledKey:X8} "
+ $"and fallback key 0x{unstyledKey:X8}.");
Assert.NotNull(modifier);
Assert.True(
modifier!.Flags.HasFlag(DatReaderWriter.Enums.MotionDataFlags.HasOmega),
$"Retail Humanoid TurnRight must mark its literal omega present; "
+ $"flags={modifier.Flags}.");
Assert.Equal(System.Numerics.Vector3.Zero, modifier.Omega with { Z = 0f });
Assert.Equal(-1.5f, modifier.Omega.Z, 5);
}
}