forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Все ресурсы в одном EXE (http://forum.boolean.name/showthread.php?t=11)

SubZer0 04.09.2005 05:35

Закодив большой проект по заказу, хотелось-бы, чтоб он выглядел пристижно т.е. минимум файлов о которых нужно было-бы заботиться, чтоб они не потерялись, ну и сами ресурсы чтоб подменить нельзя было...

все эти приемущества нам окажет следующая либа, которая поможет нам спрятать все ресурсы в один пак-файл или прямо в екзешник проекта.

как пользоваться этим чудом? сказал-бы просто, если бы это было так ;) , но... прорвемся... итак поехали!

создадим скрипт запаковки ресурсов:

в блиц редакторе создаем новый файл :) ОБЯЗАТЕЛЬНО НОВЫЙ, ОТДЕЛЬНЫЙ *.bb ФАЙЛ!!!

пишем прямо в начале CreatePakFile "Filename", Encryption Key, headerMask
где:
Filename - имя нашего пака

Encryption Key - ключ для шифрования данных (32 тиное число)
headerMask - ключ для шифрования заголовков файлов, чтоб при открытии допустим в блокноте не увидеть имен запакованных файлов (32 битное число)

ключи могут быть и нулями, тогда ничего не шифруется :)

и теперь самое кропотливое: пишем

AddtoPak "имя файла ресурса"

и так для всех ресурсов которые требуются для работы проекта. поскольку все мы делаем в папке нашего проекта, то пути нужно писать от текущей папки и далее допустим AddToPak "media\sound\step.wav"


Теперь закрываем пак командой CloseCreatedPak()


В результате у нас получился большой Пак-файл (он по размеру будет немного больше чем ресурсы на диске)... теперь давайте попробуем вытащить из него запакованные ресурсы.


закрываем наш новый файл и открываем проект, инклюдим в него файл из либы Bones.bb, как это выглядет думаю писать не нужно ;)

далее инициализируем наш Пак:

PakInit "Имя_файла_пака", Encryption Key, "TMP", headerMask

Где:
Encryption Key - код для расшифровки данных
headerMask - код для расшифровки заголовков файлов

эти числа должны быть такими-же как и когда мы создавали пак

"TMP" - путь, куда будут распакованы файлы из пака, "TMP" означает, что файлы будут распакованны во временую папку Windows, тут можно и свой путь указать (при особом желании ;) )

теперь опять самое кропотливое: ищем в проекте все команды которыми грузятся ресурсы... хоть LoadMesh, хоть LoadImage... и преобразовываем их сл. образом:

var=LoadMesh ("Имя_Ресурса",Имя_Родителя)

преобразуется в:

var=LoadMesh (Pak("Имя_Ресурса"),Имя_Родителя)

для функции Pak() есть еще один двойник DLPak(), отличие в том, что DLPak() перераспаковывает ресурс, даже если он уже есть в распакованном виде...


ВСЁ! компилим проект... запускаем... теперь все ресурсы берутся из пака...


Ну а теперь самое интересное, сливание пака с EXE файлом проекта... для этого:

в файле проекта ищем команду PakInit и в качестве пути к паку пишем имя EXE файла проекта

компилируем проект

если сейчас запустить EXE, то программа вылетит с ошибкой... все правильно...

открываем код, где мы создаем пак, там после команды закрытия пака нужно дописать еще одну команду: AppendToExe "Файл_проекта.exe","Пак_Файл".

запускаем на выполнение... таким образом после создания пак приаттачится к EXE, теперь можно пробовать запускать екзешник, должно все работать...


Примечания:

Не делать приаттачивания пака из выполняющегося екзешника, может косяк получиться

SubZer0 04.09.2005 05:37

для пущей ясности:

Файл для создания пака должен выглядеть примерно следующим образом:

Код:

CreatePakFile "PakFile.pak", 0, 0
AddtoPak "SomeFile.png"
CloseCreatedPak()
;AppendToExe "MyExe.exe","PakFile.Pak"; в случае добавления пака к екзешнику

в проекте:
Пак должен быть проинициализирован
Все пути к ресурсам должны быть изменены на вызов функции Pak()с этими путями...

:) :) :)

По времени:

делаем сам проект!

создаем пак с ресурсами

в проект инклюдим bones.bb, изменяем пути на вызов Pak(), дописываем функцию инициализации пака..

компилим проект

тестим

если не работает повторяем создание пака и его инициализацию заново :)

в проекте изменяем имя файла в PakInit на имя екзешника проекта

компилим проект

в файле создания пака раскомментируем строчку AppendToEXE

за пускаем файл создания пака на выполнение..

ГОТОВО

:bravo: :bravo:

:compl: :compl: :compl:

Amir 02.10.2005 01:34

Вообще то все немножечко проще :) - есть такая прога от авторов пакера - Terrabit DataPaker - написана на VB - она пакует нужные вам ресурсы. В приницпе у меня даже где то валялись исходники пакера - выпросил у автора :)

SubZer0 02.10.2005 01:57

Цитата:

Originally posted by Amir@Oct 1 2005, 11:34 PM
Вообще то все немножечко проще :) - есть такая прога от авторов пакера - Terrabit DataPaker - написана на VB - она пакует нужные вам ресурсы. В приницпе у меня даже где то валялись исходники пакера - выпросил у автора :)
хотелось бы почитать туториал, как может быть по проще... если будет, то с радостью напишу, как проще...

а программку поищи обязательно, и прицепи к сообщению... :)

ELIAS 31.08.2008 18:05

Ответ: Все ресурсы в одном EXE
 
Извинитте... А не может никто перезалить эту либу???... pakmaker.ace
Ссылочка устарела(((

IGR 01.09.2008 16:56

Ответ: Все ресурсы в одном EXE
 
тут вроде есть:
http://forum.boolean.name/showthread.php?t=3024

Alex_Noc 23.10.2008 22:29

Ответ: Все ресурсы в одном EXE
 
я пользуюсь Moleboxpro - очень крутая и простая вещица :) как раз все в 1 екзе:)


Часовой пояс GMT +4, время: 13:00.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot