Initial commit: Complete open-source Decal rebuild

All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
erik 2026-02-08 18:27:56 +01:00
commit d1442e3747
1382 changed files with 170725 additions and 0 deletions

View file

@ -0,0 +1,67 @@
using System.Runtime.InteropServices;
using Decal.Interop.D3DService;
namespace Decal.D3DService
{
[ComVisible(true)]
[Guid("81E79859-2783-4B9A-ADC4-308073F5BB3F")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("D3DService.CD3DObj")]
public class D3DObjImpl : ID3DObj
{
private float _scaleX = 1, _scaleY = 1, _scaleZ = 1;
private bool _autoscale;
private int _color, _color2;
private float _pFade;
private float _pBounce, _hBounce;
private float _pOrbit, _rOrbit;
private float _pSpin;
private bool _visible = true;
private bool _drawBackface;
private float _animationPhaseOffset;
// Appearance
public void SetIcon(int icon) { }
public void SetIconFromResource(int hmodule, int idr) { }
public void SetIconFromFile(string bstrFilename) { }
public void SetShape(eShape shape) { }
public void SetShapeFromResource(int hmodule, int idr) { }
public void SetShapeFromFile(string bstrFilename) { }
public void SetScale(float scale) { _scaleX = _scaleY = _scaleZ = scale; }
public void Set2DText(string szText, string szFont, int options) { }
public void Set3DText(string szText, string szFont, int options) { }
// Scale
public float scaleX { get => _scaleX; set => _scaleX = value; }
public float scaleY { get => _scaleY; set => _scaleY = value; }
public float scaleZ { get => _scaleZ; set => _scaleZ = value; }
public bool autoscale { get => _autoscale; set => _autoscale = value; }
// Color
public int color { get => _color; set => _color = value; }
public int color2 { get => _color2; set => _color2 = value; }
// Effects
public float pFade { get => _pFade; set => _pFade = value; }
public float pBounce { get => _pBounce; set => _pBounce = value; }
public float hBounce { get => _hBounce; set => _hBounce = value; }
public float pOrbit { get => _pOrbit; set => _pOrbit = value; }
public float rOrbit { get => _rOrbit; set => _rOrbit = value; }
public float pSpin { get => _pSpin; set => _pSpin = value; }
public float AnimationPhaseOffset { get => _animationPhaseOffset; set => _animationPhaseOffset = value; }
// Anchoring
public void AnchorToObject(int guid, float fractHeight, float dx, float dy, float dz) { }
public void AnchorToCoords(float lat, float lng, float alt) { }
// Orientation
public void OrientToCamera(bool fTilt) { }
public void OrientToPlayer(bool fTilt) { }
public void OrientToObject(int guid, float fractHeight, bool fTilt) { }
public void OrientToCoords(float lat, float lng, float alt, bool fTilt) { }
// Visibility
public bool visible { get => _visible; set => _visible = value; }
public bool drawBackface { get => _drawBackface; set => _drawBackface = value; }
}
}

View file

@ -0,0 +1,160 @@
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Decal.Interop.Core;
using Decal.Interop.D3DService;
namespace Decal.D3DService
{
[ComVisible(true)]
[Guid("F0CC07A0-2C89-4FA4-9356-714665BC2F8B")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("D3DService.CService")]
public class D3DServiceImpl : ID3DService, IDecalService, IDecalRender
{
private readonly List<D3DObjImpl> _objects = new List<D3DObjImpl>();
private CD3DObj CreateObj()
{
var obj = new D3DObjImpl();
_objects.Add(obj);
return (CD3DObj)(object)obj;
}
// ID3DService
public CD3DObj NewD3DObj() => CreateObj();
public CD3DObj PointToObject(int guid, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShape(eShape.eVArrow);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj PointToCoords(float lat, float lng, float alt, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShape(eShape.eVArrow);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public CD3DObj MarkObjectWithIcon(int guid, int icon)
{
var obj = CreateObj();
((ID3DObj)obj).SetIcon(icon);
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkObjectWithIconFromFile(int guid, string filename)
{
var obj = CreateObj();
((ID3DObj)obj).SetIconFromFile(filename);
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkObjectWithShape(int guid, eShape shape, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShape(shape);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkObjectWithShapeFromFile(int guid, string filename, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShapeFromFile(filename);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkCoordsWithIcon(float lat, float lng, float alt, int icon)
{
var obj = CreateObj();
((ID3DObj)obj).SetIcon(icon);
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public CD3DObj MarkCoordsWithIconFromFile(float lat, float lng, float alt, string filename)
{
var obj = CreateObj();
((ID3DObj)obj).SetIconFromFile(filename);
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public CD3DObj MarkCoordsWithShape(float lat, float lng, float alt, eShape shape, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShape(shape);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public CD3DObj MarkCoordsWithShapeFromFile(float lat, float lng, float alt, string filename, int color)
{
var obj = CreateObj();
((ID3DObj)obj).SetShapeFromFile(filename);
((ID3DObj)obj).color = color;
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public void TraceOneFrame() { }
public CD3DObj MarkObjectWith2DText(int guid, string szText, string szFont, int options)
{
var obj = CreateObj();
((ID3DObj)obj).Set2DText(szText, szFont, options);
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkObjectWith3DText(int guid, string szText, string szFont, int options)
{
var obj = CreateObj();
((ID3DObj)obj).Set3DText(szText, szFont, options);
((ID3DObj)obj).AnchorToObject(guid, 1.0f, 0, 0, 0);
return obj;
}
public CD3DObj MarkCoordsWith2DText(float lat, float lng, float alt, string szText, string szFont, int options)
{
var obj = CreateObj();
((ID3DObj)obj).Set2DText(szText, szFont, options);
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
public CD3DObj MarkCoordsWith3DText(float lat, float lng, float alt, string szText, string szFont, int options)
{
var obj = CreateObj();
((ID3DObj)obj).Set3DText(szText, szFont, options);
((ID3DObj)obj).AnchorToCoords(lat, lng, alt);
return obj;
}
// IDecalService
public void Initialize(DecalCore pDecal) { }
public void BeforePlugins() { }
public void AfterPlugins() { }
public void Terminate() { _objects.Clear(); }
// IDecalRender
public void Render2D() { }
public void Render3D() { }
public void PreReset() { }
public void PostReset() { }
public void ChangeHWND() { }
public void ChangeDirectX() { }
}
}

View file

@ -0,0 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Decal.Interop.Core\Decal.Interop.Core.csproj" />
<ProjectReference Include="..\Decal.Interop.D3DService\Decal.Interop.D3DService.csproj" />
</ItemGroup>
</Project>