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,70 @@
#ifndef __AUTOUPDATE_H__
#define __AUTOUPDATE_H__
class DownloadAgent {
public:
static bool downloadFile(std::string remoteFile, std::string localFile);
DownloadAgent();
void scheduleDownload(std::string remoteFile, std::string localFile);
bool runDownloads();
private:
struct DownloadSlot {
std::string remoteFile, localFile;
};
std::list<DownloadSlot> m_ScheduledDownloads;
};
enum AutoUpdateType {
AU_TYPE_XML,
AU_TYPE_DLL,
AU_TYPE_BETADLL
};
class UpdateRequirement
{
public:
UpdateRequirement(std::string File, std::string Version):
sFile(File), sVers(Version) { }
std::string sFile;
std::string sVers;
};
class AutoUpdateSource {
public:
AutoUpdateSource(std::string decalPath, AutoUpdateType type, std::string localTarget, std::string remoteSource, std::string requiredVersion);
bool needsUpdating();
std::string getSource();
std::string getDestination();
AutoUpdateType getType();
bool isOutDatedVersion(std::string sFile, int nMajor, int nMinor, int nPatch, int nBuild);
void AddRequirement(UpdateRequirement reqUpdate);
private:
std::string m_LocalTarget;
std::string m_RemoteSource;
std::string m_RequiredVersion;
std::string m_DecalDir;
AutoUpdateType m_Type;
std::vector<UpdateRequirement> m_Requirements;
};
class AutoUpdate {
public:
AutoUpdate(std::string decalDir);
bool initialiseFromXML(std::string remoteXML);
bool needsUpdate();
bool performUpdate();
private:
std::string m_LocalXML, m_RemoteXML;
std::string m_DecalDir;
std::list<AutoUpdateSource> m_RemoteSources;
};
#endif