diff options
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md index 3744d84..d4a620f 100644 --- a/docs/appendices/knowledge-boundaries.md +++ b/docs/appendices/knowledge-boundaries.md @@ -323,19 +323,56 @@ sequence определяется NDP: она не дополняется по Ñ sidecar недоступен, запрос `0xe00` сообщает это отдельно, оставляя независимые агрегатные selectors `1/2` доступными. +Поля `parent_index`, Control flags и начальный stage count для NDP-строк +проецируются из AniMesh по глобальному ordinal; точные правила, native ABI +векторы и лицензированная root/`EXTO` fixture описаны в +[техническом подразделе](script-vm.md#начальная-msh-часть-строки-provider). +Проверки подтверждают только начальный снимок: сборка runtime parent-ов +остаётся статическим выводом по RVA `AniMesh.dll+0xa460`, а последующие +изменения в полном Control/animation tick-е не проверялись. + +Для provider-строки Rust также хранит одно `initial_amount_bits`. Нативный +`Control.dll` `FUN_1000f940` (RVA `0xf940`) кладёт результат selector `3` в +текущее и обработанное значения строки; при подтверждённых единичных множителях +это raw `max_volume` NDP. Последующее обновление меняет оба native поля, поэтому +снимок не моделирует вместимость или изменяемый Control amount. + Rust query обращается к загруженному объекту и поддерживает `0xe00` только для текущего descriptor tag `26` с factory tag `26`; другие активные typed tags и -factory paths остаются явными границами. Snapshot показывает состояние сразу -после native-конструкторов, но он не обновляется при Control tick-е. Native -`FUN_10010f30` (RVA `0x10f30`) изменяет и ограничивает provider amount, а -связанные callbacks переносят его между строками; их общий переход в Rust ещё -не реализован. Поэтому вызов нельзя считать живым ресурсным симулятором. +factory paths остаются явными границами. Этот запрос возвращает начальный +type-1 provider value (`1.0`); дальнейшее изменение provider amount в Rust не +реализовано. +Native oracle проверил изолированные пути распределения, обновления класса `4`, +стадийную арифметику `0x11220`, обход дочерних provider-строк `0x11130` и +visibility transition `0x11920` с исходными AniMesh callbacks. Эти сценарии +используют синтетические NDP/Node38-строки; они подтверждают локальные переходы +и порядок вызовов, но не полную загрузку или выполнение Control на миссии. Вызовы +`0x11220` используют `updateEffects = false`, что исключает ветвь Control FX и +`0x11af0`; в отдельном сценарии класса `9` `0xfca0` возвращается сразу после +смены видимости, поэтому связанное с ним движение не проверено. Хотя у строки +Control выставлен flag `0x102`, слово флагов ANI `+0x14` и производные байты +`+0x111..+0x113` изначально равны нулю. Вызовы AniMesh `0x93c0` и `0xa2a0` обновляют производную геометрию и +видимость, это отдельная непроверенная граница, а не FX callbacks. Активную +clock-ветвь не запускали; внешний источник времени и порядок вызовов в игре +остаются незакрытыми. Источник контактного коэффициента прослежен статически, +но не исполнен. Подробные векторы и статические границы приведены в +[техническом подразделе о provider-состоянии Control](script-vm.md#изменение-provider-состояния-control). + +Отдельный API `advance_loaded_mission_resources` принимает явное время очереди +и обновляет представленные поля `CurrentOre`, строк распределителя и Control +selector `1`. API не подключён к игровому циклу и не обновляет Control amount, +профили, special object-state gate или жизненный цикл объектов. Если обязательный +запрос позднего объекта не поддержан, транзакция возвращает ошибку без применения +подготовленных изменений. AutoDemo-тест подтверждает связь настоящих профилей с +этим шагом, но не полный паритет миссии; отдельный aggregate getter Behavior RVA +`0xa490` в oracle не исполнен. + Behavior selectors `0x1002` и `0x1005` используют значения выбранного профиля из `behpsp.res`, разобранного до создания нового мира. `0x1002` складывает только текущие descriptor tag `26` запросы `0xe00`, затем применяет `Transfer_Ore_OffBoard`; `0x1005` возвращает `Transfer_Power_Out`. Это начальный -снимок: он не отражает последующие изменения provider-строк, Control tick-а или -профиля. Полная загрузка сохраняет результат у `ObjectHandle` и возвращает +снимок профиля и provider-строк. Полная загрузка сохраняет результат у +`ObjectHandle` и возвращает ошибку, если известный код класса не имеет корректной записи; класс, отсутствующий в таблице выбора, сохраняет начальные значения конструктора. Preview и объекты без полного Unit DAT не получают профильное состояние. |
