Skip to content
This repository has been archived by the owner on Apr 9, 2019. It is now read-only.

Original Game Resources ru

Kakadu edited this page Aug 4, 2017 · 2 revisions

Игровые ресурсы

Данная страница описывает ресурсы, используемые оригинальной игрой (Космические Рейнджеры 1, 2, Перезагрузка, Революция, HD)

Если изучить директорию с игрой (КР2), можно обнаружить несколько типов файлов:

  • *.dat в cfg/
  • *.pkg в data/
  • *.vdo в data/ - видеоролики mpeg4 в контейнере AVI
  • matrix/ - все что связано с планетарными битвами
  • *.dat в директории music/ - музыка в обычном mp3
  • save/ - сохранения игры.

Рассмотрим подробно некоторые файлы.

*.DAT

*.dat - иерархическое хранилище текстовых пар ключ-значение, т.е. по-сути - это база данных. Внутри имеет древовидную структуру. Узел - либо набор пар ключ-значение, либо набор дочерних узлов. При этом, внутри набора, пары или дочерние узлы могут объединяться в массивы. Вот пример структуры:

root
|-node1
| |-value1 = "value1"
| |-array[0]
| | |-subvalue = "some1"
| |-array[1]
| | |-subvalue = "some2"
| |-array[2]
| | |-subvalue = "some3"
| |-value2`

Например, в OpenSR чтобы обратиться к паре subvalue=some3 нужно вызвать (пример для python):

engine.datRoot()['root']['node1']['array'][0]['subvalue']

В данных файлах хранится:

  1. Вся текстовая информация в игре.
  2. Все параметры вооружения, предметов, микромодулей
  3. Разметка GUI
  4. Типы планет, астероидов, систем
  5. Возможные названия кораблей, баз, планет, систем, секторов
  6. Информация о квестах, заданиях, скриптах
  7. Информация о расах
  8. ....

В общем, вся функциональная информация игры.

Естественно, данные файлы - простор для читерства в игре, и, поскольку существовал (существует?) глобальный рейтинг рейнджеров, разработчики КР2 начиная с Перезагрузки начали шифровать данные файлы. Однако шифр был взломан. Для OpenSR нужны уже расшифрованные файлы.

Начиная с Революции (и в HD) *.dat файлы подписываются уже настоящей цифровой подписью. Их поддержка в OpenSR пока не планируется. Более подробную структуру можно посмотреть в Ranger/DAT.cpp

*.PKG

*.pkg - архив ресурсов игры. Представляют собой файловый архив. Файлы могут хранится как в сжатом (ZLIB deflate) так и не в сжатом виде. ResourceViewer может просматривать и распаковывать эти архивы.

В архивах pkg хранятся все нетекстовые ресурсы игры. Рассмотрим эти ресурсы подробнее.

*.GI

*.gi - изображения (фреймы, кадры). В данном формате хранятся все графические изображения игры. Каждый фрейм имеет свой тип и набор слоев. Каждый слой имеет свою позицию на фрейме, из слоев строится итоговое изображение.

Известно 6 типов GI фреймов:

  1. 1 слой, RGB16 или ARGB32 в зависимости от битовой маски цветов.
  2. 1 слой, RGB16 с оптимизацией.
  3. 3 слоя:
    1. RGB16 с оптимизацией - внутренние пиксели изображенного объекта
    2. RGB16 с оптимизацией - края объекта.
    3. 6-битный альфа-канал с оптимизацией.
  4. 2 слоя
    1. Индексированный (8-bit) RGB с оптимизацией.
    2. Индексированный (8-bit) RGBA (pre-multiplied) с оптимизацией.
  5. 2 слоя
    1. Индексированный RGBA (8-bit)
    2. Палитра для первого слоя
  6. Дельта-фрейм GAI-анимации (рассмотрен ниже)

"c оптимизацией" - значит данные слоя записаны в одном из вариантов RLE.

Подробнее - Ranger/GILoader.cpp

*.GAI

*.gai - анимация. Большинство анимаций хранится в этом формате. Представляет из себя набор GI-фреймов и специальную таблицу времен кадров, где хранятся время показа каждого кадра в мс. Данная таблица разбита на блоки. Достоверно неизвестно зачем, скорее всего для зацикливания анимации. Так, например, анимация гипер-тоннеля состоит из 3 блоков - открытие, открытый тоннель, закрытие.

Отдельно стоит GAI анимация правительств, пилотов и прочая "большая" анимация. Здесь разработчики применили алгоритм сжатия, похожий на современное сжатие видео. Полностью хранится только первый кадр (причем, отдельным gi-файлом), все последующие кадры хранят разность от предыдущего кадра. Это те самые упомянутые фреймы типа 5.

Подробнее - Ranger/GAILoader.cpp

*.HAI

*.hai - более простой формат анимации, используется в основном для анимации кораблей. Каждый кадр состоит из RGBA-палитры (256 цветов = 1024 байта) и массива пикселей (индексов палитры). Времен кадров нет, каждый кадр длительностью 50мс (предположительно), анимация зациклена.

Подробнее - Ranger/HAILoader.cpp

*.QM

*.qm - текстовые квесты.

Подробнее - QM

Распаковка и подкладывание ресурсов игре

Dat файлы

При условии что мы делаем не shadow build, находимся в директории с исходниками, а оригинальные файлы игры находятся в ../OpenSrData.

tools/DATTools/opensr-dat-convert hd ../OpenSrData/cfg/CacheData.dat data/CacheData.dat
tools/DATTools/opensr-dat-convert d  ../OpenSrData/cfg/Rus.dat       data/rus.dat
tools/DATTools/opensr-dat-convert d  ../OpenSrData/cfg/Main.dat      data/main.dat

Файлы ресурсов, музыки (pkg файлы)

Распаковываются с помощью утилиты tools/ResourceViewer/opensr-resourceviewer. Всё должно сложиться в директорию ./data/DATA И выглядеть примерно так:

➜  OpenSr git:(rework3) ✗ find -L ./data/DATA -maxdepth 1 |sort
...
./data/DATA
./data/DATA/Asteroid
./data/DATA/Atm
./data/DATA/BGObj
./data/DATA/bv.dat
./data/DATA/Captain
./data/DATA/City
./data/DATA/Comet
./data/DATA/Cursor
./data/DATA/FormAbout
./data/DATA/FormAbout2
./data/DATA/FormAchievements
./data/DATA/FormGalaxy2
./data/DATA/FormGameSet2
./data/DATA/FormGoods2
./data/DATA/FormIntro2
./data/DATA/FormLoad2
./data/DATA/FormLoadAB
./data/DATA/FormLoadQuest
./data/DATA/FormLoadRobot
./data/DATA/FormMain2
./data/DATA/FormMain3
./data/DATA/FormNote
./data/DATA/FormOptions2
....

Пока не все файлы *.pkg используются. Распаковку стоит начать с common, english, ships, forms, items, mainmenu.