diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-20 00:45:58 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-20 00:45:58 +0300 |
| commit | 37db376dd3b259cfefdb7081770ca82bdc7542dd (patch) | |
| tree | 033c50733cee522e7105abd2f2df0b893a14e762 /docs/appendices/knowledge-boundaries.md | |
| parent | bcedda6e93d228593be7bef1552369aa5b70b623 (diff) | |
| download | fparkan-37db376dd3b259cfefdb7081770ca82bdc7542dd.tar.xz fparkan-37db376dd3b259cfefdb7081770ca82bdc7542dd.zip | |
docs(script): describe native condition evaluation
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md index 661069a..ad7bc13 100644 --- a/docs/appendices/knowledge-boundaries.md +++ b/docs/appendices/knowledge-boundaries.md @@ -31,9 +31,25 @@ primitives, sound events и reads в `Effect.dll`. checks. Полная instruction grammar `.scr`, semantics opcodes и serialization state ещё не восстановлены. +Для GOG `ai.dll` статически восстановлены пять ветвей evaluator-а 16-byte +записей условий по RVA `0x5180`, включая проверки типов, поиск объектов, +короткие выходы из обхода списков и запись байта завершения. Однако не найден +код-производитель этого массива и контракт его владельца с runtime. Reader +`FUN_10011b20` хранит описатели событий и вложенных записей `.scr` во внутренних +контейнерах с шагом `0x14` и `0x20`; сами дисковые структуры имеют переменную +длину из-за length-prefixed имён и списков ссылок. Связь этих контейнеров с +массивом evaluator-а не доказана. Виртуальные методы, +через которые проходят проверки, остаются внешней границей, а сам evaluator +не сравнивался с работающим оригиналом. Описание этих ветвей — статический +вывод по одному известному `ai.dll`, а не утверждение о совпадении во время +исполнения. + Закрывающий эксперимент: найти dispatcher loop в `ai.dll`, сопоставить jump table с instruction sizes, построить disassembler и сравнить выполнение -коротких scripts с оригиналом. +коротких scripts с оригиналом. Для evaluator-а условий отдельно проследить +создание записей `this + 0x34`, выполнить те же входные данные в оригинале и +сверить байт завершения, порядок поиска, ранние выходы и граничный случай +`payload == count`. ## Saves and campaign state |
