[enhancement] С-400/С-500: заметный холодный выброс, задержка зажигания и плавный старт; замедлить разгон перехватчиков #129

Open
opened 2026-11-06 07:01:35 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Запрос владельца

Доработать видимый пуск С-400/С-500: крышка ТПК открывается → ракета выбрасывается вверх без работающего основного двигателя → проходит заметная пауза → зажигается факел → начинается плавный разгон и выход на траекторию. Сейчас открытие крышки уже есть, но пауза почти не читается, а после вертикального вылета ракета слишком резко становится почти горизонтальной.

Дополнительно: сделать более медленный и плавный разгон всех игровых перехватчиков, с индивидуальными профилями семейств. Это не просьба одинаково замедлить все летящие объекты или снизить всем крейсерскую скорость.

Ориентир владельца — примерно 1–1,5 с между выбросом из ТПК и появлением основного факела. Это художественный/игровой ориентир по впечатлению от видео, не заявленная универсальная характеристика реальных боеприпасов. Референс для сравнения: отчётливо различимые фазы запуска, тяжесть движения и непрерывная дуга поворота.

Что в коде сейчас

Проверены актуальные remote HEAD: kimi-work @ 61aaa0bf359026711ba811a7f7e9877ce253ead2, main @ 1a693763fdf98916a39b394bb512340cc84bac87.

  • В каталоге параметров у M48n6 и M77n6 стоят cold=5, boost=8. При 20 Гц это всего 0,25 с холодной фазы; engine_lit() разрешает двигатель при age > cold (первый такой возраст — 6). Это объясняет, почему задержка кажется отсутствующей: она реализована, но очень коротка.
  • Открытие крышки занимает OPEN_TICKS=6 и предшествует выбросу. Его время нельзя засчитывать как требуемую паузу после выхода ракеты.
  • Выброс создаёт ракету с начальной скоростью 0.7 в игровых единицах; до зажигания скорость немного уменьшается. После зажигания каждый тик прибавляется постоянный accel: 0.5 для M48n6, 0.6 для M77n6. Максимальная скорость достигается примерно за 0,65–0,7 с после зажигания. У других ракет разгон также очень короткий и задаётся постоянным приращением скорости.
  • Основная ветка наведения включается уже по age >= boost; лимит turn=0.22 на тик позволяет набрать изменение направления порядка 90° примерно за восемь тиков после включения полного лимита. Это объясняет резкий перегиб у ПУ, хотя не является полным измерением конкретного пользовательского кадра.
  • Важно: простая замена cold на 20–30 оставит boost=8. Тогда основная ветка наведения сможет включиться до зажигания, потому что её условие не требует lit. Нужен согласованный контракт стадий, а не только увеличение одной константы.
  • У ударного игрового RM48U отдельный путь: strike.rs, EJECT_TICKS=5 и свой разгон. Его следует согласовать с хореографией той же ПУ, чтобы зенитный и наземный пуски не выглядели двумя несвязанными реализациями.

Требуемое поведение

1. Холодный пуск С-400/С-500. Сохранить резервирование конкретной ячейки, расход при физическом выбросе и отдельную крышку. После выброса ракета действительно перемещается вверх без основного факела, моторного света, непрерывного рева и powered smoke. Допустим отдельный газовый выброс/хлопок. Затем — самостоятельное событие зажигания с вспышкой, факелом и звуком в текущем положении ракеты, а не у оставленной ПУ. Начальный ориентир длительности — указанные 1–1,5 с; окончательно подобрать по игровому показу с обычной скоростью времени.

2. Разгон всех перехватчиков. Пересмотреть профили всех MissileKind, включая используемые несколькими комплексами. Нужна заметная фаза набора скорости и плавное включение тяги вместо почти мгновенного достижения максимума. Семейства должны сохранять характер и различия; не выдавать P1-SUN искусственную ракетную струю и не переносить холодный выброс на системы, для которых в игре предусмотрен горячий пуск. Максимальную скорость необязательно снижать: запрос касается прежде всего разгона.

3. Плавный выход на курс. Выделить согласованные игровые стадии opening/ejection/ignition/departure/guidance (названия и представление — на усмотрение реализации). Переход к основному наведению должен зависеть от завершения стартовой стадии, а не от второго несвязанного таймера. Наращивать допустимый темп поворота плавно; ограничить резкое изменение этого темпа. Перенаправление фактической скорости и ориентация модели должны давать непрерывную дугу, без мгновенного излома или чисто декоративного сглаживания поверх прежней ломаной траектории. Можно разрешать небольшой стартовый наклон по профилю, но не переключать ракету с вертикали сразу на почти горизонтальное преследование.

Здесь не требуется аэродинамический симулятор и не утверждается, что любой резкий наклон невозможен у всех реальных ракет. Цель — исправить конкретную неестественную игровую хореографию.

4. Единое состояние для live/replay/export. Открытие, выброс, зажигание, переходные позы, моторный звук, свет, дым и окончание горения должны соответствовать одной записанной последовательности. Пауза/перемотка/slow motion не дублируют звук и не включают факел раньше события. HD и обычный рендер показывают одинаковые стадии; красивый пуск должен сохраняться в киноповторе и MP4.

Проверка и приёмка

  • Парное видео до/после на одинаковом seed, ракурсе и скорости 1×: общий план ПУ и крупный план ракеты. На обычной скорости различимы открытие → выброс → пауза → зажигание → разгон → плавный поворот. Slow motion — дополнительная, не единственная демонстрация.
  • Тайминги фиксировать от физического выброса, отдельно от открытия крышки. До ignition отсутствуют powered effects; после ignition они появляются синхронно в позиции ракеты.
  • Сценарии: низкая/высокая и боковая цель, близкая цель, движение цели, потеря целеуказания, соседняя ПУ/строение, два последовательных пуска. Нельзя отменять voxel-коллизии, телепортировать стартовый участок или проводить ракету через крышку/корпус ради красивой картинки.
  • Проверки переходов фаз: увеличение cold не разрешает раннее основное наведение; ограничены скачки направления/темпа поворота и ускорения; готовность, отмена подготовки, расход и используемая ячейка не регрессируют.
  • Разгон/поворот влияют на время подлёта и близкие перехваты: сравнить сценарный набор до/после, ресурс двигателя, lifetime и достижимость целей. Намеренное изменение старта допустимо; случайное массовое самоуничтожение/истечение lifetime — нет. Не компенсировать это скрытым повышением вероятности попадания или обходом коллизий.
  • Отдельно проверить идентичные стадии в live, replay и коротком MP4, включая RM48U из той же ПУ.

Связано: #115 (визуальное качество), #118 (физический носитель RM48U), #120 (конечный двигатель/энергия), #88–#89 (сцена и replay/export). P2, enhancement: продолжение уже реализованного холодного пуска с конкретным дефектом согласования времён/наведения.

🤖 Filed by Codex, AI-агент Владимира (chexit). ### Запрос владельца Доработать видимый пуск С-400/С-500: **крышка ТПК открывается → ракета выбрасывается вверх без работающего основного двигателя → проходит заметная пауза → зажигается факел → начинается плавный разгон и выход на траекторию**. Сейчас открытие крышки уже есть, но пауза почти не читается, а после вертикального вылета ракета слишком резко становится почти горизонтальной. Дополнительно: сделать **более медленный и плавный разгон всех игровых перехватчиков**, с индивидуальными профилями семейств. Это не просьба одинаково замедлить все летящие объекты или снизить всем крейсерскую скорость. Ориентир владельца — примерно **1–1,5 с между выбросом из ТПК и появлением основного факела**. Это художественный/игровой ориентир по впечатлению от видео, не заявленная универсальная характеристика реальных боеприпасов. Референс для сравнения: отчётливо различимые фазы запуска, тяжесть движения и непрерывная дуга поворота. ### Что в коде сейчас Проверены актуальные remote HEAD: `kimi-work` @ `61aaa0bf359026711ba811a7f7e9877ce253ead2`, `main` @ `1a693763fdf98916a39b394bb512340cc84bac87`. - В [каталоге параметров](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/catalog/specs.json) у `M48n6` и `M77n6` стоят `cold=5`, `boost=8`. При 20 Гц это всего **0,25 с холодной фазы**; `engine_lit()` разрешает двигатель при `age > cold` (первый такой возраст — 6). Это объясняет, почему задержка кажется отсутствующей: она реализована, но очень коротка. - [Открытие крышки](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/airdef-mod/src/sim/launch.rs#L5) занимает `OPEN_TICKS=6` и предшествует выбросу. Его время нельзя засчитывать как требуемую паузу **после** выхода ракеты. - [Выброс](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/airdef-mod/src/sim/mod.rs#L2535) создаёт ракету с начальной скоростью 0.7 в игровых единицах; до зажигания скорость немного уменьшается. [После зажигания](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/airdef-mod/src/sim/mod.rs#L2604) каждый тик прибавляется постоянный `accel`: 0.5 для M48n6, 0.6 для M77n6. Максимальная скорость достигается примерно за 0,65–0,7 с после зажигания. У других ракет разгон также очень короткий и задаётся постоянным приращением скорости. - [Основная ветка наведения](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/airdef-mod/src/sim/mod.rs#L2642) включается уже по `age >= boost`; лимит `turn=0.22` на тик позволяет набрать изменение направления порядка 90° примерно за восемь тиков после включения полного лимита. Это объясняет резкий перегиб у ПУ, хотя не является полным измерением конкретного пользовательского кадра. - **Важно:** простая замена `cold` на 20–30 оставит `boost=8`. Тогда основная ветка наведения сможет включиться **до зажигания**, потому что её условие не требует `lit`. Нужен согласованный контракт стадий, а не только увеличение одной константы. - У ударного игрового RM48U отдельный путь: [strike.rs](https://gitea.maoniao.team/chexit/airdef/src/commit/61aaa0bf359026711ba811a7f7e9877ce253ead2/airdef-mod/src/sim/strike.rs#L28), `EJECT_TICKS=5` и свой разгон. Его следует согласовать с хореографией той же ПУ, чтобы зенитный и наземный пуски не выглядели двумя несвязанными реализациями. ### Требуемое поведение **1. Холодный пуск С-400/С-500.** Сохранить резервирование конкретной ячейки, расход при физическом выбросе и отдельную крышку. После выброса ракета действительно перемещается вверх без основного факела, моторного света, непрерывного рева и powered smoke. Допустим отдельный газовый выброс/хлопок. Затем — самостоятельное событие зажигания с вспышкой, факелом и звуком в текущем положении ракеты, а не у оставленной ПУ. Начальный ориентир длительности — указанные 1–1,5 с; окончательно подобрать по игровому показу с обычной скоростью времени. **2. Разгон всех перехватчиков.** Пересмотреть профили всех MissileKind, включая используемые несколькими комплексами. Нужна заметная фаза набора скорости и плавное включение тяги вместо почти мгновенного достижения максимума. Семейства должны сохранять характер и различия; не выдавать P1-SUN искусственную ракетную струю и не переносить холодный выброс на системы, для которых в игре предусмотрен горячий пуск. Максимальную скорость необязательно снижать: запрос касается прежде всего разгона. **3. Плавный выход на курс.** Выделить согласованные игровые стадии opening/ejection/ignition/departure/guidance (названия и представление — на усмотрение реализации). Переход к основному наведению должен зависеть от завершения стартовой стадии, а не от второго несвязанного таймера. Наращивать допустимый темп поворота плавно; ограничить резкое изменение этого темпа. Перенаправление фактической скорости и ориентация модели должны давать непрерывную дугу, без мгновенного излома или чисто декоративного сглаживания поверх прежней ломаной траектории. Можно разрешать небольшой стартовый наклон по профилю, но не переключать ракету с вертикали сразу на почти горизонтальное преследование. Здесь не требуется аэродинамический симулятор и не утверждается, что любой резкий наклон невозможен у всех реальных ракет. Цель — исправить конкретную неестественную игровую хореографию. **4. Единое состояние для live/replay/export.** Открытие, выброс, зажигание, переходные позы, моторный звук, свет, дым и окончание горения должны соответствовать одной записанной последовательности. Пауза/перемотка/slow motion не дублируют звук и не включают факел раньше события. HD и обычный рендер показывают одинаковые стадии; красивый пуск должен сохраняться в киноповторе и MP4. ### Проверка и приёмка - Парное видео до/после на одинаковом seed, ракурсе и скорости 1×: общий план ПУ и крупный план ракеты. На обычной скорости различимы открытие → выброс → пауза → зажигание → разгон → плавный поворот. Slow motion — дополнительная, не единственная демонстрация. - Тайминги фиксировать **от физического выброса**, отдельно от открытия крышки. До ignition отсутствуют powered effects; после ignition они появляются синхронно в позиции ракеты. - Сценарии: низкая/высокая и боковая цель, близкая цель, движение цели, потеря целеуказания, соседняя ПУ/строение, два последовательных пуска. Нельзя отменять voxel-коллизии, телепортировать стартовый участок или проводить ракету через крышку/корпус ради красивой картинки. - Проверки переходов фаз: увеличение cold не разрешает раннее основное наведение; ограничены скачки направления/темпа поворота и ускорения; готовность, отмена подготовки, расход и используемая ячейка не регрессируют. - Разгон/поворот влияют на время подлёта и близкие перехваты: сравнить сценарный набор до/после, ресурс двигателя, lifetime и достижимость целей. Намеренное изменение старта допустимо; случайное массовое самоуничтожение/истечение lifetime — нет. Не компенсировать это скрытым повышением вероятности попадания или обходом коллизий. - Отдельно проверить идентичные стадии в live, replay и коротком MP4, включая RM48U из той же ПУ. Связано: #115 (визуальное качество), #118 (физический носитель RM48U), #120 (конечный двигатель/энергия), #88–#89 (сцена и replay/export). **P2, enhancement**: продолжение уже реализованного холодного пуска с конкретным дефектом согласования времён/наведения.
Author
Owner

🤖 Agent: Kimi Code, с участием Kimi for Coding и DeepSeek fast.

Реализовано и опубликовано в kimi-work: код 1261c3072, проверки/парная съёмка 56093b3a5, 0b645d77e.

Стадии пуска согласованы: выброс без powered effects → зажигание в текущей позиции → departure со spool тяги и растущим темпом поворота → полное наведение только при age >= cold + boost. С-400: cold 20 тиков (1.00 с), С-500: 24 (1.20 с). RM48U использует согласованные 20 тиков и дым/звук с зажигания. P1-SUN остаётся без ракетной струи. Ранний поворот rail-launched ракет был откачен после регрессии на холмах.

pk, максимальные speed/turn/accel/fuse и swept-коллизии не менялись. Добавлены регрессии запрета раннего наведения, continuity скорости/поворота, replay ignition и RM48U.

Парный replay/export на одном мире/seed/режиссёре: до и после. Это не live-видео; Windows/Linux и живое прослушивание не заявляются.

Проверки: core release 210 + 8 сценариев (8 ignored), adapter 67 + 1 boundary + 5 сценариев, WASM 30 шагов, generators fresh. Баланс намеренно отражает более долгий старт: сетка 6×8 seed — kills 1988→1939, leaks 216→258, ракет 3461→3467, energy_lost 0→0; массового истечения lifetime нет. Данные.

Issue оставляю открытым для визуальной приёмки пользователем.

🤖 Agent: Kimi Code, с участием Kimi for Coding и DeepSeek fast. Реализовано и опубликовано в `kimi-work`: код `1261c3072`, проверки/парная съёмка `56093b3a5`, `0b645d77e`. Стадии пуска согласованы: выброс без powered effects → зажигание в текущей позиции → departure со spool тяги и растущим темпом поворота → полное наведение только при `age >= cold + boost`. С-400: cold 20 тиков (1.00 с), С-500: 24 (1.20 с). RM48U использует согласованные 20 тиков и дым/звук с зажигания. P1-SUN остаётся без ракетной струи. Ранний поворот rail-launched ракет был откачен после регрессии на холмах. `pk`, максимальные speed/turn/accel/fuse и swept-коллизии не менялись. Добавлены регрессии запрета раннего наведения, continuity скорости/поворота, replay ignition и RM48U. Парный replay/export на одном мире/seed/режиссёре: [до](https://gitea.maoniao.team/chexit/airdef/src/branch/kimi-work/docs/media/cold-launch/cold-launch-129-before.mp4) и [после](https://gitea.maoniao.team/chexit/airdef/src/branch/kimi-work/docs/media/cold-launch/cold-launch-129-after.mp4). Это не live-видео; Windows/Linux и живое прослушивание не заявляются. Проверки: core release 210 + 8 сценариев (8 ignored), adapter 67 + 1 boundary + 5 сценариев, WASM 30 шагов, generators fresh. Баланс намеренно отражает более долгий старт: сетка 6×8 seed — kills 1988→1939, leaks 216→258, ракет 3461→3467, energy_lost 0→0; массового истечения lifetime нет. [Данные](https://gitea.maoniao.team/chexit/airdef/src/branch/kimi-work/docs/measurements/issue-129-grid.csv). Issue оставляю открытым для визуальной приёмки пользователем.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#129