Итак...
Алгоритм действий:
Этап 1: подготовка файлов.
1.1. Создаем папку "__resources" в корне утилиты.
Примечание: Можно назвать папку и по-другому, я назвала ее так для примера.
1.2. Разделяем игру на папочки по принципу того, как вы хотите запаковать,
например:
1 - все карты и база данных
2 - звуки
3 - музыка
4 - графика
Каждая папочка будет у нас паком в последующем.
Как именно сортировать по папкам - дело вкуса. Но рекомендуется разделить отдельно звук, музыку, арт, файлы с логикой игры (карты, скрипты). Так будет проще работать, т.к. музыка, звук, арт, редко меняются, а баги с игровой логикой фиксятся куда чаще.
ВНИМАНИЕ!!! ехе и dll не кладем для запаковки! А также файлы, что требуются для записи\перезаписи - конфиги, сейвы и т.п.
Примечание: Это не критично, можете и положить. В подавляющем большинстве случаев это ничего не изменит. Просто шелл не будет их оттуда грузить, так что это приведет просто к лишнему раздутию размеров.
Таким образом, в папке __resources у нас окажутся исходные ресурсы для игры.
Например, в папках pack01, pack02, pack03, pack04 вот так:
ВНИМАНИЕ!!! Рекомендуется сохранять структуру игры, то есть руководствоваться тем, что эти папки с паками находятся как бы в корне экзешника.
То есть, например, для графики будет в папке пака будут лежать все папки с графикой:
Этап 2. создание батника для запаковки и его запуск
1. В этой же папке с ресурсами создаем батник, назовем его publish
А также создаем папку output в папке с ресурсами:
Если не любите батники, можете просто писать с командной строки.
2. Пишем команды:
CD %~dp0..
exshell -repack .\__resources\output\rdata.edp .\__resources\pack01 "" belo4ka
exshell -repack .\__resources\output\sound.edp .\__resources\pack02 "" belo4ka
exshell -repack .\__resources\output\music.edp .\__resources\pack03 "Music" belo4ka
exshell -repack .\__resources\output\graph.edp .\__resources\pack04 "" belo4ka
Общий принцип таков:
exshell -repack <путь к будущему запакованному файлу с расширением edp> <папка, откуда пакуем> <название воображаемой папки> <ваш пароль паковки>
ВНИМАНИЕ !!! Утилита не любит русские пути в названиях файла. А также не переваривает, если ее запустить из под каталога с русским путём, так что не расстраивайте шелл по-напрасну.
ВНИМАНИЕ !!! Путь нужно указывать относительный, абсолютные пути шелл тоже не очень любит.
ВНИМАНИЕ !!! Если какойто аргумент содержит пробелы, то его надо писать в кавычках! К примеру, "C:\program files\my game", т.к. пробел используется для разделений аргументов и без кавычек - это будет 3 аргумента - C:\program files\my game
В данном случае для папки Music был указан этот параметр, потому что в самом паке мы поместили музыку без папки. Тем самым мы указываем, что пак должен обращаться к музыке через эту как бы виртуальную папку. Если вы всю структуру отразили правильно в ваших папках с паками, то можете просто ставить "".
3. Запускаем на исполнение.
В результате программа поместит в папку output запакованные результаты.
Этап 3. создание дистрибутива с игрой
Собственно, теперь осталось сделать сборку для запуска.
1. Формирование структуры.
Делаем папочку «__game» в любом месте. Можете назвать как угодно, как нравится.
ВНИМАНИЕ !!! В принципе, вы можете и не раскидывать по папкам, как делали это мы, а просто поместить все в корень.
Рекомендую разделить на папки:
Exshell – туда поместить все содержимое папки с утилитой, включая экзешник
Gamebin – сюда помещаем файлы проекта, которые не запаковали по тем или иным причинам. Экзешнику рекомендуется изменить разрешение на bin или другое, чтобы игрок случайно не стал запускать с него – в этом случае ведь ничего работать не будет.
Package – сюда помещаем наши папки с запакованными ресурсами
2. Проставляем настройки для запуска.
Это делается в файле exshell.ecd. По сути – это простой текстовый файл, с определенным синтаксисом. По синтаксису есть справка в приложенном пдф-файле.
Находим там строчки и меняем на ваши данные:
Например, здесь это сделано для «Дряньки»
$StartPEPath: ".\..\gamebin\RPG_RT.bin" ~это путь к экзешнику, который переименовали в бин
$StartPEArgs: "RPG_RT.exe NormalPlay ShowTitle Window" ~это чтоб пускался в оконном режиме
~$ApplCaption: { "TFormLcfGameMain", NO, 0, NO } ~ Uncomment if this not cause problems
$Compatibles: #C0DE0001
$FScreenMode: { 320, 240, 555 } ~ режим, в котором работает игра, ширина, высота, битность палитры
~ далее идут пути к пакам с нашими файлами
~они будут грузиться по порядку т.е. если файлы в последнем паке будут совпадать с файлами в первом паке то при обращении к ~ним шел будет подсовывать игре файлы из последнего
$LoadPackage: "./../package/rdata.edp"
$LoadPackage: "./../package/graph.edp"
$LoadPackage: "./../package/sound.edp"
$LoadPackage: "./../package/music.edp"
~$LoadPackage: "./../package/pat01.edp"
$LoadPackage: NO
Примечание: Для мейкера ХР настройки будут другими:
$FScreenMode: { 640, 480, 555 },
А строчку $Compatibles: #C0DE0001 лучше закомментарить, если вы используете ХР.
$ 3. Запуск и настройки запуска.
По сути, теперь вы уже можете запускать игру с помощью exshell.exe. Если вы все правильно сделали на прошлых пунктах, то она будет работать. Но не каждый игрок догадается зайти в эту папку, чтоб запустить приложение. Так что делаем еще в корне VB скрипт, который пускает этот шелл:
Set WshShell = CreateObject("WScript.Shell")
WshShell.CurrentDirectory = WshShell.CurrentDirectory + "\\exshell"
WshShell.Run """exshell.exe"" NormalPlay ShowTitle Window",1
Также можно сделать экзешник, который запускает игру, как это сделал Статик по моей просьбе для нашего проекта.
На этом, вроде, всё. Можно наслаждаться, играя в запакованный проект, при этом меняя ему режимы экрана и отображения, играясь с настройками exshell.ecd.
Заключение.
Да, я знаю, все непросто. Если какие вопросы, можете спрашивать, возможно, мы вам поможем разобраться.
И давайте еще раз поблагодарим Статика за такую полезную программу.