2026-02-09 23:36:32 +00:00
|
|
|
|
# FParkan
|
|
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
Открытый движок *Паркан: Железная стратегия* на Rust и Vulkan. Он читает
|
2026-10-11 13:12:50 +04:00
|
|
|
|
ресурсы установленной оригинальной игры. Сейчас приложение показывает
|
|
|
|
|
|
интерактивную сцену выбранной карты: terrain, все доступные MSH-компоненты
|
|
|
|
|
|
объектов, материалы, динамические тени, небо, погоду, lightning FX и звуковые
|
|
|
|
|
|
события. Это просмотр карты с полной графической сценой; прохождение миссии и
|
|
|
|
|
|
игровое поведение юнитов пока не запускаются, а модели показываются в статической
|
|
|
|
|
|
позе, заданной сохранёнными настройками узлов прототипа.
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
## Запуск
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
Нужны Rust и драйвер видеокарты с поддержкой Vulkan. Игровые файлы в
|
|
|
|
|
|
репозиторий не входят.
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
```powershell
|
2026-10-11 13:12:50 +04:00
|
|
|
|
cargo run --release -p fparkan-game -- `
|
2026-09-06 05:22:12 +04:00
|
|
|
|
--root 'C:\GOG Games\Parkan - Iron Strategy' `
|
2026-10-11 13:12:50 +04:00
|
|
|
|
--mission 'MISSIONS\Autodemo.00\data.tma'
|
2026-06-22 13:12:27 +04:00
|
|
|
|
```
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-10-11 13:12:50 +04:00
|
|
|
|
Окно работает в интерактивном режиме до закрытия и по умолчанию загружает все
|
|
|
|
|
|
корневые объекты миссии (`--preview-roots N` ограничивает их число только для
|
|
|
|
|
|
диагностики).
|
|
|
|
|
|
`WASD` перемещают камеру относительно её направления, `E/Q` поднимают и
|
|
|
|
|
|
опускают её, `Shift` ускоряет, `Ctrl` замедляет движение. Удержание правой
|
|
|
|
|
|
кнопки мыши включает relative-look; движение мыши вращает yaw/pitch. При
|
|
|
|
|
|
потере фокуса обзор отключается и нажатые клавиши сбрасываются. `Esc`
|
|
|
|
|
|
отпускает обзор или закрывает окно.
|
|
|
|
|
|
|
|
|
|
|
|
В каталоге миссии ищется `sky.ske`. Если файл найден, приложение читает её
|
|
|
|
|
|
расписание и `sky.wea`; связанные MAT0/WEAR-материалы и
|
|
|
|
|
|
`effects.rlb/env_lightning` загружаются из ресурсов игры. Без `sky.ske`
|
|
|
|
|
|
окружение отключено; если файл есть, отсутствие `sky.wea`, `env_lightning` или
|
|
|
|
|
|
связанного материала считается ошибкой. Параметр `--atmosphere-seconds N`
|
|
|
|
|
|
задаёт начальное время; по умолчанию используется начало расписания. Когда
|
|
|
|
|
|
окружение загружено, небо, солнце и
|
|
|
|
|
|
луна, flares, молнии, дождь и снег, point lights, динамические тени и связанные
|
|
|
|
|
|
звуковые события обновляются в каждом кадре.
|
|
|
|
|
|
|
|
|
|
|
|
`--frames N` ограничивает запуск числом кадров для smoke/readback-проверок;
|
|
|
|
|
|
значение `0` означает бесконечный интерактивный запуск. `--legacy-camera-capture`
|
|
|
|
|
|
читает сохранённый захват камеры и запускает воспроизводимый режим без
|
|
|
|
|
|
free-flight управления. `--static-animation-frame <u16>` задаёт один кадр для
|
|
|
|
|
|
всех узлов. Если параметр не указан, приложение берёт сохранённые настройки
|
|
|
|
|
|
узлов из явной ссылки прототипа на `.ctl`; для узлов без такой настройки
|
|
|
|
|
|
используется кадр `0`. Статическая поза не запускает игровой Control, AI или
|
|
|
|
|
|
полное поведение юнитов.
|
|
|
|
|
|
`--static-material-phase <u16>` выбирает фиксированную фазу материала.
|
|
|
|
|
|
`--readback-out target/frame.raw` сохраняет последний кадр GPU. `--validation`
|
|
|
|
|
|
включает Vulkan validation layers и завершает запуск с ошибкой при предупреждении
|
|
|
|
|
|
или ошибке. Readback сохраняет байты в формате surface без преобразования;
|
|
|
|
|
|
размер — `width × height × 4`. Порядок каналов и encoding определяются значением
|
|
|
|
|
|
`readback_format` в выводе; на текущем GPU обычно используется
|
|
|
|
|
|
`VK_FORMAT_R8G8B8A8_UNORM`.
|
2026-06-22 13:12:27 +04:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
## Разработка
|
2026-06-22 17:29:33 +04:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
```text
|
|
|
|
|
|
cargo fmt --all -- --check
|
|
|
|
|
|
cargo test --workspace
|
|
|
|
|
|
cargo check --workspace
|
2026-06-25 04:18:32 +04:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
Алгоритмы и форматы проверяются обычными Rust-тестами рядом с кодом.
|
|
|
|
|
|
Тесты с оригинальными ресурсами помечены `#[ignore]`; пути к двум частям
|
|
|
|
|
|
установки задаются через `FPARKAN_CORPUS_PART1_ROOT` и
|
|
|
|
|
|
`FPARKAN_CORPUS_PART2_ROOT`. Зависимости разрешает Cargo, локальный
|
|
|
|
|
|
`Cargo.lock` не хранится в Git.
|
|
|
|
|
|
|
|
|
|
|
|
Готовые SPIR-V шейдеры находятся рядом с исходниками GLSL.
|
|
|
|
|
|
Vulkan SDK нужен только для их пересборки и проверки с `--validation`.
|
|
|
|
|
|
При доступных в PATH инструментах SDK:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
glslangValidator -V adapters/fparkan-render-vulkan/shaders/triangle.vert -o adapters/fparkan-render-vulkan/shaders/triangle.vert.spv
|
|
|
|
|
|
glslangValidator -V adapters/fparkan-render-vulkan/shaders/triangle.frag -o adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
|
|
|
|
|
|
spirv-val adapters/fparkan-render-vulkan/shaders/triangle.vert.spv
|
|
|
|
|
|
spirv-val adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
|
2026-06-25 04:18:32 +04:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
## Книга и исходники
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
[Книга об устройстве движка](docs/index.md) объясняет форматы, математику,
|
|
|
|
|
|
загрузку мира и связь подсистем. Её можно читать прямо в репозитории;
|
|
|
|
|
|
`mkdocs.yml` задаёт представление на [сайте проекта](https://fparkan.popov.link).
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
`crates/` содержит форматы и игровые алгоритмы, `adapters/` — окно и Vulkan,
|
|
|
|
|
|
`apps/fparkan-game` — исполняемое приложение.
|
2026-02-09 23:36:32 +00:00
|
|
|
|
|
|
|
|
|
|
## Лицензия
|
|
|
|
|
|
|
2026-09-06 05:22:12 +04:00
|
|
|
|
[GNU GPL v2](LICENSE.txt).
|