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:
parent
31a0889f08
commit
f961d70023
77 changed files with 12513 additions and 1871 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue