diff options
Diffstat (limited to 'docs/appendices/script-vm.md')
| -rw-r--r-- | docs/appendices/script-vm.md | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index dc42959..173721b 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -686,6 +686,34 @@ provider getter и изменение количества не подменен категории и выполнение миссии этим не проверены. Rust пока не переносит этот изменяемый бюджетный цикл. +#### Генератор tag 19 в том же бюджетном проходе + +Отдельный вектор заменяет mock-генератор исходным устройством tag `19`: +конструктор `Control.dll` RVA `0x22980`, rate `0x229a0`, update `0x22a60`, +vtable `0x3c608`. Конструктор выставляет слово включения `0x20`; descriptor +с `+0x18 = -1` сохраняет его. Оба устройства проходят через исходные +`0x2d340` и `0x2dca0`, их provider и изменение количества тоже исходные. + +При положительных параметрах проверенного вектора выработка зависит от поля +descriptor `+0x20`, текущего множителя `+0x4c`, доли provider и `dt`. Если +коэффициент selector `0` положителен, rate ограничивается значением selector +`0x200`, умноженным на долю provider. Поэтому один и тот же источник может +вернуть полную выработку или её ограниченный запас. + +| Коэффициент | Поле `+0x20` | Исходная rate | Amount после прохода | Доля provider | Множитель генератора после прохода | +|---|---|---|---|---|---| +| `1` | `0.5` | `0.1` | `0x42206666` | `0x3ecd4fdf` | `0x3f400000` (`0.75`) | +| `0.125` | `0.5` | `0.05` | `0x42203333` | `0x3ecd0e56` | `0` | + +В обоих случаях исходные amount, максимум, доля и интервал равны `40`, `100`, +`0.4` и `0.5`, а исходный множитель генератора — `1`. Его update читает +provider уже после потребителя tag `15`, повторно вычисляет rate и уменьшает +собственный множитель. Это не запись коэффициента выделения в `+0x4c`, как у +tag `15`: смысл изменения этого поля зависит от фабричного класса. +Векторы проверяют конечные положительные значения при x87 CW `0x007f`; +нулевой знаменатель, отрицательные параметры и другие классы устройств ими +не покрыты. Перенос общего бюджетного цикла в Rust ещё не завершён. + #### Активация и начальные часы Для Control класса `4` oracle вызывает исходный конструктор RVA `0x31490` |
