openDecal/Managed
erik f0b6fedc9b Fix DecalDat to work with real AC DAT files
The DAT file reader had several bugs inherited from the old C++ reference
code, which targeted an older format version. Verified and fixed against
real client_portal.dat and client_cell_1.dat files:

- Fix header offset: BTree root is at 0x160, not 0x148 (file size field)
- Fix BTree entry size: 24 bytes (flags+id+offset+size+timestamp), not 12
- Fix sector-chain node reading: BTree nodes span multiple sectors via
  linked-list headers; must assemble node data across sector boundaries
- Fix DatStreamImpl.Read() BSTR handling: use Buffer.BlockCopy to match
  C++ SysAllocStringByteLen instead of Marshal.PtrToStringAnsi
- Fix DatStreamImpl.ReadBinary() pointer lifetime: inline fixed block to
  keep destination buffer pinned during Marshal.Copy
- Document LoadFilters() dependency on parameterized COM properties in
  IDecalCore.Configuration that need IDispatch to call correctly

Add smoke test project (13/13 tests pass against real DAT files).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:12:04 +01:00
..
Decal.Adapter Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Core Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.D3DService Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DecalControls Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DecalDat Fix DecalDat to work with real AC DAT files 2026-02-08 23:12:04 +01:00
Decal.DecalDat.Tests Fix DecalDat to work with real AC DAT files 2026-02-08 23:12:04 +01:00
Decal.DecalFilters Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DecalInput Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DecalNet Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DecalRender Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DenAgent Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.DHS Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.FileService Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Controls Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Core Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.D3DService Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Dat Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.DHS Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Filters Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Inject Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Input Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Net Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.Render Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.Interop.SpellFilter Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.SpellFilter Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
DecalUtil Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Decal.sln Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00
Directory.Build.props Initial commit: Complete open-source Decal rebuild 2026-02-08 18:27:56 +01:00