Список форумов .::Russian Blood Community Forum::.
Официальный форум русского сообщества фанатов игры BLOOD
Deep Cold Grave
Официальный сайт издательства ОНО
BloodGame

 

Blood: The Game We Playing In
Editing Center
Структура MAP
[Страниц (6): « 1 2 3 [4] 5 6 » ]

Структура MAP
| Новая тема | Ответить | | Поиск в теме |
| Версия для печати |
jm



Избранный
Откуда: Dark side of the moo ...


Вернуться к началу
Профиль :

Это вы про трансклюжн ? Улыбка

Ну так они его уже один раз делали Подмигивание Как в том анекдоте:

- (мечтательно) хотел бы я её ещё раз...
- а ты что уже ... ?
- нет, я её уже один раз хотел

Буквально вчера был на страницах Трансклюжен-Трансклюжен 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
jm



Избранный
Откуда: Dark side of the moo ...


Вернуться к началу
Профиль :

Начал ковырять формат. Большая часть ковыряния базируются на 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
jm



Избранный
Откуда: Dark side of the moo ...


Вернуться к началу
Профиль :

Вобщем сегодня плотно сел за дизассемблер и 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
Slava



Нирвана
Откуда: MSK

Вернуться к началу
Профиль :

Мне осталось немного...

(Добавление)
Ты лучше узнай, что такое moving skies offset. Этот блок идет прямо перед разделами с секторами. Он бывает длиной эээ.. 1 2 16 байт, сейчас точно не помню. В blood2b они просто тупо читают значение и не декриптуя его по условию if переходят на определенный адрес попадая к секторам. На самом деле если декриптовать, то там как раз и будет смещение на которое надо перейти, чтобы попасть на раздел с секторами. Но вот что в этом блоке? Там обычно идут числа 0000 0100 0200 и т.д. по возрастанию максимум до 0F00 т.е. в нормальном представлении от 0 до 15.

Всего записей: 888 : Дата рег-ции: Июнь 2004 : Отправлено: 12 Апреля, 2005 - 17:51:33
jm



Избранный
Откуда: Dark side of the moo ...


Вернуться к началу
Профиль :

Хах, легко сказать узнай что это. Одно дело когда пытаешь разобрать сериализацию (сохранение) уровня - там почти все навиду. Другое дело реверсировать сам движок. Попробую конечно, но вряд ли что получится - слишком комплексная задача. Смещения для подвижного неба... В принципе по названию можно погадать Подмигивание

Кстати, а ты разобрался со всей информацией ? К примеру почему в экстра блоке ( тот который 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
| Версия для печати |
| Новая тема | Ответить | | Поиск в теме |


Blood: The Game We Playing In
Editing Center
Структура MAP
[Страниц (6): « 1 2 3 [4] 5 6 » ]


Powered by ExBB 1.9.1
Original Style v1.5a2 created by Daemon.XP


Top.Mail.Ru