aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-29 18:43:09 +0300
committerValentin Popov <valentin@popov.link>2026-10-29 18:43:09 +0300
commit1d20509b052c0b3e2db2a8bd86756f007041ab21 (patch)
tree109f42cb4f8fef5aeeba52969ec847fdab82dc59 /docs/tomes
parentd3a0f8c7ffafc9ae2d8f9efe5d7a730c1fa0173d (diff)
downloadfparkan-1d20509b052c0b3e2db2a8bd86756f007041ab21.tar.xz
fparkan-1d20509b052c0b3e2db2a8bd86756f007041ab21.zip
feat(runtime): support class-9 and default Control budgets
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/06-behavior.md36
1 files changed, 27 insertions, 9 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 6406307..4e71ed9 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -725,6 +725,14 @@ component ID и multiplier `2.5` при копировании новых коэ
и дополнительная строка `fx` возвращают cursor `record + 0xbf`.
Слово CTLD `+0x18 == -1` сохраняет фабричное `+0x50` и при INTO-замене.
+Ветвь фабрики `0x2d4b0` направляет factory tags без отдельного случая в
+конструктор `0x20800`; его vtable использует общий reader `0x21d50` в slot
+`+0x1c`. Поэтому common-field override применяется и к этой default-семье,
+включая tag `6`; Rust-тест проверяет его вместе с тегами `12` и `13`. Tags
+`1`, `17`, `26` и `30` остаются явными границами: фабрика выбирает для них
+отдельные классы, а проверки текущей реализации ещё не покрывают их полное
+setter-поведение.
+
У tag `2` slot `+0x1c` указывает на обёртку `0x29650`. Она вызывает тот же
reader, затем сохраняет selector `1` в `+0x120`, округляет selector `0` через
x87 `FISTP` в `+0x124` и заново обнуляет массив `+0x12c` по накопленному числу
@@ -1061,15 +1069,25 @@ Rust переносит этот порядок, сохраняет native наÐ
в массиве, его обновление перечитывает уже изменённую долю после обслуживания
категории tag 15. Этот явный вызов хранит также две выходные ставки `+0x5dc` и
`+0x5e0`, но сам по себе ещё не запускается игровыми часами.
-Поддержаны factory callbacks `15/19` и текущие descriptor tags `15/19`
-(категории `0/1`); неизвестное устройство,
-недоступные данные provider или нулевой знаменатель останавливают весь шаг без
-частичных изменений.
-Другие категории и полный миссионный цикл пока не подтверждены. В лицензированном
-`min_l_n1.dat` рядом с тегами `19` и `15` есть также factory tags `9`, `12`,
-`13`, `21`, `25` и `26`; поэтому его полный проход пока явно отклоняется на
-первой неподдержанной категории `9`. Проверка сохраняет всю таблицу без
-изменений и не доказывает успешный бюджетный шаг на реальной миссии.
+Помимо класса `15` и генератора `19` поддержан класс `9`: он считает ставку
+через шесть собственных значений и при распределении обновляет их вместе с
+накопленными изменениями. Например, для доли provider `0.4`, интервала `0.5`,
+`B = 0.2`, коэффициентов `C0 = 0.75`, `C1 = 0.6`, `C2 = 2` и масштаба
+`1.25` исходная ставка имеет биты `0xbeae147b`; после полного выделения
+обновлённые шесть значений совпадают с native побитно.
+
+Несколько фабричных классов используют общий callback: ставка равна
+`-(dt * B)`, а обновление записывает долю выделения в множитель. К этому
+семейству относятся фабричные теги `12`, `13`, `25` и `21`, а также другие
+классы, которые исходный диспетчер направляет в фабрику по умолчанию. Текущая
+категория читается из descriptor: её native map подтверждён только для тегов
+`0..=34`. Неподдержанный специализированный callback, недоступный provider или
+неподдержанное число останавливают шаг без частичных изменений. В
+лицензированном `min_l_n1.dat` предварительная проверка распознаёт текущие
+категории и выявляет неподдержанный factory tag `26`; она отклоняет бюджетный
+вызов до расчёта ставок и обновлений, сохраняя таблицу целиком. Полный
+бюджетный проход на реальной миссии и подключение к игровым часам пока не
+подтверждены.
Отдельный путь объекта класса `4` умножает интервал на контактный коэффициент и
передаёт изменение строке. В проверенном примере коэффициент `1`, интервал `2`,