|
|
|
|
|
Профиль : |
|
Это вы про трансклюжн ?
Ну так они его уже один раз делали Как в том анекдоте:
- (мечтательно) хотел бы я её ещё раз... - а ты что уже ... ? - нет, я её уже один раз хотел
Буквально вчера был на страницах Трансклюжен-Трансклюжен 2-ребилд - все проекты заморожены. Да и вообще ребята по моему погорячились взяв за основу ку1 (трансклюжн)-ку2(трансклюжн 2). Надо же сохранить оригинальный вид, не очень уверен что без должно профессионализма и только на голом энтузиазме удасться создать качественные 3д модели. Подобное уже проходили на римейках дума в 3д - модели хоть и в полном 3д смотрятся гораздо хуже оригинальных спрайтов.
Или речь о чем то другом ?
----- Shine on you crazy diamond WBR jm ( aka x-ray aka ведьМЫШ ) http://vedmysh.livejournal.com |
|
Всего записей: 528 : Дата рег-ции: Март 2005 : Отправлено: 20 Марта, 2005 - 13:53:45 |
|
|
|
|
Профиль : |
|
Начал ковырять формат. Большая часть ковыряния базируются на email'е Matt'а и исходникам утилит rebuild'а. Есть и мои мысли и исправления. Так что это не один в один blud2b
Числа начинающиеся с 0x подразумевают шестнадцатеричное представление.
Итак, описание заголовка:
4 байта - magic ( unsigned int ) - всегда должно быть равно 0x1a4d4c42 или в строковом представлении BLM\0x1a ( последний код это стрелка) 2 байта - версия ( unsigned short ) - для моего Blood 1.10 равно 0x700 - старший байт означает версию ( 7 в моему случае ), младший саб версию. Версия 7 закриптована, версия 6.03 нет судя по описанию на blood.sourceforge.net
Далее идет закриптованный блок информации. Криптуется банально - побайтово xor'ится с ключем. Ключ один байт. На каждый новый байт информации ключ инкрементируется. Для этого блока ключ 0x4d
4 байта - x координата старта игрока ( int ) 4 байта - y координата старта игрока ( int ) 4 байта - z координата старта игрока ( int ) 2 байта - угол игрока ( short ) - значение от 0 до 2048 на сколько я понял 2 байта - сектор в котором начинает игрок (?) ( short )
Далее идет информация, которая не описана на rebuild. Ключ все тот же. Возможно размерности и отличаются (то есть не 2 байта, 4 байта, 4 байта а например 2, 2, 2 и 4) однако визуально очень похоже что не ошибаюсь...
2 байта - неизвестно (unsigned short) содержит обычно очень небольшие значения - карты криптик пассэйджа и многие стандартные обычно содержат значение 4, а некоторые ноль.
4 байта - неизвестно (unsigned int) очень часто содержит значение 800, 768, либо все тот же ноль.
4 байта - неизвестно (unsigned int) а вот это ну очень интересно Я не знаю, что это - в стандартных картах оно поголовно сброшено в ноль, а вот в картах что произвел на свет mapedit из комплекта оно заполнено и равно 0x7474614d Это ключ для дальнейшей декриптовки, судя по описаниям с rebuild. А ещё это строчка 'Matt' То бишь по сути в качестве ключа используется имя разработчика. Увековечил себя тыкскызыть хлопец
1 байт - неизвестно (unsigned char) не знаю что это, обычно равно двум. Причем и в стандартных уровнях и самодельных.
Идущая далее информация закриптована на другом ключе - 0x68 Описание есть на ребилде ( вернее легко догадаться что это ) 4 байта ( int ) - ревизия карты, меняется постоянно при сохранении я так понимаю. 2 байта - количество секторов на уровне (unsigned short) 2 байта - количество стен на уровне (unsigned short ) 2 байта - количество спрайтов на уровне ( unsigned short )
Если нужно, могу приложить свою утилитку - она выдает информацию по заголовку + сбрасывает в dump.out расшифрованный заголовок чтобы удобнее было изучать
----- Shine on you crazy diamond WBR jm ( aka x-ray aka ведьМЫШ ) http://vedmysh.livejournal.com |
|
Всего записей: 528 : Дата рег-ции: Март 2005 : Отправлено: 11 Апреля, 2005 - 19:55:18 |
|
|
|
|
Профиль : |
|
Вобщем сегодня плотно сел за дизассемблер и mapedit. Нашел и начал реверсировать функцию загрузки/выгрузки карт. По исходному тексту могу сказать следующее:
1. Там, где я по исходникам rebuild утилит разбивал информацию на два блока с разными ключами декриптовки (0x4d и 0x68) этого можно было не делать. На самом деле это всё единая структура размером в 37 байт. Ключ для расшифровки 0x7474614d ( тот самый Matt ) Но поскольку криптование побайтное достаточно использовать лишь 0x4d.
2. В размерностях я не ошибся, то есть те самый неизвестные куски идут именно в такой последовательности - 2 байта, 4 байта, 4 байта и 1 байт. Mapedit (версии 1.10) ВСЕГДА в последние 4 байта пишет строчку 'Matt'.
3. Криптовка применяется как и писал Matt в своем email'е rebuild'овцам только в случае версии >= 0x0700.
4. Опять же по email Matt'а если версия >= 0x0700 то после всей этой информации читается ещё 128 байт. Закриптовано по тому же инкрементальному xor'у на numwalls - количеству стен. Вначале там банальная строка копирайтов. Далее какой то набор информации, пока до него не дошел.
Подведу предварительный итог - заголовок map файла:
* 6 байт - сигнатура (magic) и версия, незакриптовано * 37 байт - информация по карте, закриптовано, xor на инкрементирующемся ключе 0x4d * если версия выше или равна семи 128 байт экстра информации, закриптовано, xor на инкрементирующемся ключе ( ключ - количество стен , полученный из заголовка )
Slava если инетерсно и есть познания в ассемблере, могу выложить куда нибудь откомментированные мною листинги...
----- Shine on you crazy diamond WBR jm ( aka x-ray aka ведьМЫШ ) http://vedmysh.livejournal.com |
|
Всего записей: 528 : Дата рег-ции: Март 2005 : Отправлено: 12 Апреля, 2005 - 08:53:51 |
|
|
|
|
Профиль : |
|
Мне осталось немного...
(Добавление) Ты лучше узнай, что такое moving skies offset. Этот блок идет прямо перед разделами с секторами. Он бывает длиной эээ.. 1 2 16 байт, сейчас точно не помню. В blood2b они просто тупо читают значение и не декриптуя его по условию if переходят на определенный адрес попадая к секторам. На самом деле если декриптовать, то там как раз и будет смещение на которое надо перейти, чтобы попасть на раздел с секторами. Но вот что в этом блоке? Там обычно идут числа 0000 0100 0200 и т.д. по возрастанию максимум до 0F00 т.е. в нормальном представлении от 0 до 15. |
|
Всего записей: 888 : Дата рег-ции: Июнь 2004 : Отправлено: 12 Апреля, 2005 - 17:51:33 |
|
|
|
|
Профиль : |
|
Хах, легко сказать узнай что это. Одно дело когда пытаешь разобрать сериализацию (сохранение) уровня - там почти все навиду. Другое дело реверсировать сам движок. Попробую конечно, но вряд ли что получится - слишком комплексная задача. Смещения для подвижного неба... В принципе по названию можно погадать
Кстати, а ты разобрался со всей информацией ? К примеру почему в экстра блоке ( тот который 128 байт ) после 64 байт копирайтов идет несколько фиксированных значений:
Код: typedef struct { char copyright[64]; // Строка копирайтов unsigned int unk0; // mapedit (1.10) всегда пишет 0x38 unsigned int unk1; // mapedit (1.10) всегда пишет 0x18 unsigned int unk2; // mapedit (1.10) всегда пишет 0x3c
|
Вот что это за 0x38, 0x18, 0x3c ? Что это может быть ? Мне сложно судить.
А вот это в заголовке:
Код: typedef struct { int startx; int starty; int startz; unsigned short startangle; unsigned short sectornum; unsigned short unk0; unsigned int unk1; unsigned int unk2;// mapedit (1.10) всегда пишет значение 0x7474614d (Matt) ! unsigned char unk3; unsigned int revisions; unsigned short numsectors; unsigned short numwalls; unsigned short numsprites; } mapinfo;
|
Что это за unk0, unk1, unk2 и unk3 ? Господа с rebuild эти числа просто игнорировали и поставили в todo. Есть какие либо мысли ? Размерности соотвтетствуют (как я уже говорил я проверил). Мне сложно судить - я мало знаю редактор - так бы взял и методично наворачивая уровень пытался бы сравнивать изменения.
(Отредактировано автором: 12 Апреля, 2005 - 19:07:23)
----- Shine on you crazy diamond WBR jm ( aka x-ray aka ведьМЫШ ) http://vedmysh.livejournal.com |
|
Всего записей: 528 : Дата рег-ции: Март 2005 : Отправлено: 12 Апреля, 2005 - 19:04:16 |
|
|
|