Valentin Popov 55e98d7ff6
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
fix(render): draw translucent water into planar reflections
2026-11-01 14:39:37 +04:00
2026-10-18 00:31:28 +04:00
2024-02-06 02:26:50 +04:00

FParkan

Открытый движок Паркан: Железная стратегия на Rust и Vulkan. Он читает ресурсы установленной оригинальной игры. Сейчас приложение показывает интерактивную сцену выбранной карты: terrain, все доступные MSH-компоненты объектов, материалы, динамические тени, небо, погоду, lightning FX и звуковые события. Это просмотр карты с полной графической сценой; прохождение миссии и игровое поведение юнитов пока не запускаются. Модели начинают с настроек узлов прототипа. Поддерживаемые Control-анимации идут по часам сцены, а эффекты — по часам своих экземпляров с общим начальным моментом. Неподдерживаемые Control-треки остаются на сохранённой начальной позе. Рельеф переключает исходные LOD0/LOD1 по ячейкам относительно текущей камеры; под основаниями строений сохраняется подробная сетка. Горизонтальная вода использует плоское отражение ближайшей активной высоты; волны используют карту Du/Dv и часы оригинала. Камера отражения смотрит вверх из отражённой точки наблюдения через прямоугольник водоёма; глубина и часть параметров отражённого вида пока заимствуются из основного прохода.

Запуск

Нужны Rust и драйвер видеокарты с поддержкой Vulkan. Игровые файлы в репозиторий не входят.

cargo run --release -p fparkan-game -- `
  --root 'C:\GOG Games\Parkan - Iron Strategy' `
  --mission 'MISSIONS\Autodemo.00\data.tma'

Окно работает в интерактивном режиме до закрытия и по умолчанию загружает все корневые объекты миссии (--preview-roots N ограничивает их число только для диагностики). WASD перемещают камеру относительно её направления, E/Q поднимают и опускают её, Shift ускоряет, Ctrl замедляет движение. Удержание правой кнопки мыши включает relative-look; движение мыши вращает yaw/pitch. При потере фокуса обзор отключается и нажатые клавиши сбрасываются. Esc отпускает обзор или закрывает окно.

В интерактивном режиме каждое отрисовываемое строение (корневой объект класса FORT) и его отрисовываемые компоненты участвуют в проверке движения с их позами и преобразованиями присоединения. Камера проверяет непрерывный путь до новой позиции после ограничения рельефом; при пересечении она остаётся на прежней позиции, сохраняя новый поворот. Повторная отправка ожидающего кадра не применяет шаг второй раз. Режим --legacy-camera-capture не использует свободную камеру и сохраняет положение из захвата без изменений.

В каталоге миссии ищется 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 управления. В обычном запуске накопленный runtime clock обновляет MSH Control-анимацию, поддержанные Control FX и анимацию материалов. --control-clock-ms <u32> вместе с --frames N (не меньше двух) воспроизводит этот clock от нуля до заданного миллисекундного значения за выбранные кадры.

--static-animation-frame <u16> задаёт один кадр для всех MSH-узлов и выключает выбор MSH-позы из Control clock. Без override приложение берёт начальные настройки узлов из явных .ctl bindings, затем применяет поддержанные Control-треки. Узлы без настройки остаются на кадре 0. Это не запускает AI, миссионные события или полное поведение юнитов. --static-material-phase <u16> фиксирует фазу MSH и terrain материалов; фаза материала Control FX остаётся частью его normalized command timeline. --readback-out target/frame.raw сохраняет последний кадр GPU. --validation включает Vulkan validation layers и завершает запуск с ошибкой при предупреждении или ошибке. Readback сохраняет байты в формате surface без преобразования; размер — width × height × 4. Порядок каналов и encoding определяются значением readback_format в выводе; на текущем GPU обычно используется VK_FORMAT_R8G8B8A8_UNORM.

Разработка

cargo fmt --all -- --check
cargo test --workspace
cargo check --workspace

Алгоритмы и форматы проверяются обычными Rust-тестами рядом с кодом. Тесты с оригинальными ресурсами помечены #[ignore]; пути к двум частям установки задаются через FPARKAN_CORPUS_PART1_ROOT и FPARKAN_CORPUS_PART2_ROOT. Зависимости разрешает Cargo, локальный Cargo.lock не хранится в Git.

Готовые SPIR-V шейдеры находятся рядом с исходниками GLSL. Vulkan SDK нужен только для их пересборки и проверки с --validation. При доступных в PATH инструментах SDK:

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

Книга и исходники

Книга об устройстве движка объясняет форматы, математику, загрузку мира и связь подсистем. Её можно читать прямо в репозитории; mkdocs.yml задаёт представление на сайте проекта.

crates/ содержит форматы и игровые алгоритмы, adapters/ — окно и Vulkan, apps/fparkan-game — исполняемое приложение.

Лицензия

GNU GPL v2.

S
Description
Utilities and tools for the game "Parkan: Iron Strategy".
https://fparkan.popov.link
Readme GPL-2.0
29 MiB
1 Watchers 0 Forks
Languages
Rust 83.1%
C# 16.2%
PowerShell 0.4%
GLSL 0.3%