[enhancement] Единый типизированный каталог техники, вооружения и возможностей вместо разрозненных match/списков #91

Open
opened 2026-10-30 10:30:13 +00:00 by chexit · 5 comments
Owner

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

Архитектурный проход по 76f680eba64b64eb28435e71ce9f22a84b0e5da1.

Основание

Один тип техники сейчас описывается в нескольких местах: DroneKind/Spec и missile spec в sim/mod.rs, SAM в units.rs, ручные ITEMS/command dispatch в lib.rs, KINDS/пресеты в wave.rs, MODELS/ITEMS в tools/gen_models.py, звуки и README отдельно. Уже накоплены исключения по kind/family и множество полей общего Sam, не относящихся к РЛС/ТЗМ/прожектору.

Это не утверждение, что enum или match плохи. Риск — добавили технику в один список и забыли доступность в другом; механика начинает определяться именем модели или конкретным kind вместо явного свойства.

Предложение

  • Устойчивые content ID и один проверяемый каталог: display name, item/icon/model/muzzle, weapon/sensor/mobility/logistics profile, доступность в меню/команде.
  • Баланс в типизированных данных: углы/скорости/дальности/seconds vs ticks, свойства БЧ/точности/перехвата. На старте достаточно Rust structs/constants; JSON/YAML/hot reload не обязательны.
  • Общие возможности задавать профилем/небольшими компонентами там, где реально различается поведение: sensor-only, gun+missile, supply, light. Сохранить понятные enums и не превращать всё в динамический ECS.
  • Генерировать или сверять вспомогательные списки/asset manifest/таблицы документации. В CI проверить уникальность ID, существование моделей/иконок/звуков, корректность индексов стволов/креплений и ограничения профилей.

Приёмка

Добавление тестового типа требует одной записи каталога и собственных ресурсов, без правки независимых списков UI/commands/raid. Старые ID/сейвы мигрируют явно; значения баланса и поведение существующих типов не меняются попутно. Новые исходы сбитий, иконки и стартовые позиции используют каталог, а не новые специальные ветки по названию.

Общий порядок и зависимости: архитектурная дорожная карта.

🤖 Filed by Codex, AI-агент Владимира (chexit). Архитектурный проход по `76f680eba64b64eb28435e71ce9f22a84b0e5da1`. ### Основание Один тип техники сейчас описывается в нескольких местах: `DroneKind/Spec` и missile spec в `sim/mod.rs`, SAM в `units.rs`, ручные ITEMS/command dispatch в `lib.rs`, KINDS/пресеты в `wave.rs`, MODELS/ITEMS в `tools/gen_models.py`, звуки и README отдельно. Уже накоплены исключения по kind/family и множество полей общего Sam, не относящихся к РЛС/ТЗМ/прожектору. Это не утверждение, что enum или match плохи. Риск — добавили технику в один список и забыли доступность в другом; механика начинает определяться именем модели или конкретным kind вместо явного свойства. ### Предложение - Устойчивые content ID и один проверяемый каталог: display name, item/icon/model/muzzle, weapon/sensor/mobility/logistics profile, доступность в меню/команде. - Баланс в типизированных данных: углы/скорости/дальности/seconds vs ticks, свойства БЧ/точности/перехвата. На старте достаточно Rust structs/constants; JSON/YAML/hot reload не обязательны. - Общие возможности задавать профилем/небольшими компонентами там, где реально различается поведение: sensor-only, gun+missile, supply, light. Сохранить понятные enums и не превращать всё в динамический ECS. - Генерировать или сверять вспомогательные списки/asset manifest/таблицы документации. В CI проверить уникальность ID, существование моделей/иконок/звуков, корректность индексов стволов/креплений и ограничения профилей. ### Приёмка Добавление тестового типа требует одной записи каталога и собственных ресурсов, без правки независимых списков UI/commands/raid. Старые ID/сейвы мигрируют явно; значения баланса и поведение существующих типов не меняются попутно. Новые исходы сбитий, иконки и стартовые позиции используют каталог, а не новые специальные ветки по названию. Общий порядок и зависимости: [архитектурная дорожная карта](https://gitea.maoniao.team/chexit/airdef/issues/103).
Author
Owner

🤖 Agent: Codex — работа Владимира (chexit).

Каталог: общий core catalog содержит устойчивые ID и availability aircraft/unit, ссылки на реальные typed specs без копирования баланса. Raid list, SamKind::ALL, выдача/claim inventory и item dispatch используют каталог; порядок старых save/scenario сохранён. Для координатного удара явно Unavailable с причиной, без выдуманных ground profiles.

CI/native проверки: уникальность ID/item, покрытие enum, сохранение raid order, модели, item JSON → model → PNG, muzzle и profile sanity. Core проверки не требуют assets/SDK. Полное объединение Python generator/weapon/sound registry и всех UI/command списков остаётся — это этап, не завершённый весь #91.

Issue оставлен открытым согласно просьбе автора.

🤖 Agent: Codex — работа Владимира (chexit). [Каталог](https://gitea.maoniao.team/chexit/airdef/commit/5ad6ea8): общий core catalog содержит устойчивые ID и availability aircraft/unit, ссылки на реальные typed specs без копирования баланса. Raid list, SamKind::ALL, выдача/claim inventory и item dispatch используют каталог; порядок старых save/scenario сохранён. Для координатного удара явно Unavailable с причиной, без выдуманных ground profiles. CI/native проверки: уникальность ID/item, покрытие enum, сохранение raid order, модели, item JSON → model → PNG, muzzle и profile sanity. Core проверки не требуют assets/SDK. Полное объединение Python generator/weapon/sound registry и всех UI/command списков остаётся — это этап, не завершённый весь #91. Issue оставлен открытым согласно просьбе автора.
Author
Owner

🤖 Agent: Codex — работа Владимира (chexit).

Из дополнительного ревью полезно явно проверить согласованность «модификация × боеприпас × игровой запас × модель × механизм поражения» в продолжении каталога. Но есть две важные поправки к самому отчёту:

  • У Гепарда GunSpec.shell=10 — скорость снаряда, blocks/tick, не10выстрелов/очередь (units.rs:97, mod.rs:2748). Вывод 160×10=1600 и автоматическая замена160очередей на68 не обоснованы этим кодом. Монитор уточняю до обозначения «Оч», без изменения боевого запаса.
  • Для PAC-3 нельзя универсально выбрать «16» и переименовать текущую игровую конфигурацию в PAC-2 лишь из-за4ячеек: производитель двигателей L3Harris различает16PAC-3 и12PAC-3MSE наM903. Нужен конкретный согласованный профиль и явно подписанная игровая абстракция. Это не утверждение, что текущий magazine обязан равняться реальному — баланс может быть сжат сознательно.

Вопрос8×9М338 у Tor-M2 из отчёта не опровергается наличием такого же сочетания в коде: именно оно там критикуется. Проверять конкретную модификацию и первоисточник до изменения баланса; не заводил дубль каталога и не менял названия/боезапас на основании одного вторичного списка. Визуальные заимствования профилей Бук/Тор остаются в художественном проходе #115; терминальная кинематика — новая #120.

Состояние issue не меняю.

🤖 Agent: Codex — работа Владимира (chexit). Из дополнительного ревью полезно явно проверить согласованность «модификация × боеприпас × игровой запас × модель × механизм поражения» в продолжении каталога. Но есть две важные поправки к самому отчёту: - У Гепарда GunSpec.shell=10 — **скорость снаряда, blocks/tick**, не10выстрелов/очередь (units.rs:97, mod.rs:2748). Вывод 160×10=1600 и автоматическая замена160очередей на68 не обоснованы этим кодом. Монитор уточняю до обозначения «Оч», без изменения боевого запаса. - Для PAC-3 нельзя универсально выбрать «16» и переименовать текущую игровую конфигурацию в PAC-2 лишь из-за4ячеек: [производитель двигателей L3Harris](https://www.l3harris.com/en-gb/all-capabilities/pac-3-mse) различает16PAC-3 и12PAC-3MSE наM903. Нужен конкретный согласованный профиль и явно подписанная игровая абстракция. Это не утверждение, что текущий magazine обязан равняться реальному — баланс может быть сжат сознательно. Вопрос8×9М338 у Tor-M2 из отчёта не опровергается наличием такого же сочетания в коде: именно оно там критикуется. Проверять конкретную модификацию и первоисточник до изменения баланса; не заводил дубль каталога и не менял названия/боезапас на основании одного вторичного списка. Визуальные заимствования профилей Бук/Тор остаются в художественном проходе #115; терминальная кинематика — новая #120. Состояние issue не меняю.
Author
Owner

🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в kimi-work: код.

Различён боезапас ПВО и игровой RM48U-профиль в каталоге/состоянии техники; монитор показывает ударный остаток отдельно, статус С-400 объясняет общие ячейки, склад показывает отдельные запасы. Подписи пушечного боезапаса исправлены на очереди: GunSpec.shell задаёт скорость снаряда, а не число выстрелов в очереди, поэтому умножать bursts на это поле неверно.

Полное сведение всех чисел, звуков и Python-регистраций в один источник остаётся. В частности, текущие условные варианты техники не переименовываются автоматически по внешнему ревью. Issue не закрываю.

🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в `kimi-work`: [код](https://gitea.maoniao.team/chexit/airdef/commit/d4adbb1e473c94241c9b38f82bb325ba5450d67e). Различён боезапас ПВО и игровой RM48U-профиль в каталоге/состоянии техники; монитор показывает ударный остаток отдельно, статус С-400 объясняет общие ячейки, склад показывает отдельные запасы. Подписи пушечного боезапаса исправлены на очереди: `GunSpec.shell` задаёт скорость снаряда, а не число выстрелов в очереди, поэтому умножать bursts на это поле неверно. Полное сведение всех чисел, звуков и Python-регистраций в один источник остаётся. В частности, текущие условные варианты техники не переименовываются автоматически по внешнему ревью. Issue не закрываю.
Author
Owner

🤖 Agent: Codex, with GPT-6.1 Terra.

Published eea1b36/1553976/daa9ed7. catalog/content.json now supplies aircraft/unit identities and item/icon metadata to Rust and Python; catalog/sounds.json supplies sound IDs, attenuation distances and far variants to the synthesizer/resource registry and runtime. Generated Rust checked in CI. Historical raid/save ordering, all 35 sound events, shipped OGG files and synthesizer RNG order preserved. Existing gen_models --check and asset tests passed, sound registry/file and catalog checks passed; combined core/adapter suites passed. DroneSpec/SamSpec numeric profiles remain canonical typed Rust; a complete migration of all numbers is not claimed. Issue state unchanged.

🤖 Agent: Codex, with GPT-6.1 Terra. Published eea1b36/1553976/daa9ed7. catalog/content.json now supplies aircraft/unit identities and item/icon metadata to Rust and Python; catalog/sounds.json supplies sound IDs, attenuation distances and far variants to the synthesizer/resource registry and runtime. Generated Rust checked in CI. Historical raid/save ordering, all 35 sound events, shipped OGG files and synthesizer RNG order preserved. Existing gen_models --check and asset tests passed, sound registry/file and catalog checks passed; combined core/adapter suites passed. DroneSpec/SamSpec numeric profiles remain canonical typed Rust; a complete migration of all numbers is not claimed. Issue state unchanged.
Author
Owner

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

В kimi-work опубликованы ead87343d, 0937ac9e0, 325119b72.

catalog/specs.json теперь единственный источник числовых DroneSpec/MissileSpec/SamSpec, общих mobility/flight/logistics констант и named parts; gen_catalog.py генерирует Rust для мода и airdef-core, CI проверяет freshness. Схема, звуки, ссылки, покрытие kinds и уникальность проверяются без отдельных списков имён.

При ревью сохранён фактически игравший P1-SUN voice (DRONE_LANCET, 0.8, 1.6); старая ветка 1.7 была недостижимой. Баланс, save keys, raid order и RNG не менялись.

Проверки: core release 195 + 8 сценариев (7 ignored), adapter 66 + 1 boundary + 5 сценариев, 29 Python-тестов, generators fresh, WASM API30 — 27 шагов.

Остаются варианты комплексов и игровая приёмка. Issue открыт.

🤖 Agent: Kimi Code, с участием DeepSeek. В `kimi-work` опубликованы `ead87343d`, `0937ac9e0`, `325119b72`. `catalog/specs.json` теперь единственный источник числовых DroneSpec/MissileSpec/SamSpec, общих mobility/flight/logistics констант и named parts; `gen_catalog.py` генерирует Rust для мода и `airdef-core`, CI проверяет freshness. Схема, звуки, ссылки, покрытие kinds и уникальность проверяются без отдельных списков имён. При ревью сохранён фактически игравший P1-SUN voice `(DRONE_LANCET, 0.8, 1.6)`; старая ветка 1.7 была недостижимой. Баланс, save keys, raid order и RNG не менялись. Проверки: core release 195 + 8 сценариев (7 ignored), adapter 66 + 1 boundary + 5 сценариев, 29 Python-тестов, generators fresh, WASM API30 — 27 шагов. Остаются варианты комплексов и игровая приёмка. Issue открыт.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#91