# Function map Addresses are `sacred.exe` virtual addresses (image base `0x400000`). Status: **rewritten** (our code replaces the original), **hooked** (our code wraps the original), **identified** (purpose known, not touched yet). ## Startup | Address | Name | Conv. | Status | Notes | |---|---|---|---|---| | `0x0084c704` | `entry` | — | identified | MSVC 6 CRT startup (`WinMainCRTStartup`) | | `0x00816bd0` | `WinMain` | stdcall | identified | single-instance mutex `SACRED_INSTANCE`, OS check, logging setup, `Settings.cfg`, language selection, main window, message loop, shutdown | | `0x00813240` | `CreateMainWindow`? | | identified | "WinMain : unable to create main window" on failure | | `0x00815620` | `InitGame`? | | identified | "WinMain : initialization failed" on failure | ## Engine | Address | Name | Conv. | Status | Notes | |---|---|---|---|---| | `0x0066f1c0` | `Log` | cdecl, varargs | hooked | printf-style; writes `DEBUG.LOG` when enabled; see `src/game/engine/log.cpp` | | `0x0066ed80` | `SetLogEnabled` | cdecl | identified | sets byte `0x017e5ee0` | | `0x0066ef60` | `OpenLogFiles` | cdecl | identified | (re)opens `DEBUG.LOG`, `ExpLog.LOG` | | `0x00813140` | `CmdLineHasFlag` | cdecl | rewritten | `src/game/engine/cmdline.cpp` | | `0x00813240` | `CreateMainWindow` | cdecl | identified | registers class "Sacred" (wndproc `0x008122a0`), `WS_POPUP\|WS_VISIBLE` screen-sized window unless `win` flag | | `0x008122a0` | `MainWindowProc` | stdcall | hooked | borderless mod remaps mouse message coordinates | | `0x0066e500` | `GetMouseClientPos` | cdecl | hooked | `GetCursorPos` relative to client area; borderless mod maps to game pixels | | `0x00610650` | ? | thiscall | identified | player input; only `SetCursorPos` caller (cursor nudging) | ## Renderer (`dxDriver7`, instance pointer `0x00cda99c`) Layout: `src/game/render/dx_driver7.h`. | Address | Name | Conv. | Status | Notes | |---|---|---|---|---| | `0x00645390` | `DxDriver7::SetDisplayMode` | thiscall, `ret 0xc` | hooked | args (deviceCaps, `DxDisplayMode*`, ?); borderless mod forces windowed + resizes window | | `0x00645f70` | `DxDriver7::Flip` | thiscall | hooked | windowed: `primary->Blt(+0x1ec, back, +0x1dc)`; borderless mod sets both rects | | `0x00645000` | `DxDriver7::CreateZBuffer`? | | identified | | | `0x00644be0` | `DxDriver7::CreateSurface`? | | identified | | ## Globals | Address | Type | Name | Notes | |---|---|---|---| | `0x017e5ee0` | `bool` | `g_logEnabled` | set by `log` flag | | `0x017e5ed4` | `FILE*` | `g_debugLog` | `DEBUG.LOG` | | `0x017e5ed8` | `FILE*` | `g_expLog` | `ExpLog.LOG` | | `0x017e5ee4` | `void(*)(const char*)` | `g_logCallback` | | | `0x017e5cb4` | `int` | `g_language` | index into code table `0x00897394` (US DE FR SP IT PL HU JP VC RU CZ, 16-byte stride) | | `0x0182cd38` | `HANDLE` | `g_instanceMutex` | | | `0x00cda99c` | `DxDriver7*` | `g_dxDriver` | | | `0x0182cdb8` | `uint32_t` | `g_appFlags` | bit `0x20000` = app inactive (set/cleared on `WM_ACTIVATEAPP` at `0x00812421`) | ## Command-line flags seen so far `log` (enable logging), `tabblocker`, `win`, language codes `us`, `de`, `fr`, `sp`, `it`, `pl`, `hu`, `jp`, `vc`, `ru`, `cz` (lowercased before matching).