From 14096788fccf47e24a93d7b13f8124e84381f339 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sat, 18 Jul 2026 22:18:49 +0400 Subject: feat(runtime): apply clan init varsets --- docs/appendices/script-vm.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'docs') diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index dbcd539..59c1512 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -204,11 +204,14 @@ during mission loading: each selected clan's TMA anchor is accepted only in the `0..=10000` base range, truncated through the recovered x87 rule, and paired with its zero-based clan index. For every `Init` instruction whose selector is `Handler(19)`, `VarSet::resolve_handler19` produces the three per-clan DWORD -immutable `MissionScriptInitState` writes. Other Init selectors and all other events remain decoded but -unexecuted. AutoDemo validates the path end-to-end: its non-integral first +writes. The runtime then materializes an independent declaration-ordered value +array for each selected clan and applies those writes, so later recovered +handlers can consume `ClanBaseX`, `ClanBaseY`, and `ClanID` as runtime cells +rather than loader defaults. Other Init selectors and all other events remain +decoded but unexecuted. AutoDemo validates the path end-to-end: its non-integral first anchor (`500.2857`) yields captured `ClanBaseX=500`, and the live GOG process contains two initialized SuperAI entries `(500, 752, 0)` and `(728, 449, 1)`; -the Rust loader reports `script_init_states=2`. +the Rust loader reports `script_init_states=2` and `script_varset_states=2`. `GetSuperAI` returns element `n` of the 64-pointer global table at preferred `ai.dll + 0x55398` for `n <= 63`. The read-only -- cgit v1.2.3