Centralizes game path discovery into a new openwa-config crate.
find_wa_dir() checks OPENWA_WA_PATH env var then falls back to
HKCU\Software\Team17SoftwareLTD\WormsArmageddon (PATH value).
Removes all hardcoded Steam library paths from launcher, test runner,
and scheme_parse integration test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: remove extra loading progress ticks, cargo fmt
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>
fix: correct EXTENDED_OPTIONS_DEFAULTS and read from ROM at runtime
The hand-transcribed EXTENDED_OPTIONS_DEFAULTS constant had bytes
shifted from offset 0x13 onwards, causing game_engine_speed to default
to 0x01018080 (257x) instead of 0x00010000 (1.0x). This made all
.wsc scheme files play at unlocked frame rate.
Two fixes:
1. write_scheme_to_dest now reads defaults from WA's ROM at runtime
via rb(SCHEME_V3_DEFAULTS), making it impossible to diverge
2. Replaced the constant with byte-exact ROM dump (verified at runtime)
Also accept variable-length V3 scheme files (payload between 0x124
and 0x192 bytes), padding missing extended options with defaults.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
refactor: reorganize openwa-core into subdirectory modules
The split between openwa-types (pure types/addresses) and openwa-lib
(rebase/wa_call/typed wrappers) was arbitrary and added friction when
deciding where new code belongs. Merged both into openwa-core.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>