From 369e2ead3c5eee67212c496eab6007d5a078b9a4 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sat, 18 Jul 2026 19:53:36 +0400 Subject: [PATCH] docs(control): record loader ABI boundaries --- docs/tomes/06-behavior.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index b13aa70..7dcab67 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -206,6 +206,32 @@ CreateCollObject тригонометрию и `g_FastProc`. Это подтверждает его положение между gameplay object и геометрией мира. +Статическая сверка GOG `Control.dll` уточняет границу, но пока не раскрывает +per-tick solver. PE32 image base — `0x10000000`; exports имеют следующие RVA: + +```text +InitializeSettings 0x32260 +LoadControlSystem 0x32280 +LoadPhysicalModel 0x32580 +CreateCollManager 0x325d0 +CreateCollObject 0x32600 +``` + +`LoadControlSystem` возвращается `ret 0x20`, следовательно ABI снимает со +стека восемь 32-bit аргументов. Оно выбирает allocation размером `0x668` при +mode `9` и `0x670` для другого mode, создаёт внутренний reader через virtual +dispatch с selector `10`, переносит несколько caller strings в локальные +buffers и передаёт собранную settings-структуру дальше через virtual slot +`+0x08` с key `0x80000020`. Это доказывает loader/configuration boundary и +два layout variants, но не даёт права назвать поля скоростью или acceleration. +`LoadPhysicalModel` аналогично создаёт `0xa0`-byte reader и возвращается +`ret 0x0c`; `CreateCollManager` и `CreateCollObject` возвращают interface +pointer с поправкой `+4` после внутренней инициализации. + +Именно update methods этих private objects, а не пять exports, остаются +следующим объектом динамической трассировки. Поэтому reference movement в +новом runtime намеренно не использует неподтверждённые параметры Control. + ### Control system и physical model `LoadControlSystem` загружает настройки controller-а: ограничения скорости,