diff options
Diffstat (limited to 'docs/tomes/06-behavior.md')
| -rw-r--r-- | docs/tomes/06-behavior.md | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index b30bc7d..c00705b 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -207,7 +207,9 @@ SuperAI для записей кланов, затем обновляет Behavi исполнен на исходной DLL с искусственными объектами. Rust пока не вызывает регулярный шаг: игровой мир ещё не предоставляет нужные ресурсные интерфейсы. При полной загрузке Rust уже восстанавливает членство объектов в клановых -списках Behavior, но сами записи распределителя и их доли пока не моделирует. +списках Behavior и задаёт их начальные доли. Остальные слова записи хранятся +сырыми: семантика только первого из пяти слов хвоста установлена для +нормализации. Runtime также не подменяет очередь оригинала: вызывающая сторона сама передаёт время, а локальный генератор Rust пока учитывает только случайные числа восстановленного стартового шага. @@ -241,10 +243,17 @@ Rust-тест повторно читает лицензированную миÑ TMA-записями и проверяет реальные `ObjectHandle`, но помечен `#[ignore]`, чтобы не требовать оригинальных ресурсов от остальных разработчиков. -Это пока только перечень участников. Оригинальный `Behavior.dll!Add` создаёт для -каждого участника запись размером `0x1c` с долей `1 / count`, после чего -нормирует прежние доли. Rust ещё не хранит эти поля и не исполняет их регулярный -обмен ресурсами. Поля не выводятся из TMA-соседнего слова или `OwnerId`. +Список распределителя хранит не только участников, но и долю каждого. При +добавлении двух объектов оба получают по половине общего веса. Если добавить +третий, движок оставляет долю новой записи около одной трети, а оставшийся вес +делит между прежними изменяемыми записями. Помеченная запись сохраняет свой вес, +как закреплённая часть общего набора. Повторное добавление того же объекта не +создаёт вторую строку и оставляет остальные слова записи нетронутыми. + +Rust хранит этот небольшой начальный список с долями. Он не смешивает selector +из TMA, владельца мирового объекта и внутренний ключ Behavior: связь в Rust +опирается на уже созданный `ObjectHandle`. Регулярный обмен ресурсами пока +остаётся отдельным этапом, потому что для него нужны интерфейсы игровых объектов. ### Регулярная передача ресурсов @@ -263,11 +272,12 @@ Resource Distributor работает со списком зарегистрир исходной `Behavior.dll`, но объекты и ответы интерфейсов заданы тестом; это ещё не воспроизведение реальной миссии. -Членство списка связано с реальным путём регистрации, но выполнение этой -миссии не сравнивалось с тем, как исходная DLL заполняет поля записи `0x1c` и -нормирует доли. Rust пока не хранит эти поля, а игровому миру ещё не хватает -ресурсных интерфейсов ArealMap для регулярного шага. Открытые вопросы и границы -проверки приведены в [границах знания](../appendices/knowledge-boundaries.md). +Для правила долей есть отдельная проверка исходной `Behavior.dll` на синтетических +записях при игровом x87 control word `0x007f`: проверены добавление, повторный +ключ, закреплённая запись, нулевая сумма и округление. Это позволяет Rust +сохранять начальный список, но пока не подтверждает веса реальных объектов в +живой миссии. Для регулярного шага по-прежнему не хватает интерфейсов ArealMap. +Остальные ограничения собраны в [границах знания](../appendices/knowledge-boundaries.md). Первый часто встречающийся table entry с side effect — `Handler(2)` (176 records в corpus). Он берёт active instruction, разрешает семь slots через |
