Add markers module, framecrash stub, debug console, build-flag wiring

Markers: client-side world object system using CreateGameObject. Places
M2 models at arbitrary world positions via Lua commands (/mark test,
/mark pos). Includes embedded addon, xyz.m2/blp assets served from DLL
memory, position helpers from unit movement struct, and object lifecycle
management (create, cleanup, reposition, alpha, animation).

Framecrash: stub module with reference to crash at 0x007A2452.

Console: debug output via AllocConsole/WriteConsoleA, compiles out
entirely in non-Debug builds. Used by markers and file serve logging.

Build: markers added to feature flag matrix and all-variants step.
Main: conditional markers import, Lua function registration, embedded
addon + asset file serving, console init/deinit lifecycle.

Outline README: added misc planned features and debug mode notes.
This commit is contained in:
MarcelineVQ
2026-02-26 15:30:21 -08:00
parent cd7e585412
commit 37d42d09c2
12 changed files with 548 additions and 5 deletions
+9 -5
View File
@@ -12,12 +12,14 @@ pub fn build(b: *std.Build) void {
const enable_screenshot = b.option(bool, "screenshot", "Enable screenshot module") orelse true;
const enable_interact = b.option(bool, "interact", "Enable interact module") orelse true;
const enable_outline = b.option(bool, "outline", "Enable outline module") orelse true;
const enable_markers = b.option(bool, "markers", "Enable markers module") orelse true;
// Create build options module
const build_options = b.addOptions();
build_options.addOption(bool, "enable_screenshot", enable_screenshot);
build_options.addOption(bool, "enable_interact", enable_interact);
build_options.addOption(bool, "enable_outline", enable_outline);
build_options.addOption(bool, "enable_markers", enable_markers);
const build_options_module = build_options.createModule();
const hook_mod = b.dependency("hook", .{
@@ -45,16 +47,18 @@ pub fn build(b: *std.Build) void {
const build_all_step = b.step("all-variants", "Build all DLL variants");
// Helper to create a single-module build
inline for (&[_]struct { name: []const u8, screenshot: bool, interact: bool, outline: bool }{
.{ .name = "full", .screenshot = true, .interact = true, .outline = true },
.{ .name = "screenshot", .screenshot = true, .interact = false, .outline = false },
.{ .name = "interact", .screenshot = false, .interact = true, .outline = false },
.{ .name = "outline", .screenshot = false, .interact = false, .outline = true },
inline for (&[_]struct { name: []const u8, screenshot: bool, interact: bool, outline: bool, markers: bool }{
.{ .name = "full", .screenshot = true, .interact = true, .outline = true, .markers = true },
.{ .name = "screenshot", .screenshot = true, .interact = false, .outline = false, .markers = false },
.{ .name = "interact", .screenshot = false, .interact = true, .outline = false, .markers = false },
.{ .name = "outline", .screenshot = false, .interact = false, .outline = true, .markers = false },
.{ .name = "markers", .screenshot = false, .interact = false, .outline = false, .markers = true },
}) |variant| {
const opts = b.addOptions();
opts.addOption(bool, "enable_screenshot", variant.screenshot);
opts.addOption(bool, "enable_interact", variant.interact);
opts.addOption(bool, "enable_outline", variant.outline);
opts.addOption(bool, "enable_markers", variant.markers);
const variant_lib = b.addLibrary(.{
.name = variant.name,