diff --git a/README.md b/README.md index 6d2fe4f..ea1bf8c 100644 --- a/README.md +++ b/README.md @@ -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 с и на ней ещё нет diff --git a/docs/BATTERIES-AND-COLD-LAUNCH.md b/docs/BATTERIES-AND-COLD-LAUNCH.md index 8b5081a..a6163ee 100644 --- a/docs/BATTERIES-AND-COLD-LAUNCH.md +++ b/docs/BATTERIES-AND-COLD-LAUNCH.md @@ -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`, включая конфигурацию батареи и развёртывание новых пресетов. diff --git a/docs/CODEX-HANDOFF.md b/docs/CODEX-HANDOFF.md index 32469fc..78be255 100644 --- a/docs/CODEX-HANDOFF.md +++ b/docs/CODEX-HANDOFF.md @@ -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 на плавающую ветку. Изменения движка сначала публикуются отдельно. diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index ee47d2c..2999093 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -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-статус не меняется после реализации. diff --git a/docs/REPO-MAP.md b/docs/REPO-MAP.md index 9abb59f..f9a0f42 100644 --- a/docs/REPO-MAP.md +++ b/docs/REPO-MAP.md @@ -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` | Рабочие заметки по рельефу | diff --git a/docs/measurements/issue-120-balance.csv b/docs/measurements/issue-120-balance.csv new file mode 100644 index 0000000..31ad250 --- /dev/null +++ b/docs/measurements/issue-120-balance.csv @@ -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