Mar 25 16:09 feat: add #[vtable(...)] attribute macro for typed vtable definitions paavohtl +1: Claude Opus 4.6 (1M context) Add a proc macro that transforms sparse vtable slot definitions into
full #[repr(C)] structs with auto-filled gap slots, registry metadata,
calling wrappers, and optional address registration. Key features:
- #[slot(N)] for sparse vtables (gaps auto-filled with usize)
- Sequential slot inference when #[slot] is omitted (fully-typed vtables)
- fn(...) auto-normalized to unsafe extern "thiscall" fn(...)
- Named params (fn(this: *mut T, mode: u32)) flow through to bind wrappers
- bind_XxxVtable! companion macro generates method wrappers on class structs
- VtableInfo/VtableSlotEntry registry with inventory integration
- vtable_replace! macro for type-safe in-place vtable slot patching
- Compile-time size assertion and optional pub const + AddrEntry generation
All 8 vtable structs migrated: PaletteVtable, InputCtrlVtable,
MapViewVtable, DDDisplayVtable (38→18 lines), SoundEmitterVTable,
CTaskWormVTable, DisplayBaseVtable, DSSoundVtable.
Co-Authored-By: Claude Opus 4.6 (1M context) <norep… Mar 18 17:10 fix: remove extra loading progress ticks, cargo fmt paavohtl +1: Claude Opus 4.6 (1M context) Reduce from 4 to 2 DDGameWrapper__LoadingProgressTick calls, matching
the original constructor. Tick counter +0x04D8 now matches exactly
(0x334). All DDGameWrapper fields match the original.
Remaining headless checksum mismatch is likely due to headless display
handling differences (our headless display is non-null vs original's
NULL display parameter).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Mar 15 08:49 refactor: reorganize openwa-core into subdirectory modules paavohtl +1: Claude Opus 4.6 (1M context) Move 27 files from flat src/ into 6 subdirectories by subsystem:
- display/: DisplayBase, DisplayGfx, DDDisplay, Palette, OpenGL
- audio/: DSSound, ActiveSound, SoundId, SpeechLineId, Music, Streaming
- input/: DDKeyboard, InputCtrl
- engine/: DDGame, DDGameWrapper, GameSession, GameInfo, GameTimer, NetWrapper
- render/: RenderQueue, SpriteId, Landscape, TurnOrder
- game/: Scheme, Weapon, Frontend, Message, ClassType
Each mod.rs re-exports public types for short import paths.
Infrastructure stays at root: address, rebase, fixed, macros, wa_alloc,
vtable, wa_call, task/, wa/.
Update all imports in openwa-wormkit, openwa-debugui, and tests.
Add Win32_System_Memory feature to openwa-core for vtable.rs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>