aboutsummaryrefslogtreecommitdiff
path: root/docs/appendices/knowledge-boundaries.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
-rw-r--r--docs/appendices/knowledge-boundaries.md18
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