feat(runtime): restore indexed Control provider query
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
This commit is contained in:
4 files changed
+313
-19
No files matched your search
@@ -1089,8 +1089,31 @@ NDP, а `FUN_1000a100` (RVA `0xa100`) добавляет их в общую та
|
||||
последовательность provider-строк: её длина берётся из NDP, она не дополняется
|
||||
до числа узлов MSH и не участвует во второй перенумерации ключа.
|
||||
|
||||
Так этот селектор включён в цепочку добычи руды оригинала. В той же сборке
|
||||
`Behavior.dll` (SHA-256
|
||||
Индексный selector `0x400` выдаёт значение выбранной строки provider как есть.
|
||||
Сначала общий индекс устройств выбирает дескриптор, затем его ключ выбирает
|
||||
строку NDP; это разные номера. Результатом становится текущее type-1 значение
|
||||
этой строки, а не запас `CurrentOre`, предел или значение после умножения на
|
||||
коэффициент и `M`. Например, provider-строка с `0.625` возвращает `0.625`, а
|
||||
записанный в ней ноль тоже остаётся успешным результатом. Rust использует уже
|
||||
подготовленную таблицу и сообщает отдельную ошибку, если provider-таблица или
|
||||
строка по ключу недоступна. Этот запрос читает снимок состояния и сам не меняет
|
||||
таблицу и не запускает её обновление.
|
||||
|
||||
У правила есть два разных подтверждения. Разбор AutoDemo нашёл восемь таблиц
|
||||
Control и 100 устройств; все 100 значений по ключам устройств в этом корпусе
|
||||
равны `1.0`, поэтому Rust-проверка подтверждает реальные ключи и доступность
|
||||
строк, но сама по себе не различает выбор по ключу и по номеру устройства.
|
||||
Отдельная x86-проверка исходного `Control.dll` включала шесть вызовов на
|
||||
синтетической таблице, где значения строк были заданы вручную и различались.
|
||||
Например, при номере устройства `2`, ключе `1` и нулевом слове
|
||||
`device+0x50` оригинал вернул `0.625` из выбранной строки. Точные биты ответов
|
||||
приведены в [техническом разборе](../appendices/script-vm.md#индексный-control-getter-сырой-селектор-0x400).
|
||||
Этот опыт не создавал оригинальные factory-объекты и не исполнял полную миссию:
|
||||
полный интерфейс IID `0x204`, интеграция Behavior и игровое поведение остаются
|
||||
непроверенными.
|
||||
|
||||
В цепочке добычи руды оригинал использует описанный выше selector `0x300`.
|
||||
В той же сборке `Behavior.dll` (SHA-256
|
||||
`ddfbdbde07832358fe6e35e01c8dba9b58e7313789498b6049ed51d4ed9baf99`)
|
||||
`FUN_100186b0` (RVA `0x186b0`) перечисляет устройства типа `0x1a`, а
|
||||
`FUN_100198e0` (RVA `0x198e0`) суммирует успешные запросы IID `0x204` с selector
|
||||
|
||||
Reference in new issue
Block a user