feat(runtime): retain Control owner profiles during loading
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
This commit is contained in:
6 files changed
+271
No files matched your search
@@ -691,6 +691,18 @@ Rust full-loader теста на оригинальных ресурсах. Ве
|
||||
`EXTO` подтверждены статически по native ASM; отдельный native full-load oracle
|
||||
для всей таблицы не запускался.
|
||||
|
||||
Профиль владельца читается из отдельного блока каждого CTLD сразу после пяти
|
||||
слов заголовка: это 27 исходных DWORD, начиная с байта `20`. Control выбирает
|
||||
для владельца только компонент с native ID `0`; его блок остаётся исходной
|
||||
копией, а те же 27 слов отдельно копируются в изменяемую память владельца.
|
||||
Поэтому профиль дочернего компонента, даже если его `INTO` обновляет строку
|
||||
таблицы `0`, не подменяет профиль корня. В Rust `PreparedComponentControl`
|
||||
сохраняет эти слова без предположений об их типах, а полная Control-проекция
|
||||
хранит источник, native ID, исходный массив и отдельную начальную копию. Эти
|
||||
массивы сначала равны; отсутствие CTLD у компонента с ID `0` остаётся явным
|
||||
`None`, без дочернего fallback или синтетических нулей. Точные native writes и
|
||||
открытые вопросы о смысле полей приведены в [техническом разборе загрузки CTLD](../appendices/script-vm.md#профиль-владельца-control-при-загрузке-ctld).
|
||||
|
||||
Для tag `19` фабрика создаёт объект с его исходными классом и vtable. Базовый
|
||||
конструктор `FUN_100218b0` задаёт multiplier `+0x4c = 1.0`. Override через
|
||||
`FUN_1002d890` вызывает у выбранного объекта vtable slot `+0x1c`, то есть
|
||||
|
||||
Reference in new issue
Block a user