[ Сообщений: 1386 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13, 14 ... 47  След.
3DO Doom sources released 
Автор Сообщение
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Если я правильно понял, то получается, что при запаковке в Rezfile какие-то лумпы подвергались изменению (переворачивались байты), а какие-то нет. Ну, про смысл данных манипуляций я молчу, но как это решается скриптом Rezfile? Там ведь не предусмотрен механизм индивидуального подхода к пакуемым файлам.


05 мар 2015, 11:10
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Так ведь скрипт rezfile этими вещами не занимается по идее. Это всё делает конвертер карт, оставшийся где-то за кадром, либо даже какой-то 3DOшный редактор карт и графики, которые нам никто не дал. makerez же просто берёт набор файлов (уже порезанные лумпы и готовую графику) и пихает их в контейнер BRGR. Игра соответственно тоже работает с файлами из rezfile, а не с вадами.


05 мар 2015, 12:17
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast писал(а):
Был добавлен шар invisibility

Да, проник туда и посмотрел. :a_g_a:
Изображение


05 мар 2015, 17:01
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Во что нашёл - http://doomwiki.org/wiki/Doom_utilities сорцы какких-то утилит для Дума. Там кстати используется пакер lzss, но пока не разбирался что там за проги и за что отвечают. Завтра попробую собрать exe файлы. Вроде бы wadlink режет вады на лумпы, а lumpy их наоборот собирает лумпы в wad. Да только ведь это всё не для 3DO :(


09 мар 2015, 19:50
Аватара пользователя
Приставочник
Приставочник

Группа: Разработчики
Сообщения: 1211
Регистрация: 08 фев 2012, 13:12
Модель 3DO: Panasonic FZ-10 NTSC-J

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


11 мар 2015, 11:54
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

А в 135 файле не должно быть еще надписей Secrets, Finished, Entering? Просто распаковались только Kills и Items.


21 мар 2015, 16:56
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Secrets у меня распаковался и всё, больше там ничего нет (только Kills, Items и Secrets). Finished, Entering наверное по буковкам формируются.
Кусок кода из InMain.c
enum {      /* Intermission shape group */
   KillShape,
   ItemsShape,
   SecretsShape
};

и чуть ниже отдельно
static Byte Finished[] = "Finished";
static Byte Entering[] = "Entering";

Вывод на экран происходит в функции IN_Drawer()
void IN_Drawer(void)
{
   void *IntermisShapes;      /* Cached pointer */
   
   DrawRezShape(0,0,rBACKGRNDBROWN);      /* Load and draw the skulls */
   
   IntermisShapes = LoadAResource(rINTERMIS);      /* Load the intermission shapes */
   PrintBigFontCenter(160,10,mapnames[gamemap-1]);   /* Print the current map name */
   PrintBigFontCenter(160,34,Finished);         /* Print "Finished" */
   if (nextmap != 23) {
      PrintBigFontCenter(160,162,Entering);
      PrintBigFontCenter(160,182,mapnames[nextmap-1]);
   }
   DrawMShape(71,KVALY,GetShapeIndexPtr(IntermisShapes,KillShape));   /* Draw the shapes */
   DrawMShape(65,IVALY,GetShapeIndexPtr(IntermisShapes,ItemsShape));
   DrawMShape(27,SVALY,GetShapeIndexPtr(IntermisShapes,SecretsShape));
           ...

т.е. эти надписи выводятся разными способами.


21 мар 2015, 19:50
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

Да, secrets присутствует, его я проглядел. Спасибо за инфу, теперь все понятно.


21 мар 2015, 20:12
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Как дела с конвертером карт? Получилось?


31 мар 2015, 13:03
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Да застрял я на последнем лумпе. Не знаю как там найти одинаковые последовательности и удалить дубли.


31 мар 2015, 14:55
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Запости сюда проблему, может помогу чем.


31 мар 2015, 15:24
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Нуу.. в оригинальном ваде идут такие байты-оффсеты:
03 42 03 44 03 46 03 48 03 4A 03 4C 03 4E 03 50
03 52 03 54 03 56 03 58 03 5A 03 5C 03 5E 03 60
03 62 03 64 03 66 03 68 03 6A 03 6C 03 6E 03 70
03 72 03 74 03 76 03 78

т.е. цифры с шагом 2 (342, 344, 346), а на 3DO
0D 00 0D 00 0D 00 0D 00 0D 00
0D 00 0D 00 0D 00 0D 00 0D 00 0D
00 0D 00 0D 00 0D 00 0D 00 0D 00
0D 00 0D 00 0D 00 0D 00 0D 00 0D
00 0D 00 0D 00 0D 00 0D 00 0D 00
0D 00

имеем одно повторяющееся смещение.
Вся эта канитель ведёт сюда. PC wad:
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF

а на 3DO:
оффсет 0x0D00
00 00 FF FF

т.е. на PC имеем 28 разных смещений на 28 ОДИНАКОВЫХ последовательностей байт, а на 3DO они объединены единым повторяющимся смещением 00 00 0D 00 и единственной цепочкой байт, т.е. нехило так ужали данные. Но как это реализовать я не соображу.


31 мар 2015, 15:46
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast писал(а):
т.е. на PC имеем 28 разных смещений на 28 ОДИНАКОВЫХ последовательностей байт, а на 3DO они объединены единым повторяющимся смещением 00 00 0D 00 и единственной цепочкой байт,

Прочитать в PC WAD последовательность 00 00 FF FF, и посчитать сколько их. Там, где эти последовательности заканчиваются, пойдет другой алгоритм. То есть, мы просто игнорируем эти повторы. Я правильно понял?


31 мар 2015, 16:40
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Да не игнорируем, просто 28 раз переходим на оффсет 0D00 и в итоге получаем длинную цепочку. Но в файле она хранится один раз. Как-то так. Ну хорошо, посчитаю я количество 00FF, а как быть с остальными повторами? Они могут быть какими угодно. Нужно как-то найти все такие повторы и заменить одним. В общем, нужно делать фунцию поиска в массиве, а я в этом не силён(


31 мар 2015, 17:58
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Как я понял, нужно сделать чтение лумпа и его анализ на наличие повторений подобного формата. То есть, читаем по 4 байта запоминаем каждую последовательность в массив, сравниваем последующие 4 байта с каждым элементом массива. Если повтор, то берем на заметку. Если не повтор, просто читаем дальше. Как-то так. Посмотрю подобные функции, может напишу чего. А там уж вкорячишь код в свою прогу.


31 мар 2015, 19:16
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

Похоже, я изначально неправильно понял задачу. У нас есть группа байт, которые указывают на другие байты далее в файле. То есть, группа байт

03 42 03 44 03 46 03 48 03 4A 03 4C 03 4E 03 50
03 52 03 54 03 56 03 58 03 5A 03 5C 03 5E 03 60
03 62 03 64 03 66 03 68 03 6A 03 6C 03 6E 03 70
03 72 03 74 03 76 03 78


указывает на

00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF


Если читать в строку, то это будет примерно так:
03 42 -> 00 00 FF FF в одном месте
03 44 -> 00 00 FF FF уже в другом месте


В 3DO же, картина следующая:
группа байт

0D 00 0D 00 0D 00 0D 00 0D 00
0D 00 0D 00 0D 00 0D 00 0D 00 0D
00 0D 00 0D 00 0D 00 0D 00 0D 00
0D 00 0D 00 0D 00 0D 00 0D 00 0D
00 0D 00 0D 00 0D 00 0D 00 0D 00
0D 00


указывает на
00 00 FF FF

находящимся в одном месте. То есть, если в строку читать, то получится:
0D00 -> 00 00 FF FF     в одном месте
0D00 -> 00 00 FF FF    В ТОМ ЖЕ месте


Я правильно понял?


08 май 2015, 10:56
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Ну да, всё так. Ну и не знаю важно это или нет. 0342 на PC указывает на оффсет 0684 в этом же файле, т.е. 0342 * 2. А вот 00D0 на 3DO уже будет указывать на офсет 00D0 в этом файле без всяких умножений на 2.

Последний раз редактировалось aliast 08 май 2015, 11:28, всего редактировалось 2 раз(а).



08 май 2015, 11:20
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

Отлично, в голове уложилось. Теперь буду пробовать. Правда, с налету на "сях" не получилось что-то годное сваять. Не страшно, если ответ на "дельфях" будет?


08 май 2015, 11:23
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Versus писал(а):
не страшно, если ответ на "дельфях" будет?

Да поди нет. Я хоть Делфи и не знаю, но поди уж разберусь с алгоритмом.


08 май 2015, 11:24
Аватара пользователя
Приставочник
Приставочник

Группа: Разработчики
Сообщения: 1211
Регистрация: 08 фев 2012, 13:12
Модель 3DO: Panasonic FZ-10 NTSC-J

Здорово, что работа продвигается! Мне не понятно одно, зачемы было так старательно ужимать и обрезать данные везде, где это возможно. Неужели потом восстановление данных не добавило тормозов в работе игры? Что они пытались выиграть? Уменьшить нагрузку на сидюк? У них компакт диск с игрой можно сказать пустой.


08 май 2015, 12:39
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

Author
Хрен его знает... Единственное, что приходит на ум, так это уменьшение загружаемых с диска данных в процессе игры. Там музыка постоянно долбит диск, а когда приходится подгружать уровень, он иногда заходится в приступах. Но все равно, считаю, что такое ужатие данных ни к чему.

Добавлено спустя 1 минуту 54 секунды:
Кстати, спросил у Ребекки на счет добавки наших экспортированных данных из REZFILE, заинтересовалась. Отправил архив ей. Вроде, должна обновить соответствующий раздел на github-е.


08 май 2015, 12:47
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Ещё раз что нужно сделать. Есть последовательность байт между 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.


08 май 2015, 15:10
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast писал(а):
Наша задача найти одинаковые цепочки и удалить их все, кроме самой первой.

Правильно ли это? Не окажется, что мы грохнем цепочки, которые к этому не относятся? Дурацкий вопрос, но не знаю, как лучше сформулировать.

Добавлено спустя 1 минуту 43 секунды:
aliast писал(а):
кроме самой первой

Это вот эта?


Добавлено спустя 18 минут 33 секунды:
aliast писал(а):
потом заменить все ссылки на неё в начале файла одним оффсетом к первой найденной цепочке.

Вот это не совсем понял. Можешь выложить 2 куска (PC и 3DO) и показать, что на что указывает?

Такой вопрос задаю, потому что нужно знать, вычислять ли значения некоторых байт по получившейся цепочке байт или нет. Вот это не совсем понял.


08 май 2015, 15:26
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

PC Изображение 3DO Изображение
Синяя цепочка на скрине 3DO занимает три строчки. Также можете сравнить одну и ту же цепочку на PC, оффсет 0x6F0 и выделенная синим цветом на 3DO (от 0x0D08 до 0x0D28)


08 май 2015, 16:19
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Спасибо, посижу на досуге, подумаю.


08 май 2015, 16:27
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Блин, я забыл или никогда не знал что означает префикс 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 или так:
DoomRezPacker.exe число_файлов_для_запаковки имя_Думреза
. Например, так:
 DoomRezPacker.exe 480 Rezfile

Если запаковать прогой оригинальные распакованные файлы и сравнить с оригиналом Rezfile то будет около 50 отличий. Это из-за непонятного флага 0x80 (см. мой пост выше), но игре на этот флаг как будто бы плевать :nez-nayu:
Изменять карты и перепаковывать пока не пробовал.
По поводу моего конвертера карт с недоделанным конвертом последнего лумпа. Там на выходе получаются файлы lump01, lump02... их нужно как-то переименовать в Dxxxx. Как это лучше сделать я сейчас думаю.


09 май 2015, 17:24
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

Вах, какой праздник! Сейчас это осознать нет возможности, подробно почитаю потом. :ya_hoo_oo:


10 май 2015, 01:00
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast
Пишет, что не является приложением Win32... :-(


11 май 2015, 13:27
Аватара пользователя
Специалист
Специалист

Группа: Разработчики
Сообщения: 1298
Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет

Может антивирусник режет? Должно быть всё ок, в проекте стоит win32 и запускается на Win64. В Win32 не пробовал.


11 май 2015, 13:36
Аватара пользователя
Я консольный бог
Я консольный бог

Группа: Разработчики
Сообщения: 9841
Регистрация: 04 дек 2009, 11:59
Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U

aliast писал(а):
Может антивирусник режет?

Антивирь выгрузил, та же фигня. С предыдущей твоей прогой также было. :du_ma_et:


11 май 2015, 13:38
На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13, 14 ... 47  След.
© 2008-2024 «3DOPLANET.ru». Создано на основе phpBB® Forum Software © phpBB Group
Designed by ST Software || Русская поддержка phpBB || Time : 0.063s | 20 Queries | GZIP : On