diff --git a/README.md b/README.md index cfedee3..f94aef3 100644 --- a/README.md +++ b/README.md @@ -270,10 +270,13 @@ API мода `render.set-lights` (до 512, плавно интерполиру «Герберы» выглядят для них как настоящие. Геометрия встречи проверяется по движению обоих объектов за тик, а остаточный шанс учитывает фактическую скорость перехватчика. -**Энергетика перехватчика.** После холодного выброса ракета разгоняется, но двигатель работает -конечное игровое время. После выгорания ракета летит по инерции, теряет скорость и манёвренность; -при недостаточной скорости сопровождение срывается. Факел, звук двигателя и новый дым прекращаются -при выгорании и в live, и в повторе; уже созданный дым продолжает рассеиваться. +**Энергетика перехватчика.** Сначала ракета выходит из ТПК без двигателя: у С-400 это 1,0 с, +у С-500 — 1,2 с; только потом в её текущей точке зажигается факел, и тяга плавно нарастает. +После выброса ракета разгоняется, но двигатель работает конечное игровое время. После выгорания +ракета летит по инерции, теряет скорость и манёвренность; при недостаточной скорости сопровождение +срывается. Факел, звук двигателя и новый дым прекращаются при выгорании и в live, и в повторе; +уже созданный дым продолжает рассеиваться. У ракет с горячим (рельсовым) пуском тяга тоже +нарастает плавно, но холодного выброса нет; электрический P1-SUN не получает ракетную струю. **Последний шанс** (`/airdef lastchance on|off`, по умолчанию вкл). Комплекс стреляет и по классу целей вне своих ролей (С-400, С-500 и Patriot по умолчанию не бьют дроны), если цель долетит до своей точки меньше чем за 10 с и на ней ещё нет diff --git a/docs/BATTERIES-AND-COLD-LAUNCH.md b/docs/BATTERIES-AND-COLD-LAUNCH.md index a6163ee..9e13033 100644 --- a/docs/BATTERIES-AND-COLD-LAUNCH.md +++ b/docs/BATTERIES-AND-COLD-LAUNCH.md @@ -69,13 +69,26 @@ 1. Подготовка резервирует конкретную ячейку. Отдельная крышка ТПК открывается; ракета ещё не расходуется. 2. При потере цели или неисправности/сворачивании носителя до выброса подготовка отменяется. 3. Ракета выбрасывается из фактического muzzle. Боекомплект уменьшается один раз; использованный ТПК остаётся открытым. -4. В фазе выброса отсутствуют факел, непрерывный звук двигателя и его дымовой след. -5. После зажигания включаются эффекты, ракета разгоняется и начинает поворот по существующей игровой логике. +4. Выброс идёт без двигателя: ракета поднимается и линейно теряет скорость под газовым сопротивлением. + Длительность считается от выброса, а не от открытия крышки: у С-400 (`M48n6`) 20 тиков — 1,00 с, + у С-500 (`M77n6`) 24 тика — 1,20 с, у IRIS-T и Тора (`IrisT`/`M9m338`) 8 тиков — 0,40 с. + В этой фазе нет факела, непрерывного звука двигателя, моторного света и powered smoke; остаётся + только отдельный газовый хлопок/клуб. +5. Зажигание — отдельное событие в текущей точке ракеты, а не у оставленной ПУ: там же появляются + вспышка, факел, звук и запись `MotorIgnition`. Оно наступает после `cold` тиков выброса. +6. После зажигания начинается departure: тяга плавно нарастает от 45% к 100%, а допустимый темп + поворота — от 20% к полному за `boost` тиков. Полное наведение (включая самонаведение и облёт + рельефа) включается только при `age >= cold + boost`; при увеличении `cold` оно не может + включиться раньше мотора. Максимальная скорость, `pk`, `turn` и правила столкновений не менялись. Это действует для зенитных С-400/С-500 и подготовленного ударного RM48U у С-400. У ручного удара носитель и ячейка резервируются до пуска; изменение состояния отменяет подготовку -без расхода. Для RM48U добавлен плавный разгон после выброса. Задержанный ручной приказ -не возобновляется после загрузки мира: незапущенный боеприпас остаётся в носителе. +без расхода. RM48U использует ту же 20-тиковую хореографию: неосвещённый выброс, зажигание в текущей +точке, затем разгон; насчитанное время полёта включает выброс, а записанный дым начинается у точки +зажигания. Задержанный ручной приказ не возобновляется после загрузки мира: незапущенный боеприпас +остаётся в носителе. Ракеты с рельсовым (горячим) пуском тоже получили плавное нарастание тяги за +свой `boost`, но не холодный выброс; электрический P1-SUN сохраняет постоянный разгон и не получает +ракетную струю. В записи сохраняются конфигурация машины, использованные ячейки и положение крышки; повтор восстанавливает их по своей временной шкале. Записанный дым начинается у точки зажигания, @@ -92,17 +105,30 @@ ## Проверка в игре и тестами -Исходный код батареи и команды опубликованы в `966b52f`. Для этой контрольной точки прошли -169 тестов ядра и 4 сценария (7 отдельных тестов помечены ignored), а также 53 теста адаптера, -проверка границы с ядром и ещё 4 сценария. Настоящий собранный WASM-пакет прошёл 21 шаг -`wasm_contract.toml`, включая конфигурацию батареи и развёртывание новых пресетов. -Генератор моделей не обнаружил различий с исходниками. +Историческая контрольная точка батареи и команд — `966b52f`: 169 тестов ядра и 4 сценария +(7 ignored), 53 теста адаптера, проверка границы с ядром и ещё 4 сценария; настоящий WASM-пакет +прошёл 21 шаг `wasm_contract.toml`, генератор моделей не нашёл различий. -Отдельный тест симуляции проверяет открытие до расхода, отмену при повреждении, -однократное списание при выбросе, отсутствие голоса двигателя до зажигания и последующий рост скорости. -Тест повтора проверяет перемотку состояния крышек и конфигурации пусковой туда и обратно. +Контрольная точка #129 — `4b013fb7f30dbaa87a266b27a31911937fc523b4` (ветка +`agent/issue-129-cold-launch`): core release **206 + 8 сценариев** (8 ignored), адаптер +**67 + 1 boundary + 5 сценариев**, настоящий WASM **30 шагов**, `gen_catalog.py --check` без +расхождений, `gen_models.py --check` без различий, `test_gen_assets.py` — 10 тестов. -Ниже — исходные кадры из изолированного тестового мира Horizon, Metal, 2560×1440. +Отдельные тесты проверяют открытие до расхода, отмену при повреждении, однократное списание при +выбросе, отсутствие голоса/факела до зажигания, записанное зажигание через `cold` тиков после +выброса, плавные ограничения скорости и поворота для всех профилей, а также RM48U без powered +эффектов до зажигания. Тест повтора проверяет перемотку состояния крышек и конфигурации ПУ туда и +обратно и отсутствие дыма до записанного зажигания. + +Сравнительная выборка #129 (те же seed, что у сетки #120; 6 вариантов × 8 seed, 2208 целей на +сторону): сбито 1988 → 1939, прорывов 216 → 258, ракет 3461 → 3467; `energy_lost` 0 → 0, +`expired` 1 → 0, сорванных о рельеф 2 → 4. Близкие (`near200`) 318 → 311 сбитых, дальние +(`far1500`) 338 → 334, холмы (`hills20`) 334 → 319. Отдельные 12 seed `SAMS=20 SIZE=12`: +203 → 201 сбитых, 1 → 3 прорыва, 355 → 360 ракет. Это ожидаемое следствие более длинного старта, +а не скрытая компенсация: `pk`, максимальные скорости и столкновения не менялись. Данные: +[сетка](measurements/issue-129-grid.csv), [рейды](measurements/issue-129-balance.csv). + +Ниже — исходные кадры крышек из изолированного тестового мира Horizon, Metal, 2560×1440. На первом четыре малые крышки ТПК закрыты; на втором одна поднята, остальные закрыты. Большая прямоугольная панель позади труб — навесная РЛС конфигурации `integrated`. @@ -114,5 +140,38 @@ `3fae616902563b01e6463a32687c062d5983c4e94bd357f8f8129744d859f4d7`; геометрия крышек и их преобразования совпадают с опубликованной версией. Сохранение после пуска содержит 3 оставшиеся ракеты С-400 и маску использованной ячейки `1`. -Эти кадры подтверждают положение крышек, но не являются видеопроверкой всех стадий полёта: -сам выброс и момент зажигания крупным планом снять не удалось. + +### Съёмка стадий #129 + +Изолированный scratch-мир `ColdLaunch129` (плоский тестовый рельеф, `--creative`), Metal, +`HORIZON_NO_AUDIO=1`, мод и клиент из коммита `4b013fb…`. Один перехват Х-22 +записан и экспортирован режиссёром: `/airdef replay export cold129d best fps=30 size=1280x720`. +Файл [cold-launch-129.mp4](media/cold-launch/cold-launch-129.mp4) — h264 1280×720, 30 fps, +403 кадра, 13,43 с, AAC 48 кГц stereo (mean −15,7 dB, max −1,1 dB; звук сведён офлайн, +живое прослушивание не выполнялось). Это повтор/экспорт одной записи, а не отдельная +live-съёмка: живые кадры того же пуска в MP4 не попали. + +Планы фильма (по сменам кадра и OCR титров, 30 fps): общий план ПУ — кадры 1–93; «Пуск» — +94–152; «Сближение» — 153–218; «Поражение цели» — 219–403. В плане «Пуск» камера стоит в +46 блоках сбоку и следит за ракетой. Выброс начинается на кадре 94; крупная факельная область +появляется на кадре 128, то есть через 34 кадра ≈ 1,13 с от начала выброса — в пределах +нескольких кадров от правила `cold=20` тиков = 1,00 с (титр/склейка и порог цвета добавляют +задержку). До этого кадра крупного факела нет. Разгон и поворот видны в кадрах 128–152 +(≈0,8 с powered departure). + +Кадры из того же MP4 (общий план, 0,5 с выброса без факела, 1,1 с — факел, 1,7 с — разгон): + +![Общий план С-400 перед пуском](media/cold-launch/cold-launch-129-general.png) + +![Неосвещённый выброс, около 0,5 с](media/cold-launch/cold-launch-129-eject-0.5s.png) + +![Факел после зажигания, около 1,1 с](media/cold-launch/cold-launch-129-ignition-1.1s.png) + +![Разгон и поворот, около 1,7 с](media/cold-launch/cold-launch-129-departure-1.7s.png) + +**Ограничение приёмки.** Агент, выполнивший прогон, не имеет ввода изображений и не может сам +оценить композицию, читаемость и красоту кадров; он проверил только факт съёмки, разрешение, +частоту, длительность, звуковую дорожку, границы планов и появление крупной факельной области. +Кадры и MP4 приложены для человеческого просмотра. Отдельный очень крупный статичный план +выброса у самой ПУ и live-видео в этом прогоне не сняты; `--offscreen` не даёт окна для +сторонней записи экрана. Это не полная визуальная приёмка #129. diff --git a/docs/CODEX-HANDOFF.md b/docs/CODEX-HANDOFF.md index 48ac4c7..5662209 100644 --- a/docs/CODEX-HANDOFF.md +++ b/docs/CODEX-HANDOFF.md @@ -16,6 +16,58 @@ подтвердила 1.6 как фактический голос P1-SUN (недостижимый `P1sun => 1.7` в старом match не в счёт); на это добавлена Rust-регрессия. Остаток: варианты комплексов и игровая приёмка. +### Продолжение #129: стадии холодного пуска и разгон (6 ноября 2026) + +Ветка `agent/issue-129-cold-launch`, кодовый коммит `4b013fb7f30dbaa87a266b27a31911937fc523b4` +(документация, измерения и кадры — следующим коммитом этой же ветки). +Игра/движок не менялись: pin `278f356aa604fa21c2d15d0081823bbe0f891df2`, API30. Push не выполнялся, +issues не закрывались. + +**Контракт стадий.** У `MissileSpec` появились `eject` и `eject_drag`; `cold` — тики физического +выброса, `boost` — тики departure. `guided(age) = age >= cold + boost`; основная ветка наведения, +самонаведение и облёт рельефа больше не могут включиться до зажигания (раньше было `age >= boost`, +что при большом `cold` включало наведение до мотора). Зажигание — по-прежнему `age > cold`; +событие `MotorIgnition`, звук, факел и голос используют текущую позицию ракеты. `departure_ramp` +растёт 0→1 за `boost`; темп поворота в departure — `turn·(0.2 + 0.8·ramp)`. Тяга ракетных +профилей — `accel·(0.45 + 0.55·ramp)`, на guidance — полная. P1-SUN (`flame=0`) сохраняет +полный разгон без ракетной струи. + +**Профили.** `M48n6`: `cold=20`, `eject=2.4`, `eject_drag=0.07` — 1,00 с; `M77n6`: `cold=24`, +`eject=2.6`, `eject_drag=0.07` — 1,20 с; `IrisT`/`M9m338`: `cold=8`, `eject=1.8/1.6`, +`eject_drag=0.1` — 0,40 с. Рельсовые профили (`cold=0`) получили только spool тяги; ранний +поворот на рельсовом пуске был проверен и отменён: он уводил Pac3 в землю на холмах и валил +`an_interceptor_over_rolling_land_does_not_hit_the_ground`. `speed`, `accel`, `turn`, `pk`, +`fuse` и правила столкновений не менялись. + +**RM48U.** `EJECT_TICKS` 5 → 20. Выброс неосвещённый и замедляется; зажигание на `EJECT_TICKS`, +факел/звук/голос с этого момента; насчитанное время полёта включает выброс; дым в записи +начинается от точки зажигания, а не от горловины. Live, repeat и export читают одно и то же +состояние `lit`/записанное `MotorIgnition`. + +**Проверки.** core release **206 + 8 сценариев**, 8 ignored; адаптер **67 + 1 boundary + +5 сценариев**; настоящий `.hmod` — **30 шагов** `wasm_contract.toml`; `gen_catalog.py --check` и +`gen_models.py --check` без расхождений; `test_gen_assets.py` — 10 тестов; `git diff --check` чист. +Новые регрессии: стадии по порядку и отсутствие powered-эффектов до зажигания; `guided` не раньше +`cold` для всех профилей; непрерывность скорости/поворота и throttled первый powered тик; P1-SUN +без факела; записанное зажигание через `cold` тиков и `missile_is_lit` по нему; RM48U без +голоса/факела до зажигания и ровно один звук зажигания. + +**Баланс.** Сетка #120 (6 вариантов × 8 seed, 2208 целей на сторону, baseline `dc36d67`): +сбито 1988 → 1939, прорывов 216 → 258, ракет 3461 → 3467; `near200` 318 → 311, `far1500` +338 → 334, `hills20` 334 → 319; `energy_lost` 0 → 0, `expired` 1 → 0, scrub 2 → 4. +`SAMS=20 SIZE=12`, 12 seed: 203 → 201 сбитых, 1 → 3 прорыва, 355 → 360 ракет. Отдельные CSV: +[сетка](measurements/issue-129-grid.csv), [рейды](measurements/issue-129-balance.csv). +Это намеренное следствие более длинного старта; скрытого повышения `pk` или максимальной скорости нет. + +**Съёмка.** Scratch `HORIZON_HOME=/private/tmp/issue-129-visual`, плоский мир `ColdLaunch129`, +Metal/offscreen, мод и клиент из `4b013fb`. Экспорт `cold129d`: 1280×720, 30 fps, 403 кадра, +13,43 с, h264 + AAC 48 кГц (mean −15,7 dB). План «Пуск» — кадры 94–152: выброс на 94, крупный +факел на 128 (≈1,13 с, правило 1,00 с), разгон до 152. Файл и кадры: +[docs/media/cold-launch](media/cold-launch). **Ограничение:** у агента нет ввода изображений, +поэтому композиция и красота кадров человеком не оценены; проверены только факт/параметры +съёмки, границы планов и появление факела. Отдельный very-close статичный план выброса и live-MP4 +не сняты (`--offscreen` без окна); это не полная визуальная приёмка. + ### Продолжение #122 (второй налёт из UI) Точный лог Windows: `stopped in UI event (fuel budget 1000000000, remaining Some(0))`, diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index de5eaa0..126d16a 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -30,6 +30,7 @@ | #116 | Streaming не освобождает busy-guard работающего acoustic worker; проверено engine-тестами | Внешняя игровая приёмка на целевых машинах | | #118 | Физический С-400/RM48U, четыре общие ячейки, конечные запасы; доставка и обратный вывоз ТЗМ, резерв/отмена, возврат снятой ПВО; обе фазы вывозного маршрута сохраняются; carrier/крышки/выброс/зажигание/разгон в записи; фантомное ПВО удалено | Визуальная приёмка пуска и маршрутов на сложном рельефе; другие носители не добавлены без подтверждённого профиля | | #128 | Невыполнимый возврат RM48U (ПУ движется/повреждена, маршрут недоступен, заявку уже везёт другая ТЗМ, у склада нет места) больше не блокирует ТЗМ: заявка сохраняется, свободная ТЗМ исполняет независимые заявки на доставку; выполнимый возврат снова в приоритете; консервация боеприпасов и save-restore посреди маршрута покрыты регрессиями | Игровая приёмка маршрутов на сложном рельефе остаётся за #118 | +| #129 | Единые стадии пуска: выброс без мотора (`cold` 20/24 тика у С-400/С-500, 8 у IRIS-T/Тора), зажигание в текущей позиции, departure с плавным ростом тяги/темпа поворота, наведение только после `cold + boost`; рельсовые ракеты получили spool тяги без холодного выброса, P1-SUN — без струи; RM48U согласован на 20 тиков; live/replay/export читают записанное зажигание; `pk`, максимальные скорости и коллизии не менялись | Визуальная приёмка: MP4 и кадры сняты на scratch/Metal, но композицию и крупный план выброса человеком ещё нужно оценить; Windows/Linux и живое прослушивание не проверялись | Для #118 RM48U — явно условный Minecraft-профиль. Существование сочетания опирается на сообщение ведомства, а игровые параметры не выдаются за реальные. `ground-stock` — команда подготовки sandbox-сценария, diff --git a/docs/measurements/issue-129-balance.csv b/docs/measurements/issue-129-balance.csv new file mode 100644 index 0000000..ab0d9c1 --- /dev/null +++ b/docs/measurements/issue-129-balance.csv @@ -0,0 +1,25 @@ +variant,commit,seed,sent,kills,leaked,missiles,ticks +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,17,17,0,27,434 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,17,16,1,28,462 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,17,17,0,30,384 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,17,17,0,31,551 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,17,17,0,29,700 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,17,17,0,33,443 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,17,17,0,33,463 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,17,17,0,25,548 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,9,17,17,0,30,728 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,10,17,17,0,26,875 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,11,17,17,0,30,640 +baseline,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,12,17,17,0,33,546 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,17,17,0,28,301 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,17,16,1,30,544 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,17,16,1,30,384 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,17,17,0,30,465 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,17,17,0,30,731 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,17,17,0,32,521 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,17,17,0,35,592 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,17,17,0,26,626 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,9,17,17,0,30,729 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,10,17,16,1,26,765 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,11,17,17,0,30,632 +cold-launch,4b013fb7f30dbaa87a266b27a31911937fc523b4,12,17,17,0,33,546 diff --git a/docs/measurements/issue-129-grid.csv b/docs/measurements/issue-129-grid.csv new file mode 100644 index 0000000..3bc51d9 --- /dev/null +++ b/docs/measurements/issue-129-grid.csv @@ -0,0 +1,97 @@ +variant,commit,seed,sams,dist,sent,kills,leaked,missiles,heavy,ticks,blocked,scrubbed,crashes,fuse_miss,expired,orphaned,energy_lost,leaks_by_kind +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,10,500,46,37,9,62,9,812,0,0,0,4,1,23,0,Geran3:2;Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,10,500,46,41,5,65,11,883,0,0,0,6,0,20,0,Shahed:1;Kh101:2;Kalibr:1;Iskander:1 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,10,500,46,39,7,56,6,740,0,0,0,4,0,18,0,Kalibr:2;Zircon:1;Iskander:3;Kinzhal:1 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,10,500,46,34,11,57,8,854,0,0,0,4,0,20,0,Geran3:2;Kh101:3;Kalibr:2;Kh22:1;Iskander:2;Kinzhal:1 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,10,500,46,39,7,67,6,914,0,0,0,7,0,26,0,Kh101:2;Kh22:1;Iskander:3;Kinzhal:1 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,10,500,46,36,10,73,11,977,0,0,0,7,0,30,0,Geran3:1;Kh101:3;Kalibr:3;Zircon:1;Iskander:2;Kinzhal:2 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,10,500,46,35,11,63,6,802,0,0,0,7,0,23,0,Geran3:1;Kh101:2;Kalibr:2;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +batt10,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,10,500,46,40,6,61,8,979,0,0,0,3,0,21,0,Kh101:1;Kh22:1;Iskander:2;Kinzhal:2 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,10,500,46,36,10,58,9,825,0,0,0,4,0,20,0,Geran3:3;Kh101:1;Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,10,500,46,38,8,64,10,892,0,0,0,4,0,23,0,Shahed:1;Kh101:2;Kalibr:2;Zircon:1;Iskander:2 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,10,500,46,38,8,62,8,714,0,0,0,7,0,23,0,Kalibr:2;Kh22:1;Zircon:1;Iskander:3;Kinzhal:1 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,10,500,46,35,10,61,8,902,0,0,0,4,0,24,0,Geran3:1;Kh101:2;Kalibr:1;Kh22:1;Iskander:3;Kinzhal:2 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,10,500,46,36,9,62,6,896,0,0,0,6,0,27,0,Geran3:1;Kh101:2;Kh22:1;Iskander:4;Kinzhal:1 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,10,500,46,31,13,64,8,988,0,0,0,4,0,29,0,Geran3:1;Kh101:3;Kalibr:3;Zircon:1;Iskander:3;Kinzhal:2 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,10,500,46,36,9,60,9,921,0,0,0,5,0,20,0,Geran3:1;Kh101:3;Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:1 +batt10,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,10,500,46,40,6,63,7,979,0,0,0,5,0,22,0,Kh101:1;Zircon:1;Iskander:2;Kinzhal:2 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,20,500,46,42,4,75,13,578,0,0,0,10,1,22,0,Kalibr:1;Kh22:1;Iskander:1;Kinzhal:1 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,20,500,46,41,5,71,15,612,0,0,0,4,0,26,0,Kh101:2;Kalibr:1;Kinzhal:2 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,20,500,46,44,2,68,13,541,0,0,0,6,0,23,0,Zircon:1;Iskander:1 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,20,500,46,42,4,76,15,614,0,0,0,8,0,27,0,Kh22:1;Iskander:2;Kinzhal:1 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,20,500,46,42,4,73,15,748,0,0,0,6,0,25,0,Kh101:1;Iskander:2;Kinzhal:1 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,20,500,46,41,5,80,13,681,0,0,0,5,0,34,0,Kalibr:1;Zircon:1;Iskander:1;Kinzhal:2 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,20,500,46,40,6,68,13,619,0,0,0,6,0,23,0,Kh101:2;Kh22:1;Zircon:1;Kinzhal:2 +batt20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,20,500,46,42,4,67,14,669,0,0,0,8,0,23,0,Kh101:1;Iskander:2;Kinzhal:1 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,20,500,46,40,6,79,12,555,0,0,0,10,0,31,0,Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,20,500,46,40,6,71,14,626,0,0,0,4,0,29,0,Kh101:2;Kalibr:1;Zircon:1;Iskander:1;Kinzhal:1 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,20,500,46,42,4,65,14,528,0,0,0,5,0,22,0,Zircon:1;Iskander:1;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,20,500,46,42,4,79,15,632,0,0,0,10,0,30,0,Kh22:1;Iskander:1;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,20,500,46,41,5,74,14,687,0,0,0,6,0,27,0,Kh101:1;Iskander:2;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,20,500,46,39,7,83,15,689,0,0,0,9,0,34,0,Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,20,500,46,40,6,70,12,606,0,0,0,6,0,26,0,Kh101:2;Kh22:1;Zircon:1;Iskander:1;Kinzhal:2 +batt20,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,20,500,46,43,3,72,16,636,0,0,0,5,0,28,0,Iskander:2;Kinzhal:1 +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,50,500,46,45,1,83,28,418,0,0,0,7,0,32,0,Kh22:1 +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,50,500,46,46,0,82,28,514,0,0,0,6,0,35,0, +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,50,500,46,46,0,77,27,523,0,0,0,3,0,35,0, +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,50,500,46,46,0,82,31,607,0,0,0,7,0,32,0, +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,50,500,46,46,0,87,29,707,0,0,0,10,0,40,0, +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,50,500,46,46,0,94,29,584,0,0,0,11,0,39,0, +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,50,500,46,42,4,82,31,523,0,0,0,4,0,37,0,Kh101:1;Kh22:1;Zircon:1;Kinzhal:1 +batt50,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,50,500,46,46,0,75,26,695,0,0,0,4,0,33,0, +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,50,500,46,45,1,81,29,481,0,0,0,3,0,32,0,Zircon:1 +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,50,500,46,45,1,85,29,501,0,0,0,2,0,42,0,Kinzhal:1 +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,50,500,46,45,1,76,26,474,0,0,0,6,0,35,0,Kinzhal:1 +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,50,500,46,46,0,77,29,617,0,0,0,4,0,32,0, +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,50,500,46,46,0,86,31,597,0,0,0,7,0,40,0, +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,50,500,46,44,2,91,31,821,0,0,0,10,0,42,0,Kh22:1;Kinzhal:1 +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,50,500,46,43,3,79,28,523,0,0,0,4,0,34,0,Kh101:1;Zircon:1;Kinzhal:1 +batt50,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,50,500,46,44,2,77,27,678,0,0,0,6,0,35,0,Zircon:1;Kinzhal:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,20,1500,46,44,2,68,14,2218,0,0,0,4,0,24,0,Iskander:1;Kinzhal:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,20,1500,46,43,3,70,20,2342,0,0,0,7,0,20,0,Kh101:1;Kalibr:1;Iskander:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,20,1500,46,44,2,70,20,2363,0,0,0,5,0,21,0,Iskander:2 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,20,1500,46,42,4,68,16,2387,0,0,0,5,0,25,0,Kh101:1;Kh22:1;Iskander:1;Kinzhal:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,20,1500,46,42,4,69,19,2635,0,0,0,5,0,23,0,Kh101:2;Iskander:1;Kinzhal:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,20,1500,46,38,8,76,18,2575,0,0,0,2,0,36,0,Kh101:2;Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,20,1500,46,43,3,73,18,2361,0,0,0,6,0,25,0,Kh101:1;Kalibr:1;Kinzhal:1 +far1500,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,20,1500,46,42,4,68,20,2544,0,0,0,4,0,26,0,Kh101:1;Iskander:2;Kinzhal:1 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,20,1500,46,44,2,67,16,2145,0,0,0,4,0,26,0,Iskander:1;Kinzhal:1 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,20,1500,46,42,4,65,17,2346,0,0,0,6,0,18,0,Kh101:1;Kalibr:1;Iskander:1;Kinzhal:1 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,20,1500,46,43,3,68,18,2358,0,0,0,5,0,21,0,Iskander:3 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,20,1500,46,41,5,70,16,2386,0,0,0,5,0,28,0,Kh101:1;Kh22:1;Iskander:1;Kinzhal:2 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,20,1500,46,42,4,71,19,2551,0,0,0,5,0,24,0,Kh101:2;Iskander:1;Kinzhal:1 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,20,1500,46,37,9,78,19,2579,0,0,0,3,0,38,0,Kh101:2;Kalibr:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,20,1500,46,43,3,75,20,2365,0,0,0,7,0,26,0,Kh101:1;Kinzhal:2 +far1500,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,20,1500,46,42,4,67,18,2548,0,0,0,4,0,25,0,Kh101:1;Iskander:2;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,20,500,46,40,6,73,12,551,0,0,0,8,0,25,0,Geran3:1;Kalibr:1;Kh22:1;Zircon:1;Iskander:3;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,20,500,46,38,8,81,14,681,7,0,0,3,0,33,0,Kh101:2;Kalibr:1;Kh22:1;Iskander:3;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,20,500,46,44,1,78,13,675,0,0,1,7,0,29,0,Kh101:1;Zircon:1;Iskander:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,20,500,46,42,4,77,15,515,3,2,0,8,0,24,0,Kh22:1;Iskander:3 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,20,500,46,42,4,65,15,469,1,0,0,4,0,22,0,Kh22:1;Iskander:2;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,20,500,46,43,3,68,13,612,0,0,0,3,0,22,0,Zircon:1;Iskander:1;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,20,500,46,43,3,64,15,546,0,0,0,5,0,16,0,Kh22:1;Zircon:1;Iskander:1;Kinzhal:1 +hills20,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,20,500,46,42,4,77,14,712,3,0,0,13,0,20,0,Iskander:2;Kinzhal:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,20,500,46,38,8,75,14,541,0,0,0,6,0,31,0,Kalibr:1;Kh22:1;Zircon:1;Iskander:3;Kinzhal:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,20,500,46,39,6,77,14,633,5,0,1,3,0,31,0,Kh101:2;Iskander:3;Kinzhal:1 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,20,500,46,41,3,71,12,643,0,1,2,1,0,27,0,Kh101:1;Zircon:1;Iskander:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,20,500,46,39,7,75,16,520,3,2,0,3,0,28,0,Kh22:1;Iskander:4;Kinzhal:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,20,500,46,39,7,70,18,512,0,1,0,3,0,28,0,Kh101:1;Kh22:1;Iskander:3;Kinzhal:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,20,500,46,41,5,66,14,615,1,0,0,4,0,20,0,Kh101:1;Iskander:2;Kinzhal:2 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,20,500,46,41,5,76,14,579,0,0,0,8,0,28,0,Kh22:1;Zircon:1;Iskander:2;Kinzhal:1 +hills20,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,20,500,46,41,5,70,14,653,0,0,0,6,0,26,0,Kh101:1;Zircon:1;Iskander:2;Kinzhal:2 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,1,20,200,46,41,5,75,16,350,0,0,0,2,0,32,0,Kh22:1;Zircon:1;Iskander:2;Kinzhal:1 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,2,20,200,46,40,5,71,14,401,0,0,1,4,0,29,0,Kh101:2;Iskander:2;Kinzhal:1 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,3,20,200,46,39,6,60,12,344,0,0,1,2,0,22,0,Shahed:1;Kh101:2;Iskander:3 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,4,20,200,46,40,6,73,13,495,0,0,0,7,0,26,0,Geran3:1;Kh22:2;Iskander:2;Kinzhal:1 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,5,20,200,46,41,5,71,17,455,0,0,0,2,0,34,0,Kh101:1;Kh22:1;Iskander:2;Kinzhal:1 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,6,20,200,46,39,7,71,13,450,0,0,0,4,0,29,0,Kh101:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,7,20,200,46,40,6,84,14,465,0,0,0,11,0,33,0,Kh101:1;Kh22:1;Zircon:1;Iskander:1;Kinzhal:2 +near200,dc36d67eb740e6a9fb56224b32b007e3bf2512b9,8,20,200,46,38,8,67,15,563,0,0,0,4,0,31,0,Kh101:2;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,1,20,200,46,41,5,84,16,404,0,0,0,8,0,35,0,Geran3:1;Kh22:1;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,2,20,200,46,38,7,70,15,393,0,0,1,4,0,30,0,Shahed:1;Kh101:2;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,3,20,200,46,39,6,61,13,338,0,0,1,4,0,27,0,Shahed:1;Kh101:2;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,4,20,200,46,38,7,74,14,467,0,0,0,3,0,36,0,Geran3:1;Kh22:2;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,5,20,200,46,40,6,73,13,481,0,0,0,8,0,32,0,Kh101:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:1 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,6,20,200,46,38,8,66,14,540,0,0,0,2,0,27,0,Kh101:3;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,7,20,200,46,39,7,86,16,496,0,0,0,9,0,39,0,Kh101:1;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 +near200,4b013fb7f30dbaa87a266b27a31911937fc523b4,8,20,200,46,38,8,73,15,585,0,0,0,4,0,34,0,Kh101:2;Kh22:1;Zircon:1;Iskander:2;Kinzhal:2 diff --git a/docs/media/cold-launch/cold-launch-129-departure-1.7s.png b/docs/media/cold-launch/cold-launch-129-departure-1.7s.png new file mode 100644 index 0000000..9dee054 Binary files /dev/null and b/docs/media/cold-launch/cold-launch-129-departure-1.7s.png differ diff --git a/docs/media/cold-launch/cold-launch-129-eject-0.5s.png b/docs/media/cold-launch/cold-launch-129-eject-0.5s.png new file mode 100644 index 0000000..7abb08c Binary files /dev/null and b/docs/media/cold-launch/cold-launch-129-eject-0.5s.png differ diff --git a/docs/media/cold-launch/cold-launch-129-general.png b/docs/media/cold-launch/cold-launch-129-general.png new file mode 100644 index 0000000..9c76bde Binary files /dev/null and b/docs/media/cold-launch/cold-launch-129-general.png differ diff --git a/docs/media/cold-launch/cold-launch-129-ignition-1.1s.png b/docs/media/cold-launch/cold-launch-129-ignition-1.1s.png new file mode 100644 index 0000000..56a8ccf Binary files /dev/null and b/docs/media/cold-launch/cold-launch-129-ignition-1.1s.png differ diff --git a/docs/media/cold-launch/cold-launch-129.mp4 b/docs/media/cold-launch/cold-launch-129.mp4 new file mode 100644 index 0000000..b28d04f Binary files /dev/null and b/docs/media/cold-launch/cold-launch-129.mp4 differ