aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 12:55:35 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 12:55:35 +0300
commitbbd31fc25336d6a2e6c5927ad4d7101696f8bd78 (patch)
tree27ab5689a6bc414a8bdb3052ea743566cb248faa /docs
parente8942caa233a663155ffec14c1070ad5dbbb9c7b (diff)
downloadfparkan-bbd31fc25336d6a2e6c5927ad4d7101696f8bd78.tar.xz
fparkan-bbd31fc25336d6a2e6c5927ad4d7101696f8bd78.zip
feat(fx): animate native point light color and radius jitter
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/knowledge-boundaries.md9
-rw-r--r--docs/reference/environment-effects.md23
-rw-r--r--docs/reference/render-frame.md8
-rw-r--r--docs/tomes/05-render.md10
4 files changed, 39 insertions, 11 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index 103769c..ed821e4 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -84,12 +84,13 @@ Raw queue clock задаёт фазу волн отдельно от времеÐ
## FXID field-level semantics
-Control Op1 пока использует цвет и радиус без случайных добавок команды;
-это явное приближение считается в `render_coverage control_op1_jitter_unsupported`.
+Control Op1 воспроизводит добавки к RGBA и радиусу двумя сохраняемыми RNG-потоками.
+Seeds просмотра `1/1` и общий порядок других FX ещё не совпадают с оригиналом;
+это явное приближение считается в `render_coverage control_op1_rng_schedule_approx`.
Масштаб радиуса длиной преобразованного направления и нижняя замена 0,01 восстановлены.
Локальный флаг `0x80000000` сохраняет свет на MSH владельца, исключая его
-из общего света рельефа. Мерцание жёлтого источника над заводом ещё использует
-авторские цвет и радиус; порядок общего native RNG пока не воспроизводится.
+из общего света рельефа. Мерцание жёлтого источника над заводом подключено;
+конкретная последовательность пока не является эталоном совпадения во времени.
Control Op2 воспроизводит modes 0/2; modes 1/3, body+76 и неподдержанные
time modes/привязки считаются как `render_coverage control_op2_unsupported`.
diff --git a/docs/reference/environment-effects.md b/docs/reference/environment-effects.md
index 2a17838..23115af 100644
--- a/docs/reference/environment-effects.md
+++ b/docs/reference/environment-effects.md
@@ -165,13 +165,32 @@ opcode 1; обе границы включены, а коэффициент вы
Позиция, направление, цвет и range интерполируются по концам команды.
Позиция и направление переводятся через основу родителя; направление после
-этого нормализуется, а нулевой вектор остаётся нулевым. Range сохраняет
-авторское значение без ограничения снизу. Типы Op1 `1`, `2`, `5`, `6` и `7`
+этого нормализуется, а нулевой вектор остаётся нулевым. Радиус умножается на
+длину преобразованного направления; неположительный результат заменяется на
+`0,01`. Типы Op1 `1`, `2`, `5`, `6` и `7`
выбирают point-light selector `1`; их native flags сохраняются. Типы `3` и
`4` выбирают другие классы записей LightManager и не попадают в generic список
точечного света. У `LightningEffect` выборка тех же полей использует отдельные
ограничение по длительности FXID и правила безопасной обработки.
+Generic Control Op1 добавляет к интерполированным RGBA и радиусу равномерный
+шум `U × (amplitude / 65536) − amplitude / 2`, где `U` — очередное 16-битное
+слово native FX-генератора. Цветовые амплитуды лежат в body `92..108`,
+амплитуда радиуса — в `116..120`. Радиус с этой добавкой затем умножается на
+длину преобразованного направления и ограничивается снизу `0,01`.
+В [эталонной Effect.dll](original-binaries.md) RVA `0xF6E0` расходует слова
+в порядке A, B, G, R, радиус: R использует общий поток DLL, остальные четыре
+выборки — отдельный поток Op1. Нулевая амплитуда и выход за интервал команды
+не отменяют расход этих слов. Четыре активные выборки RGBA и состояния обоих
+генераторов после пяти вызовов совпали побитно с DLL при CW `0x007F`;
+сравнение радиуса учитывает известное приближение native FastProc длины.
+
+Приложение сохраняет состояния между обновлениями сцены, не пересчитывая их
+при повторной отправке кадра. Начальные seeds просмотра равны `1/1`;
+инициализация и общий порядок выборок остальных FX ещё не воспроизведены.
+Эта граница учитывается в `control_op1_rng_schedule_approx`: мерцание
+подключено, но его конкретная последовательность ещё не служит эталоном parity.
+
## Молния и звуковые события
`decode_env_lightning_fxid` извлекает из FXID длительность, ссылки opcode 3 и
diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md
index 8bd548f..b3c0be5 100644
--- a/docs/reference/render-frame.md
+++ b/docs/reference/render-frame.md
@@ -122,9 +122,11 @@ RVA `0xF6E0`, преобразует направление текущей маÑ
завода локальный радиус 7 и длина `0x409B1F91` дали радиус `0x4207BB9F`.
Это же значение проверяется Rust-тестом общего Op1 evaluator.
-Случайные добавки цвета и радиуса ещё не воспроизводятся; приложение сообщает
-число таких Control-команд как `control_op1_jitter_unsupported` и использует
-их авторские значения. У синего источника в проверенном захвате добавки нулевые.
+Случайные добавки к RGBA и радиусу воспроизводятся двумя сохраняемыми потоками;
+формула и расход слов внутри Op1 сверены исполнением DLL. Инициализация
+и общий порядок других FX ещё приближённые: такие команды считаются в
+`control_op1_rng_schedule_approx`. У синего источника в проверенном захвате
+амплитуды нулевые; у жёлтого света над трубой они меняют освещение крыши.
Флаг источника `0x80000000` отделяет локальный свет объекта от общего света
мира. В эталонной `Terrain.dll` (SHA-256
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 1329268..8c059f2 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -864,8 +864,14 @@ shadows. Радиус источника масштабируется длино
направления до нормализации. Например, локальный радиус 7 при масштабе узла
около 4,85 освещает область радиусом около 34. Потеря этого множителя оставляла
синий свет завода почти незаметным. Неположительный итог заменяется на 0,01.
-Случайные добавки к цвету и радиусу пока явно считаются в
-`render_coverage control_op1_jitter_unsupported`.
+К плавным кривым добавляется мерцание: каждый канал RGBA и радиус получают
+случайную поправку от минус половины авторской амплитуды до плюс половины.
+Она не накапливается, а заново прибавляется к текущей кривой. Два потока
+случайных чисел сохраняются между обновлениями сцены; даже погасший на время
+свет расходует их. Повторная отправка кадра не меняет уже выбранный свет.
+Формула и порядок выборок внутри команды сверены с исполнением оригинала.
+Начальные значения просмотра и общий порядок вызовов других FX пока
+приблизительные и считаются в `render_coverage control_op1_rng_schedule_approx`.
Эффект может одновременно рисовать поверхность и издавать звук. Для Op2
приложение создаёт отдельный звуковой источник у каждого экземпляра команды: