LINUX.ORG.RU

Как пакуют файлы данных?

 ,


0

4

Часто в играх можно наблюдать данных запакованные в один или несколько файлов. Какие методики применяют, или какими программами пользуются. Может свои пакеры придумывают. Или как в Ufo Alien Invasion запаковано в zip. Но вот беда, это же ещё надо потом распаковывать, как всё это делается?

Некоторые придумывают свои пакеры, некоторые тупо ксорят, некоторые юзают ZIP с изменённым magic number, некоторые тупо склеивают все файлы в один большой типа game.data, а потом seek'ают по нему в поисках нужных кусков.

В Android-играх часто можно встретить сжатый кеш в формате OBB, который просто монтируется в ФС, а в игру прокидывается путь к файлам игры.

Разных способов тьма. Зависит это от того, насколько разработчики готовы потратить на защиту их текстурок от воровства. Для Homebrew-проектов такое нафиг не нужно.

EXL ★★★★★
()

1. Когда ты уже научишься если не гуглить очевидное, то хоть подробности того, что тебе надо сообщать? Элементарные для самостоятельного поиска (или просто даже подумать головой, как с курсором и пулей) вопросы один за другим.

2. ОК. Какие данные тебе запаковывать надо? Подключаешь либу (gzip, lzma, lzma2), жмёшь соответствующим компрессором, в своей игре — разжимаешь. Или тебе надо чтобы много файлов в один? Тогда вопрос — зачем надо? Просто потому что так делают другие, или всё же какую-то цель преследуешь? Это можно хоть в tar положить, если надо, вопрос только зачем это тебе. А если насчёт сжатия, то смотря какие данные. Для аудио есть opus (для игр в самый раз хватит) или ogg, сильнее не сожмёшь. Для изображений (спрайтов, текстур) есть png. Опять же, поверх png ничем ещё раз жать не требуется. Если требуется более сильное сжатие, чем умеет png, можно посмотреть например FLIF. Он жмёт лучше, но не так распространён (соответственно придётся юзать именно отдельную либу скорее, нежели обойтись средствами какого-нибудь SDL, или чего ты там будешь использовать). Видео можно соответственно тоже жать любым кодеком. Исполняемый файл и либы жать не стоит вообще. Текстов у тебя в игре всё равно много не будет (потому что иначе игрок повесится, с твоим знание русского, не говоря уж об английском). Что жать собрался ещё?

Psych218 ★★★★★
()

Мда, я так понимаю мы будем зрителями всех этапов созидание. Ну на вскидку про libarchive почитай

Silerus ★★★★
()
Ответ на: комментарий от Psych218

нежели обойтись средствами какого-нибудь SDL

В SDL только битмапы (BMP), libpng или SDL_Image нужно будет подрубать всё равно.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Ну я SDL_Image имел в виду. Там же нет, насколько я понимаю, поддержки FLIF пока. Слишком молодой формат.

Psych218 ★★★★★
()
Ответ на: комментарий от EXL

Да я вот думаю, если отправлять в steam какую нибудь игру, то наверное надо будет как то все файлы паковать или необязательно. Мне нужно изображения наверное запаковать, а звуковые файлы так остануться.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

если отправлять в steam какую нибудь игру, то наверное надо будет как то все файлы паковать или необязательно

Надо будет паковать необязательно. Так больше дохода в расчёте на один файл.

i-rinat ★★★★★
()
Ответ на: комментарий от XMs

А ты что тоже считаешь steam не покорённой крепостью? Я видел такую игру, которая может быть даже и похуже моей будет, хоть и сделано в той игре очень много.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Silerus

Коллектив анонимусов и регистрантов ЛОРа явно заслуживает упоминания в соавторах игры. Если она появится конечно :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

Никто из перечисленных, кроме меня, не приложили усилий для создания игры. А так у тебя позитивное сообщение.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Harald

фирма прославившаяся дерьмовыми играми по франшизам для консолей ((удачных игр у них по пальцам сосчитать)

Silerus ★★★★
()
Ответ на: комментарий от i-rinat

Хор анонимусов:
- Все игры на стиме упакованы! Знаешь, какой доход приносит упакованная игра на стиме? Тысячу фунтов - один байт!

anonymous
()

1. Придумываешь свой формат архивов нужный только под твои собственные нужды или берёшь какой-нибудь существующий. Допустим, ты захотел взять PAK из Quake I.

2. Пишешь утилиту которой упаковывать, в своей игре пишешь чем распаковывать. Опять же, если это существующий уже формат, то есть очевидно и реализации.

3. Пишешь абстракцию над ФС, чтобы искала и открывала и файлы с дисков, и с твоих архивов. Написал и отладил? Теперь забудь о stdio или fstream из крестов, что там у тебя. Потому что у тебя есть своя ФС, а это круто и гибко. Самое главное ты это можешь вынести в либу, которую можно использовать и в утилитах своей игры, и в последующих играх.

4. ?????

5. PROFIT.

a1batross ★★★★★
()
Последнее исправление: a1batross (всего исправлений: 2)
Ответ на: комментарий от Harald

В этой игре я её не использую, а в той игре там ещё делать и делать.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Ну вот, думаю, надо или нет файлы в один файл пихать.

Ты когда-нибудь слышал выражение «преждевременная оптимизация»? Доделай игру с неупиханными файлами в один. Если вдруг будут долгие загрузки или что-то, придумаешь, как упихать в один. В идеале — опционально (чтобы при разработке ты мог фигачить с рассыпными файлами, например просто в каталоге, а на релизе положить их в аккуратный pak, да хоть бы даже и tar).

Проблемы надо решать, когда они есть. Прежде чем придумывать «как», нужны предпосылки к «зачем». Причём от «зачем» может в том числе зависеть «как».

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Psych218

Не подействует. Похоже у него магическое мышление. Какая там оптимизация, что это? Вот у «настоящих игр» ресурсы упакованы? Упакованы. А это значит, что если в своей хелловорлдоподелке запихнуть ресурсы в один файл, то она сразу станет «настоящей игрой».

anonymous
()

Или своя VFS, или чужая. Но вам рано думать об этом.

andreyu ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Я видел такую игру, которая может быть даже и похуже моей будет,

Хуже, чем ничего? Ну-ну.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от u0atgKIRznY5

Никто из перечисленных, кроме меня, не приложили усилий для создания игры.

Не льстите себе. Все, кто отмечался в ваших темах, приложили усилий существенно больше, чем вы.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

А точно, изображения можно из xpm массива получить или какого там, я помню как то делал. Изображение в gimp переводил в си заголовок.h, а потом переименовывал в заголовок.c.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от andreyu

Но авторство на мои программы налагать это неправильно. Или те кто вам подсказывал, и книжки которые вы читали имеют права на ваши программы больше чем вы?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Но авторство на мои программы налагать это неправильно.

Я специально выделил вашу фразу, на которую давал ответ. Про чье-либо авторство в ней речи не шло.

andreyu ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Изображение в gimp переводил в си заголовок.h, а потом переименовывал в заголовок.c.

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

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

А чём тогда, помогли с программой, на то форумы и существуют чтоб друг другу помогать. Но такой текст, люди на форуме сделали больше меня, хотя нистрочки кода не написали в моей программе.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от andreyu

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от andreyu

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

u0atgKIRznY5
() автор топика

Теперь лор тебе и формат для хранения архивов придумать.
На все твои посты один ответ:
1. Открыть код quake
2. Скопировать в свою игру
3. Закрыть код quake

mittorn ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

нистрочки кода не написали в моей программе

Да и тебе не стоило

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Книжку ты своими усилями читаешь, а тут активная помощь по каждой мелочи. Между прочим, в credits многих игр даже всякие закусочные упоминаются, где разработчики хавали на обеденном перерыве, обсуждая игру, мол типа спасибо им и всё такое, а тебе ЛОР жалко упомянуть )

Harald ★★★★★
()
Ответ на: комментарий от Harald

«Спасибо пользователям aaaa, aaab, aaac, aaad, aaae, ..., zzzx, zzzy, zzzz с форума ЛОР, которые не пытались меня троллить, когда я задавал свои очень важные вопросы.»

i-rinat ★★★★★
()
Ответ на: комментарий от Silerus
╔══════════════════════════════════════════════╗
║   ____            _         _____            ║
║  / ___|__ _ _ __ | | ____ _|___ / _ __ ___   ║
║ | |   / _` | '_ \| |/ / _` | |_ \| '_ ` _ \  ║
║ | |__| (_| | |_) |   < (_| |___) | | | | | | ║
║  \____\__,_| .__/|_|\_\__,_|____/|_| |_| |_| ║
║            |_|                               ║
╚═════════════════════╦════════════════════════╝
                      ║
                      ║
                      ║
                      ║
i-rinat ★★★★★
()

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

nihirash ★★★
()
Ответ на: комментарий от andreyu

Классно. Спасибо за ссылку на интересный проект, не знал о нём.

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.