Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
aliast Если я правильно понял, то получается, что при запаковке в Rezfile какие-то лумпы подвергались изменению (переворачивались байты), а какие-то нет. Ну, про смысл данных манипуляций я молчу, но как это решается скриптом Rezfile? Там ведь не предусмотрен механизм индивидуального подхода к пакуемым файлам.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Так ведь скрипт rezfile этими вещами не занимается по идее. Это всё делает конвертер карт, оставшийся где-то за кадром, либо даже какой-то 3DOшный редактор карт и графики, которые нам никто не дал. makerez же просто берёт набор файлов (уже порезанные лумпы и готовую графику) и пихает их в контейнер BRGR. Игра соответственно тоже работает с файлами из rezfile, а не с вадами.
Во что нашёл - http://doomwiki.org/wiki/Doom_utilities сорцы какких-то утилит для Дума. Там кстати используется пакер lzss, но пока не разбирался что там за проги и за что отвечают. Завтра попробую собрать exe файлы. Вроде бы wadlink режет вады на лумпы, а lumpy их наоборот собирает лумпы в wad. Да только ведь это всё не для 3DO :(
Secrets у меня распаковался и всё, больше там ничего нет (только Kills, Items и Secrets). Finished, Entering наверное по буковкам формируются. Кусок кода из InMain.c
т.е. на PC имеем 28 разных смещений на 28 ОДИНАКОВЫХ последовательностей байт, а на 3DO они объединены единым повторяющимся смещением 00 00 0D 00 и единственной цепочкой байт, т.е. нехило так ужали данные. Но как это реализовать я не соображу.
т.е. на PC имеем 28 разных смещений на 28 ОДИНАКОВЫХ последовательностей байт, а на 3DO они объединены единым повторяющимся смещением 00 00 0D 00 и единственной цепочкой байт,
Прочитать в PC WAD последовательность 00 00 FF FF, и посчитать сколько их. Там, где эти последовательности заканчиваются, пойдет другой алгоритм. То есть, мы просто игнорируем эти повторы. Я правильно понял?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Да не игнорируем, просто 28 раз переходим на оффсет 0D00 и в итоге получаем длинную цепочку. Но в файле она хранится один раз. Как-то так. Ну хорошо, посчитаю я количество 00FF, а как быть с остальными повторами? Они могут быть какими угодно. Нужно как-то найти все такие повторы и заменить одним. В общем, нужно делать фунцию поиска в массиве, а я в этом не силён(
aliast Как я понял, нужно сделать чтение лумпа и его анализ на наличие повторений подобного формата. То есть, читаем по 4 байта запоминаем каждую последовательность в массив, сравниваем последующие 4 байта с каждым элементом массива. Если повтор, то берем на заметку. Если не повтор, просто читаем дальше. Как-то так. Посмотрю подобные функции, может напишу чего. А там уж вкорячишь код в свою прогу.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Ну да, всё так. Ну и не знаю важно это или нет. 0342 на PC указывает на оффсет 0684 в этом же файле, т.е. 0342 * 2. А вот 00D0 на 3DO уже будет указывать на офсет 00D0 в этом файле без всяких умножений на 2.
Последний раз редактировалось aliast 08 май 2015, 11:28, всего редактировалось 2 раз(а).
Отлично, в голове уложилось. Теперь буду пробовать. Правда, с налету на "сях" не получилось что-то годное сваять. Не страшно, если ответ на "дельфях" будет?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Здорово, что работа продвигается! Мне не понятно одно, зачемы было так старательно ужимать и обрезать данные везде, где это возможно. Неужели потом восстановление данных не добавило тормозов в работе игры? Что они пытались выиграть? Уменьшить нагрузку на сидюк? У них компакт диск с игрой можно сказать пустой.
Author Хрен его знает... Единственное, что приходит на ум, так это уменьшение загружаемых с диска данных в процессе игры. Там музыка постоянно долбит диск, а когда приходится подгружать уровень, он иногда заходится в приступах. Но все равно, считаю, что такое ужатие данных ни к чему.
Добавлено спустя 1 минуту 54 секунды: Кстати, спросил у Ребекки на счет добавки наших экспортированных данных из REZFILE, заинтересовалась. Отправил архив ей. Вроде, должна обновить соответствующий раздел на github-е.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Ещё раз что нужно сделать. Есть последовательность байт между 00 00 и FF FF. Между ними может находиться любое число байт, кратное двум, от нуля (0000FFFF) до... есть вроде ограничение на максимум, надо поискать на doom.wikia.com. К примеру, здесь 00 00 1E 01 1F 01 20 01 21 01 22 01 23 01 24 01 25 01 26 01 27 01 2C 01 FF FF мы наблюдаем цепочку длиною 11 слов (1 слово = 2 байта; 0000 и FFFF я не считаю, т.к. это байты начала и конца цепочки). Наша задача найти одинаковые цепочки и удалить их все, кроме самой первой. Ну и потом заменить все ссылки на неё в начале файла одним оффсетом к первой найденной цепочке. Задача усложняется переменной длиной цепочки. Ещё раз. Все цепочки всегда начинаются с 0000 и кончаются FFFF. Ну а дальше косметика. Превратить 0000 в 00000000; FFFF в FFFFFFFF; 2901 в 00000129 и т.д. Из-за этих преобразований цепочки удлиняются и то что было по смещению 0640 оказывается по смещению 0D00.
PC 3DO Синяя цепочка на скрине 3DO занимает три строчки. Также можете сравнить одну и ту же цепочку на PC, оффсет 0x6F0 и выделенная синим цветом на 3DO (от 0x0D08 до 0x0D28)
Блин, я забыл или никогда не знал что означает префикс 80 в таблице оффсетов к файлам в Rezfile. Это файлы D0001, D0134, D0152, D0153, D0154, D0162, D0163, D0164, D0172, D0173, D0174, ... т.е 3 последних лумпа всех 24 карт, BIGNUMB (текстуры чисел?) и самый первый файл. Остальные файлы без префикса.
Добавлено спустя 5 часов 8 минут 54 секунды: https://yadi.sk/d/8qb4mMTTgXSMR Первая пробная версия упаковщика Rezfile. Кидаем в папку с DoomRezPacker.exe распакованные файлы, которые ОБЯЗАТЕЛЬНО должны быть вида Dxxxx где xxxx цифры от 0001 до того числа, которое вы укажете первым аргументом (если не укажете, тогда до 473 по умолчанию). Запускать можно просто DoomRezPacker.exe или так:
Если запаковать прогой оригинальные распакованные файлы и сравнить с оригиналом Rezfile то будет около 50 отличий. Это из-за непонятного флага 0x80 (см. мой пост выше), но игре на этот флаг как будто бы плевать Изменять карты и перепаковывать пока не пробовал. По поводу моего конвертера карт с недоделанным конвертом последнего лумпа. Там на выходе получаются файлы lump01, lump02... их нужно как-то переименовать в Dxxxx. Как это лучше сделать я сейчас думаю.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения