docs: describe implemented realism mechanics and verified handoff
build / mod (push) Failing after 18s
build / mod (push) Failing after 18s
Record actual save field positions, motor phases, finite typed delivery, last-known radar contacts and blast-cover policy. Include per-seed baseline measurements and distinguish native/WASM checks from pending GUI acceptance. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
@@ -62,10 +62,10 @@ CI: `.gitea/workflows/build.yml` на каждый пуш собирает то
|
||||
волнами по типам), дальность старта, цели и **ПУСК**. Цели:
|
||||
- *только объекты* — всё летит по отмеченным объектам (или по игроку, если их нет);
|
||||
- *объекты и ПВО* — треть ударных средств бьёт по случайным комплексам;
|
||||
- *умный противник* — планировщик знает, где стоят комплексы и что видят их РЛС: ведёт дроны и крылатые ракеты
|
||||
- *умный противник* — планировщик использует наблюдённые контакты и последние известные позиции комплексов: ведёт дроны и крылатые ракеты
|
||||
маршрутами в обход зон поражения, низко, за рельефом и через мёртвые зоны; «Герберы» прилетают на 15 с раньше,
|
||||
чтобы оттянуть ракеты; «Ланцеты» идут по Гепардам и Панцирям, Х-22/Циркон и часть баллистики — по дальнобойным
|
||||
комплексам; на каждую РЛС дальнего обнаружения идут 2–3 быстрых ударника (Х-22, Циркон, Искандер, Кинжал, затем Х-101,
|
||||
комплексам; на наблюдённые РЛС дальнего обнаружения выделяются 2–3 быстрых ударника (Х-22, Циркон, Искандер, Кинжал, затем Х-101,
|
||||
Герань-3, Ланцет, Шахед; не больше четверти налёта); всё остальное стартует со сдвигом так, чтобы прилететь одновременно.
|
||||
|
||||
После налёта приходит отчёт: сколько сбито и прорвалось, ракет ПВО потрачено, комплексов потеряно, урон объектам.
|
||||
@@ -91,11 +91,23 @@ CI: `.gitea/workflows/build.yml` на каждый пуш собирает то
|
||||
P1-SUN также использует чужие данные. Пушкам (Гепард,
|
||||
пушки Панциря) нужна своя цель: они стреляют только по тому, что видят сами. Уничтоженная РЛС — дыра в сети.
|
||||
|
||||
**Радиомолчание.** `/airdef radar <номер> off|on` или кнопка в карточке техники на карте
|
||||
выключает/включает собственный радар. Приём разрешённых внешних треков сохраняется; чужой трек
|
||||
не заменяет обязательное собственное сопровождение. Выключение не стирает старые сведения противника:
|
||||
он продолжает использовать последнюю наблюдённую позицию, а пуски и РЭБ могут снова раскрыть технику.
|
||||
|
||||
**Логистика.** Пока нет ни одного склада, магазины пополняются сами, как раньше. Как только поставлен склад,
|
||||
боекомплект считается: комплекс без ракет пишет «ЖДЁТ БК»; в 60 м от склада он перезаряжается прямо с него, а
|
||||
дальние обслуживают **ТЗМ**: заправляются на складе (2 перезарядки), сами едут к ждущим комплексам, ближайшим
|
||||
первым, и возвращаются. Запас склада — 30 перезарядок, он виден в сводке. Склад и ТЗМ детонируют всем грузом.
|
||||
|
||||
Ударная **RM48U у С-400** — отдельный условный игровой боеприпас, который делит четыре ячейки
|
||||
с ракетами ПВО. `/airdef ground-stock <склад> <количество>` задаёт конечный начальный запас
|
||||
sandbox-сценария, `/airdef ground-load <С-400>` загружает одну ракету рядом со складом либо
|
||||
создаёт заявку на доставку ТЗМ. Груз едет физически; снятая ракета ПВО возвращается на склад.
|
||||
Заявка и груз сохраняются в пути. `/airdef ground-unload <С-400>` выгружает ракету у склада.
|
||||
Без склада этот ударный боеприпас сам не появляется. Бук и остальные комплексы такого профиля пока не имеют.
|
||||
|
||||
**Перемещение.** **Пульт перемещения**: навестись на технику (выбрать), затем на точку на земле — она
|
||||
сворачивается (С-400 и другие с вертикальным пуском дольше, Гепард и Панцирь быстро), едет по рельефу и
|
||||
разворачивается; всё это время не стреляет и не светит РЛС. Или `/airdef move <номер>` — к тому месту, где ты стоишь.
|
||||
@@ -133,6 +145,11 @@ API мода `render.set-lights` (до 512, плавно интерполиру
|
||||
пострадать. Объекты (Целеуказатель или `/airdef target here`) имеют прочность, она видна в сводке. Ремонт —
|
||||
кнопкой в меню или `/airdef repair`.
|
||||
|
||||
Известные стены и рельеф ослабляют **непрямой** урон корпусу, узлам и объектам; проёмы дают
|
||||
частичное воздействие. Используется геометрия, известная перед разрушением. При неизвестной или
|
||||
устаревшей геометрии сохраняется прежний урон без защиты; поздний ответ его повторно не наносит.
|
||||
Прямое вооружённое попадание этим ослаблением не отменяется.
|
||||
|
||||
**Монитор комплекса:** клавиша **K** листает комплексы по очереди, после последнего монитор скрывается. Слева вверху показано:
|
||||
- состояние комплекса (поиск, сопровождение, доворот, захват, пуск, огонь, перезарядка, огонь запрещён);
|
||||
- его РЛС: цели, по которым он работает, красным, остальные серым, текущая цель жёлтым;
|
||||
@@ -232,7 +249,13 @@ API мода `render.set-lights` (до 512, плавно интерполиру
|
||||
**Согласование огня.** Комплексы делят цели между собой: на обычную цель идёт одна ракета, на баллистическую две; чем ближе цель к своей точке попадания,
|
||||
тем больше перехватчиков разрешено на неё сразу (за ~12 с до удара ещё один, за ~5 с — ещё один). Комплекс, у которого кончились ракеты
|
||||
или идёт перезарядка, цель не держит; тот, кто не смог навестись за ~2 с, отпускает её другим. Пушки расходятся по разным целям. Первыми бьют по самым опасным (быстрым и тяжёлым) целям, при этом ложные
|
||||
«Герберы» выглядят для них как настоящие. Шанс поражения падает, если цель быстрее перехватчика.
|
||||
«Герберы» выглядят для них как настоящие. Геометрия встречи проверяется по движению обоих объектов
|
||||
за тик, а остаточный шанс учитывает фактическую скорость перехватчика.
|
||||
|
||||
**Энергетика перехватчика.** После холодного выброса ракета разгоняется, но двигатель работает
|
||||
конечное игровое время. После выгорания ракета летит по инерции, теряет скорость и манёвренность;
|
||||
при недостаточной скорости сопровождение срывается. Факел, звук двигателя и новый дым прекращаются
|
||||
при выгорании и в live, и в повторе; уже созданный дым продолжает рассеиваться.
|
||||
|
||||
**Последний шанс** (`/airdef lastchance on|off`, по умолчанию вкл). Комплекс стреляет и по классу целей вне своих ролей
|
||||
(С-400, С-500 и Patriot по умолчанию не бьют дроны), если цель долетит до своей точки меньше чем за 10 с и на ней ещё нет
|
||||
|
||||
@@ -86,12 +86,13 @@
|
||||
Роли РЛС и мачта пока используют общую модель машины, с разным поведением/отображением антенны.
|
||||
Отдельные точные модели 91Н6/92Н6/96Л6, машина КП, ручная принадлежность к батарее, отдельные
|
||||
каналы сопровождения и кабельное снабжение пока не добавлены. Подробные режимы и параметры реальных
|
||||
комплексов не моделируются. Конечная работа двигателя и энергетика манёвра остаются в #120;
|
||||
доставка ударных ракет через ТЗМ остаётся в #118.
|
||||
комплексов не моделируются. В следующей серии добавлены конечная работа двигателя/coast (#120),
|
||||
доставка RM48U через ТЗМ (#118), переключение излучения (#121) и укрытия от непрямого blast (#119).
|
||||
Текущий объём и ограничения описаны в [техническом журнале](CODEX-HANDOFF.md).
|
||||
|
||||
## Проверка в игре и тестами
|
||||
|
||||
Код и команды опубликованы в `966b52f`. После последней правки вместимости С-500 прошли
|
||||
Исходный код батареи и команды опубликованы в `966b52f`. Для этой контрольной точки прошли
|
||||
169 тестов ядра и 4 сценария (7 отдельных тестов помечены ignored), а также 53 теста адаптера,
|
||||
проверка границы с ядром и ещё 4 сценария. Настоящий собранный WASM-пакет прошёл 21 шаг
|
||||
`wasm_contract.toml`, включая конфигурацию батареи и развёртывание новых пресетов.
|
||||
|
||||
+147
-8
@@ -4,14 +4,33 @@
|
||||
Рабочая ветка `kimi-work`; issues не закрывать, публиковать комментарии с коммитом и проверками.
|
||||
Движок — отдельный `chexit/horizon-airdef`, ветка `airdef`, подключён точным gitlink `horizon/`.
|
||||
|
||||
## Контрольная точка перед #120 / #118 / #121 / #119
|
||||
## Текущее состояние: 3 ноября 2026
|
||||
|
||||
Код четырёх задач интегрирован и опубликован до `6e2d661`. Движок в этой серии не менялся.
|
||||
README описывает доступное поведение; `IMPLEMENTATION-STATUS.md` отделяет реализацию от приёмки.
|
||||
Ни одно issue не закрыто. Участники: Codex (интеграция, #119, ревью, документация) и три
|
||||
GPT-6.1 Terra (энергетика, типизированная доставка, излучение). Новые числа — только игровые.
|
||||
|
||||
| Issue | Опубликованные контрольные коммиты |
|
||||
|---|---|
|
||||
| #119 | `c96676f`: укрытия, read-only geometry, четыре проверки |
|
||||
| #118 | `c775f31`, `952a10f`: доставка ТЗМ, возврат снятой ракеты ПВО, реальное движение и save/restore |
|
||||
| #121 | `26b258f`, `0df225a`, `88f9405`, `9e1e0f5`, `b377a5d`, `ce76f20`: излучение, UI/save/replay, наблюдения, last-known SEAD |
|
||||
| #120 | `143d9b2` → `e38ca0d`, затем `a7b8cb9`: конечное горение, coast, swept impact, диагностика, звук, исправленное ветвление фаз |
|
||||
| WASM | `6e2d661`: проверка On/Off и запрета управления отсутствующим радаром, 24 шага |
|
||||
|
||||
Для обновления существующей установки сначала `git switch kimi-work`, затем `git pull --ff-only`,
|
||||
`python3 tools/airdef.py all`, `python3 tools/airdef.py play`. `all` обновляет точный сабмодуль,
|
||||
собирает игру/мод и устанавливает пакет. На Windows обычно используется `python` вместо `python3`.
|
||||
|
||||
## Исходная контрольная точка этой серии
|
||||
|
||||
Исходное состояние этой серии: `2689d93`; движок закреплён на
|
||||
`86b1014a9218e68041444cbf52db02a85107c815`, уровень API 26. Рабочее дерево было чистым,
|
||||
коммиты опубликованы. Текущий точный pin всегда смотреть в `git ls-files --stage horizon`,
|
||||
а происхождение собранного пакета — в `airdef-mod/target/horizon-mod/build-identity.json`.
|
||||
|
||||
Четыре задачи заказаны владельцем отдельно; на этой контрольной точке они **в работе**:
|
||||
Четыре задачи были заказаны владельцем отдельно:
|
||||
|
||||
| Issue | Заказанный остаток |
|
||||
|---|---|
|
||||
@@ -20,8 +39,9 @@
|
||||
| #121 | Переключение излучения, сохранение разрешённого внешнего целеуказания, разведка излучателей |
|
||||
| #119 | Ослабление непрямого урона известным укрытием, ограниченная политика Unknown |
|
||||
|
||||
Исполнители работают в отдельных worktree; интеграция, проверка и публикация идут небольшими
|
||||
коммитами в `kimi-work`. Не принимать наличие кода в соседнем worktree за опубликованную функцию.
|
||||
Исполнители работали в отдельных worktree; их проверенные коммиты перенесены в `kimi-work`.
|
||||
В ветках `codex/issue-*` сохранены промежуточные версии; продолжать нужно от `kimi-work`,
|
||||
где разрешены конфликты общего формата сохранений и сигнатур боевых функций.
|
||||
|
||||
## Что уже сделано в предыдущей серии Codex
|
||||
|
||||
@@ -53,10 +73,20 @@
|
||||
|
||||
На `966b52f`: 169 тестов ядра + 4 сценария прошли, 7 ignored; адаптер — 53 теста,
|
||||
1 boundary и 4 сценария прошли; WASM contract — 21 шаг. Это исходная контрольная точка,
|
||||
не результат будущих четырёх задач. На `2689d93` собран чистый пакет (`airdef_dirty=false`).
|
||||
не результат новых четырёх задач. На `2689d93` был собран чистый пакет (`airdef_dirty=false`).
|
||||
|
||||
На итоговом объединённом коде `6e2d661` прошли:
|
||||
|
||||
- `airdef-core --release`: **187 passed, 7 ignored**, плюс **4 сценария**.
|
||||
- `airdef-mod`: **56 passed**, **1 boundary**, **4 сценария**.
|
||||
- Настоящий WASM-пакет: **24 шага**, включая команды излучения и typed ammunition.
|
||||
- `gen_models.py --check`: различий нет; в этой серии геометрия ассетов не менялась.
|
||||
|
||||
Полный core здесь запускался с `--release`; это не прогон всех семи ignored-тестов.
|
||||
Отдельно выполнен сравнительный ignored-тест баланса (см. ниже).
|
||||
|
||||
```sh
|
||||
cargo test --manifest-path airdef-core/Cargo.toml
|
||||
cargo test --release --manifest-path airdef-core/Cargo.toml
|
||||
cargo test --manifest-path airdef-mod/Cargo.toml
|
||||
python3 tools/airdef.py test-wasm
|
||||
python3 tools/gen_models.py --check
|
||||
@@ -69,7 +99,102 @@ git diff --check
|
||||
Metal-проверки не подтверждают Windows/Linux, HDR всех платформ или прослушивание звука.
|
||||
Скриншоты крышек подтверждают только их позу: полного видео выброса/зажигания пока нет.
|
||||
|
||||
## Важные ограничения для следующего агента
|
||||
## Технические детали новой серии
|
||||
|
||||
### #120: энергетика и единственный исход перехвата
|
||||
|
||||
`MissileKind::burn_ticks` задаёт конечное время горения: простой профиль равен 2/3 игрового
|
||||
`spec.life`; для электрического P1-SUN используется весь срок жизни. Это не отдельная модель
|
||||
топлива и не реальные кривые тяги. `Missile::engine_lit` — общий источник состояния мотора.
|
||||
|
||||
Три ветки скорости разделены явно: cold (`age <= cold`, множитель 0.97 с прежним минимумом 0.4),
|
||||
powered (`+accel`, ограничение `spec.speed`), coast (множитель 0.995 без холодного минимума).
|
||||
После выгорания доступный поворот масштабируется текущей скоростью; при падении ниже 25%
|
||||
игрового максимума перехват заканчивается диагностикой `MotorEnergyLost`. Срок жизни остаётся
|
||||
отдельным ограничением. Полноценной аэродинамики, гравитационной баллистики и расхода топлива по тяге нет.
|
||||
|
||||
Swept fuse учитывает движение обоих объектов за тик; `Impact` получает точку closest approach
|
||||
и относительную скорость того же проверенного отрезка, включая удержание на Unknown.
|
||||
Геометрию не заменяет отдельный бонус «встречная/догонная». Один остаточный pk зависит от
|
||||
фактической скорости перехватчика и существующего состояния носителя/дальности.
|
||||
Повторный штраф по stealth и старый штраф по абсолютной скорости цели удалены из этого броска;
|
||||
обнаружение/сопровождение по-прежнему учитывают stealth в своих местах.
|
||||
|
||||
`MotorBurnout` и `MotorEnergyLost` записываются в scene journal; tally отличает потерю энергии.
|
||||
Live и replay прекращают факел и новый дым по одному состоянию. `Out::engine_stops` немедленно
|
||||
снимает голос мотора на burnout, не ждёт обычной трёхтиковой grace пропавшего источника;
|
||||
при переходе на replay/export live-команды остановки отбрасываются вместе с live-выводом.
|
||||
Перемотка восстанавливает моторное состояние из записи, включая возврат до выгорания.
|
||||
|
||||
При ревью был найден и исправлен недостижимый coast: ранний прототип проверял `!lit`,
|
||||
что перехватывало и cold, и coast. Не переносить один `143d9b2` без последующих исправлений.
|
||||
`a7b8cb9` содержит отдельный тест точных правил скорости всех трёх фаз.
|
||||
|
||||
Сравнительная выборка **только изменения #120**, отдельно от #119/#118/#121:
|
||||
baseline `2689d93`, агентская итоговая ветка `508f9a0` (её исправление перенесено как `a7b8cb9`).
|
||||
12 одинаковых seed, `SAMS=20 SIZE=12`: 204 цели в каждой версии;
|
||||
baseline — 202 сбитых, 2 прорыва, 367 ракет; новое — 203, 1, 355.
|
||||
Это небольшой регрессионный ориентир, не доказательство баланса всех типов/дальностей.
|
||||
Данные каждого seed: [CSV](measurements/issue-120-balance.csv).
|
||||
|
||||
```sh
|
||||
SAMS=20 SIZE=12 cargo test --release --manifest-path airdef-core/Cargo.toml sim::balance::one_raid -- --ignored --nocapture
|
||||
```
|
||||
|
||||
### #118: один физический груз и восстанавливаемая заявка
|
||||
|
||||
`ground_request` у С-400 — заявка на **одну** RM48U. Рядом со складом остаётся прямая передача;
|
||||
вне радиуса склада та же команда `ground-load` создаёт заявку, если есть запас и живая ТЗМ.
|
||||
ТЗМ забирает одну ракету из конечного запаса, едет к исправному развёрнутому носителю и передаёт
|
||||
её в общие ячейки. Если вытеснена ракета ПВО, ТЗМ везёт её обратно на склад. Generic reload
|
||||
не создаёт RM48U. Ударная заявка имеет приоритет перед generic reload.
|
||||
|
||||
Поля `ground_stock` / `air_48n6_stock` на складе — остатки, на ТЗМ — физический груз двух типов.
|
||||
Заявка, груз и марш сохраняются; оперативный `job` реконструируется после загрузки.
|
||||
Передача запрещена во время движения, подготовки пуска, перезарядки, отказа ПУ и при отсутствии
|
||||
вместимости. Разрушение очищает заявку/груз; repair не восстанавливает уничтоженный typed stock.
|
||||
Проверены настоящее движение `Sim.step` по плоскому WorldSource, передача/возврат, истощение,
|
||||
прерывание, несовместимость, заполненные ячейки, unload и полный `state_text → apply_state`
|
||||
с продолжением маршрута. GUI-доставка на сложном рельефе ещё не проверена.
|
||||
|
||||
Новых носителей вроде Бука не добавляли: один публичный игровой профиль не даёт основания
|
||||
приписывать его всем ЗРК. Обратный вывоз RM48U из удалённого носителя пока не автоматизирован:
|
||||
`ground-unload` требует склад рядом. Отдельной отмены ожидающей заявки в UI пока нет.
|
||||
|
||||
### #121: излучение отдельно от сети
|
||||
|
||||
`radar_on` — сохраняемая настройка, default=true для старых миров. Команда
|
||||
`/airdef radar <номер> on|off` и кнопка карты меняют её; у launcher-only нет своего активного радара.
|
||||
`radar_up` учитывает этот флаг. Off запрещает новые own measurements, но старые треки стареют
|
||||
обычно и разрешённый сетевой приём сохраняется. Это не выключение корпуса/связи/ГСН ракеты.
|
||||
Огневой радар, обязательный для отдельной ПУ, в Off не авторизует новые пуски.
|
||||
|
||||
Условный наблюдатель-противник раз в 20 тиков обнаруживает работающие радары в 1600 блоках.
|
||||
Это упрощённый игровой датчик по расстоянию, без LOS/радиопеленгации и ошибки оценки позиции.
|
||||
Контакт хранится как последняя наблюдённая точка и стареет за 6000 тиков. Off не стирает
|
||||
контакт, не телепортирует его вслед за носителем и не предотвращает раскрытие пуском/РЭБ.
|
||||
|
||||
В `raid::radar_strikes` удалён отдельный обход: раньше SEAD выбирал любую Radar и её настоящий
|
||||
`pos`, даже если общий planner уже работал по наблюдениям. Теперь SEAD берёт те же last-known
|
||||
контакты и их возраст. Явный sandbox-режим `Aim::ObjectsAndSams` по-прежнему выбирает расстановку
|
||||
напрямую; не путать его с умным противником. Проверки покрывают необнаруженную молчащую РЛС,
|
||||
смену позиции без наблюдения, повторное раскрытие, старение, relay freshness и seek.
|
||||
|
||||
### Совместимость текстового состояния
|
||||
|
||||
Сохраняем строки `sam` расширением справа; индексы ниже включают слово `sam` как поле 0.
|
||||
|
||||
| Индекс | Значение |
|
||||
|---|---|
|
||||
| 22–24 | ground_rounds, ground_stock, air_48n6_stock |
|
||||
| 25–27 | mode, radar_role, spent_cells |
|
||||
| 28 | ground_request: 0/1, только С-400 |
|
||||
| 29 | radar_on: true/false, отсутствие означает true |
|
||||
|
||||
Две агентские ветки сначала заняли поле 28 одновременно; при интеграции излучение перенесено
|
||||
в 29, опубликованная совместимость заявки сохранена. Проверка полного roundtrip одновременно
|
||||
содержит ожидающую доставку и выключенный радар. Новые значения входят в durable mark;
|
||||
настройка излучения также в `SamKey` и ghost replay. Не переиспользовать эти позиции для нового поля.
|
||||
|
||||
### #119: непрямой взрыв и укрытия
|
||||
|
||||
@@ -89,7 +214,21 @@ Unknown, stale и слишком старые секции считаются **
|
||||
|
||||
Проверки `sim::damage::cover_tests`: стена/проём для корпуса, узлов и объекта;
|
||||
Unknown и поздний ответ без повторного урона/запросов; прямое попадание; устаревшая геометрия;
|
||||
пропуск исходного блока. Все четыре прошли. Объединённый полный прогон будет указан ниже.
|
||||
пропуск исходного блока. Все четыре прошли в объединённом наборе.
|
||||
|
||||
## Что следующему агенту проверить в первую очередь
|
||||
|
||||
1. На Windows: обновление сабмодуля через `all`, сохранение/перезаход, рабочий цикл игры.
|
||||
2. В GUI: полный холодный пуск крупным планом; карточка On/Off; маршрут ТЗМ по сложной местности;
|
||||
разрушение стены одним взрывом и защита от того же взрыва по исходной геометрии.
|
||||
3. Прослушать прекращение голоса двигателя при burnout и seek/экспорт вокруг этой границы.
|
||||
4. Расширить баланс #120 на разные батареи, пределы дальности и классы целей; исходная CSV — ориентир.
|
||||
5. Продолжить оставшиеся архитектурные #87/#88/#89/#91/#102 и художественный #115 по статусной таблице.
|
||||
|
||||
Это незавершённая платформенная/визуальная приёмка, а не отсутствие перечисленного выше кода.
|
||||
Текущий прогон не запускал GUI или новый MP4, не прослушивал звук и не проверял Windows/Linux.
|
||||
|
||||
## Правила продолжения
|
||||
|
||||
- Не закрывать issue даже после исправления; сообщать проверенный объём и остаток в комментарии.
|
||||
- Не переписывать gitlink на плавающую ветку. Изменения движка сначала публикуются отдельно.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Состояние исходных 16 задач
|
||||
|
||||
Ветка `kimi-work`, 2 ноября 2026. Issues остаются открытыми по просьбе владельца.
|
||||
Ветка `kimi-work`, 3 ноября 2026. Issues остаются открытыми по просьбе владельца.
|
||||
«Реализовано» ниже означает проверенный объём кода, а не закрытие issue и не подтверждение всех платформ.
|
||||
|
||||
| Issue | Реализовано | Что остаётся для полной приёмки |
|
||||
@@ -20,7 +20,7 @@
|
||||
| #114 | Навигация учитывает footprint и окончательную authored-геометрию; остановка перед unread frontier; угловые пересечения | Массовая игровая проверка всех новых шасси на сложном рельефе |
|
||||
| #115 | Три пилота с кадрами до/после, спокойные материалы; authored-проход по боевым и вспомогательным машинам | Крупные планы и точность прототипов ещё промежуточные; остальные летательные аппараты/ракеты, анимации, дальние виды и FPS |
|
||||
| #116 | Streaming не освобождает busy-guard работающего acoustic worker; проверено engine-тестами | Внешняя игровая приёмка на целевых машинах |
|
||||
| #118 | Ручной пуск из физического С-400 с отдельным RM48U; общие четыре ячейки, конечный склад, обмен/возврат; carrier в записи, подготовка/крышки ТПК, холодный выброс, зажигание и игровой разгон; фантомное ПВО удалено | Доставка RM48U через ТЗМ, расширение подтверждённых игровых профилей, включая оценку Бука; визуальная приёмка самого пуска |
|
||||
| #118 | Ручной пуск из физического С-400 с отдельным RM48U; четыре общие ячейки; конечный склад; доставка ТЗМ и возврат снятой ракеты ПВО; сохранение груза/заявки и продолжение реального маршрута; carrier, крышки, выброс, зажигание и разгон в записи; фантомное ПВО удалено | Визуальная приёмка всего пуска и доставки на сложном рельефе; другие носители не добавлены без подтверждённого профиля |
|
||||
|
||||
Для #118 RM48U — явно условный Minecraft-профиль. Существование сочетания опирается на сообщение ведомства,
|
||||
а игровые параметры не выдаются за реальные. `ground-stock` — команда подготовки sandbox-сценария,
|
||||
@@ -32,3 +32,14 @@
|
||||
Дополнительно по просьбе владельца: [раздельная батарея и холодный пуск](BATTERIES-AND-COLD-LAUNCH.md).
|
||||
Есть отдельные ПУ С-400/С-500, роли общей РЛС, цепочка подсказка → собственное измерение → пуск,
|
||||
сохранение конфигурации и запись крышек. Это не закрывает оставшиеся пункты художественной и платформенной приёмки.
|
||||
|
||||
## Дополнительные задачи из ревью
|
||||
|
||||
| Issue | Реализовано | Границы и оставшаяся приёмка |
|
||||
|---|---|---|
|
||||
| #119 | Три read-only луча в известной геометрии ослабляют непрямой blast для корпуса/узлов/объектов; проёмы дают частичное воздействие; прямой контакт сохранён | Unknown/stale: прежний урон без защиты, нулевое ожидание; partial blocks считаются занятыми кубами; GUI-проверка разрушения укрытия ещё нужна |
|
||||
| #120 | Конечное горение, powered/coast, сопротивление и снижение доступного манёвра, один остаточный pk по фактической скорости; swept-встреча; события burnout/energy loss; согласованное прекращение факела/дыма/звука | Игровой профиль, без аэродинамики и реальных параметров; сравнительная выборка 12 рейдов, расширенная балансировка и прослушивание остаются |
|
||||
| #121 | On/Off в команде и карте, save/replay; Off не создаёт own measurements и сохраняет сетевой приём; раскрытие работающего радара наблюдателем; SEAD использует last-known и возраст | Условный наблюдатель по расстоянию, без радиотехнической модели и ошибки пеленга; выбор на карте ещё не проверен в GUI |
|
||||
|
||||
Точные коммиты, формат сохранения, тесты и порядок продолжения:
|
||||
[CODEX-HANDOFF.md](CODEX-HANDOFF.md). Формальный open-статус не меняется после реализации.
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
| Путь | Что это |
|
||||
|---|---|
|
||||
| `airdef-mod/src/`, `airdef-mod/shaders/` | Мод на Rust (WASM) для форка Horizon |
|
||||
| `airdef-core/` | SDK-free сборка того же ядра из `airdef-mod/src/sim/`; не отдельная копия исходников |
|
||||
| `airdef-mod/src/sim/battery.rs`, `launch.rs`, `logistics.rs` | Конфигурация батареи, физические ячейки/крышки и снабжение |
|
||||
| `docs/CODEX-HANDOFF.md`, `docs/IMPLEMENTATION-STATUS.md` | Техническая передача разработки и фактический статус задач |
|
||||
| `airdef-mod/Cargo.toml`, `horizon-mod.toml` | Сборка мода |
|
||||
| `airdef-mod/tests/`, `airdef-mod/examples/` | Тесты и примеры |
|
||||
| `airdef-mod/NOTES-terrain-guidance.md` | Рабочие заметки по рельефу |
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
variant,commit,seed,sent,kills,leaked,missiles,ticks
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,1,17,17,0,26,301
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,2,17,16,1,29,482
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,3,17,17,0,33,400
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,4,17,17,0,29,452
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,5,17,17,0,30,533
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,6,17,16,1,35,495
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,7,17,17,0,35,434
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,8,17,17,0,25,548
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,9,17,17,0,31,728
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,10,17,17,0,29,675
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,11,17,17,0,32,629
|
||||
baseline,2689d933e790b7d751dfcf2a4c6a325e041562ce,12,17,17,0,33,546
|
||||
finite_motor,508f9a0,1,17,17,0,27,434
|
||||
finite_motor,508f9a0,2,17,16,1,28,462
|
||||
finite_motor,508f9a0,3,17,17,0,30,384
|
||||
finite_motor,508f9a0,4,17,17,0,31,551
|
||||
finite_motor,508f9a0,5,17,17,0,29,700
|
||||
finite_motor,508f9a0,6,17,17,0,33,443
|
||||
finite_motor,508f9a0,7,17,17,0,33,463
|
||||
finite_motor,508f9a0,8,17,17,0,25,548
|
||||
finite_motor,508f9a0,9,17,17,0,30,728
|
||||
finite_motor,508f9a0,10,17,17,0,26,875
|
||||
finite_motor,508f9a0,11,17,17,0,30,640
|
||||
finite_motor,508f9a0,12,17,17,0,33,546
|
||||
|
Reference in New Issue
Block a user