docs: describe implemented realism mechanics and verified handoff
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:
2026-11-03 00:07:31 +03:00
parent 6e2d661b39
commit e70d7a667b
6 changed files with 218 additions and 16 deletions
+26 -3
View File
@@ -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 с и на ней ещё нет
+4 -3
View File
@@ -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
View File
@@ -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 на плавающую ветку. Изменения движка сначала публикуются отдельно.
+13 -2
View File
@@ -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-статус не меняется после реализации.
+3
View File
@@ -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` | Рабочие заметки по рельефу |
+25
View File
@@ -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
1 variant commit seed sent kills leaked missiles ticks
2 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 1 17 17 0 26 301
3 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 2 17 16 1 29 482
4 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 3 17 17 0 33 400
5 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 4 17 17 0 29 452
6 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 5 17 17 0 30 533
7 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 6 17 16 1 35 495
8 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 7 17 17 0 35 434
9 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 8 17 17 0 25 548
10 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 9 17 17 0 31 728
11 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 10 17 17 0 29 675
12 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 11 17 17 0 32 629
13 baseline 2689d933e790b7d751dfcf2a4c6a325e041562ce 12 17 17 0 33 546
14 finite_motor 508f9a0 1 17 17 0 27 434
15 finite_motor 508f9a0 2 17 16 1 28 462
16 finite_motor 508f9a0 3 17 17 0 30 384
17 finite_motor 508f9a0 4 17 17 0 31 551
18 finite_motor 508f9a0 5 17 17 0 29 700
19 finite_motor 508f9a0 6 17 17 0 33 443
20 finite_motor 508f9a0 7 17 17 0 33 463
21 finite_motor 508f9a0 8 17 17 0 25 548
22 finite_motor 508f9a0 9 17 17 0 30 728
23 finite_motor 508f9a0 10 17 17 0 26 875
24 finite_motor 508f9a0 11 17 17 0 30 640
25 finite_motor 508f9a0 12 17 17 0 33 546