diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 55291ad..12b1c6c 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -7682,9 +7682,19 @@ public sealed class GameWindow : IDisposable { int seqCount = seqFrames?.Count ?? -1; int setupParts = ae.Setup.Parts.Count; - int animFrame0Parts = ae.Animation.PartFrames.Count > 0 - ? ae.Animation.PartFrames[0].Frames.Count - : -1; + // #62: B.4c introduced `Animation = null!` for sequencer-driven + // door entities (parallel branch sites at line 2867 + 7892). + // Doors don't currently enter _remoteDeadReckon, so this + // path isn't reachable for them today — but the read was + // unguarded and would NRE the moment something flips. + // Local-var + `is not null` keeps the guard scoped: the + // legacy slerp branch below treats ae.Animation as non- + // null (per its non-nullable declared type) unchanged. + var animMaybeNull = ae.Animation; + int animFrame0Parts = + animMaybeNull is not null && animMaybeNull.PartFrames.Count > 0 + ? animMaybeNull.PartFrames[0].Frames.Count + : -1; double seqHash = 0.0; if (seqFrames is not null) {