Перейти к содержимому


Фотография
* * * * * 2 Голосов

WPL


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 40

#21 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 23 February 2009 - 18:27

ну логично подумай если бы бронкс был слева не уж то разработчики засунули бы в папку east)))

#22 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 23 February 2009 - 19:00

Решил не на долго отвлечься от написания скриптового декомпилятора (голова-отрывающий код приходится писать) немного посмотрел, что здесь с WPL.

Просканировав все WPL файлы (у меня такая спецальня программа есть) ПК версии, получаем следующие.
Заголовок WPL файла можно представить таким образом:

TWPLHeader = record
version: DWORD; // всегда равно 3

sec0: DWORD;
sec1: DWORD; // нет не в одном файле
sec2: DWORD;
sec3: DWORD;

sec4: DWORD;
sec5: DWORD; // нет не в одном файле
sec6: DWORD; // нет не в одном файле
sec7: DWORD; // нет не в одном файле

sec8: DWORD;
sec9: DWORD;
sec10: DWORD;
sec11: DWORD; // нет не в одном файле

sec12: DWORD; // нет не в одном файле
sec13: DWORD; // нет не в одном файле
sec14: DWORD; // нет не в одном файле
sec15: DWORD;
end;

Где secX это число элементов в секции. Щас если еще немного подождёте смогу представить примерные размеры элементов в каждой из существующих секций.

Сообщение отредактировал GooD-NTS: 23 February 2009 - 19:02

Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#23 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 23 February 2009 - 19:07

посмотри 16ю секцию пожалуйста!

#24 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 23 February 2009 - 20:26

Значит так, что получилось.
Вот заголовок с новыми комментариями.

TWPL = record
version: DWORD; // Всегда равно 3

sec0: DWORD;
sec1: DWORD; // нет не в одном файле
sec2: DWORD;
sec3: DWORD; // stream (только в файлах *_stream*.wpl)

sec4: DWORD;
sec5: DWORD; // нет не в одном файле
sec6: DWORD; // нет не в одном файле
sec7: DWORD; // нет не в одном файле

sec8: DWORD; // strbig (только в файлах *_strbig*.wpl)
sec9: DWORD; // lodcull (только в файлах lodcull_*.wpl)
sec10: DWORD;
sec11: DWORD; // нет не в одном файле

sec12: DWORD; // нет не в одном файле
sec13: DWORD; // нет не в одном файле
sec14: DWORD; // нет не в одном файле
sec15: DWORD;
end;

Остальные секции вроде как-то не отличаются специальными файлами.
По элементам секций и их размером чтобы не мучатся, я создал небольшой шаблон для 010 Editor (если вы досихпор не знаете про этот замечательный hex редактор, то быстрее его качайте). В этом шаблоне вы найдете примерную для элементов некоторых секций. Но я могу и ошибаться с типами данных, это уже надо разбираться более подробно.
Также выкладываю Result.xlsx в этом файле перечислены все wpl файлы и их заголовок.
Надеюсь, все это вам поможет как-то разобраться с этими файлами... потому что в будущем как я понимаю, их придется визуализировать (для редактора карт, например :) ).

посмотри 16ю секцию пожалуйста!

Секция интересная, стручок поймешь что содержит. Элементы размером в 132 байта. Каждый элементы начинается с числа (DWORD, 4 байта) потом идет строка неизвестного размера (её можно прочитать тупо до первого нулевого “0” символа). Дальше непонятно либо это данные, либо это просто мусор из буффура для строки.

П.С: Если надо архив WPL.rar содержащий все wpl из игры весит 2,85 MB (2 995 451 bytes)

Прикрепленные файлы


Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#25 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 23 February 2009 - 21:32

спасибо за помощь)
только как ты узнал что строка длинной в 68 байт?
в структуре 16й секции последние 32 байта это 8 значений типа float, походу какие-то координаты
и еще перед ними 1 значение - какое-то целое

в итоге пока из этих 132 байтов точно знаем первые 4 и 36 последних)

потому что в будущем как я понимаю, их придется визуализировать (для редактора карт, например).

ну если кто-то бы написал было бы круто, моих знаний явно маловато будет чтобы его написать :)

#26 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 23 February 2009 - 21:53

только как ты узнал что строка длинной в 68 байт?

А это я на абум написал :)

в итоге пока из этих 132 байтов точно знаем первые 4 и 36 последних)

Как вариант, то что между ними это все строка...

Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#27 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 24 February 2009 - 12:11

BiDi

Dageron, в твоей программе нет имён моделей. Полазив в хексе я не нашёл названия ни одной модели, они шифрованы, как и названия объектов в rpf?

Они как-то из моделей извлечены, я же использую готовую таблицу hashtbl. Для того чтобы увидеть настоящее название модели, щелкни по объекту правой кнопкой мыши и нажми "информация о модели".

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

Редактирование "прямо в ячейке" не будет точно т.к. я задумал немного по-другому и придется переписывать большинсво основных процедур. Если все будет нормально (надеюсь на это), то можно будет редактировать любой файл в таком же виде как это было во всех предыдущих GTA (т.е. через блокнот как старые IPL). Функция экспорта уже есть, сейчас занимаюсь импортом.

Seeman

SysUtils.DecimalSeparator установи в '.', чтобы дробные числа показывались с точкой

Спасибо, я давно искал как запятые на точки поменять))

Для Model Hash должно использоваться LongWord по идее, чтобы минусы не отображались

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

Chipsman
Я тоже к себе добавил отображение числа содержимого секций. Нужны мои исходники? По идее лучше сделать одну, но многофункциональную программу.
Полнорабочий вариант со всеми функциями просмотра/редактирования есть для основной секции, хотелось бы добавить хотя бы просмотр остальных. Как я понял, сложная из них только 16-я (если считать от нуля то 15-я)?

GooD-NTS
Отличная документация по секциям! Особенно порадовал шаблон для 010, теперь в HEX-e легче гораздо разбираться будет. :)

Возникла проблема с автоматическим открытием файла хешей (вернее она была с самого начала, просто сейчас ее необходимо исправить).
Имеется file:TextFile;
Текстовый файл hashes.txt лежит в корневой директории программы.
При команде assignfile(file, 'hashes.txt') выдает ошибку что файл не найден.
Самое главное что если я меняю это на assignfile(file, 'C:\hashes.txt') и кладу его в корень диска "С" то все работает идеально. Так же идеально работает если прописываю полный путь к директории где лежит она сама и файл нужный.
В чем проблема может быть?

P.S. Просто новый скрин:

Прикрепленные файлы


Сообщение отредактировал Dageron: 24 February 2009 - 12:12

в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#28 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 24 February 2009 - 12:43

При команде assignfile(file, 'hashes.txt') выдает ошибку что файл не найден.

попробуй в начале добавить слэш ('\hashes.txt')

Я обычно использую такую функцию:

function sGlobalExePath: string;
begin
  Result := ExtractFileDir(ParamStr(0)) + '\';
end;

и потом assignfile(file, sGlobalExePath+'hashes.txt')

и ребята, пока разбираете формат WPL, не забывайте обновлять статью в вики, в обсуждении которой мы собственно и находимся ;)

#29 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 24 February 2009 - 13:07

Спасибо за процедуру, работает великолепно. P.S. Добавил в статью немного информации
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#30 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 24 February 2009 - 14:24

Я тоже к себе добавил отображение числа содержимого секций. Нужны мои исходники? По идее лучше сделать одну, но многофункциональную программу.
Полнорабочий вариант со всеми функциями просмотра/редактирования есть для основной секции, хотелось бы добавить хотя бы просмотр остальных. Как я понял, сложная из них только 16-я (если считать от нуля то 15-я)?

пока что нет, хочется самому пописать) а то так не интересно)

#31 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 24 February 2009 - 14:54

Dageron, Chipsman

вы бы лучше сделали так: один бы писал оболочку (интерфейс) (EXE), другой модули для работы с отдельными секциями WPL в виде DLL.

#32 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 24 February 2009 - 16:58

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

Вот что уже готово нового:
Секция №2 - просмотр, копирование данных, редактирование.
Секция №4 - только просмотр, делаю все остальное. (кстати, в ней оказалось 11 блоков, а не 12 как в основной секции и №2).
(отсчет с нуля, т.е. основная секция у меня имеет номер нуль).

В шаблон я внес небольшую правку:

Вместо
typedef struct {
byte value[44];
} TElement2;


надо

typedef struct {
FLOAT fUnk0;
FLOAT fUnk1;
FLOAT fUnk2;
FLOAT fUnk3;
FLOAT fUnk4;
FLOAT fUnk5;
FLOAT fUnk6;
FLOAT fUnk7;
DWORD dwUnk1;
DWORD dwUnk2;
DWORD dwUnk3;
DWORD dwUnk2;
} TElement2;


Просто если в 010 открывать с этим шаблоном файлы, имеющие вторую секцию то вся подцветка сместится неправильно.

P.S. GooD, можешь выложить тот архив со всеми WPL? :)

Сообщение отредактировал Dageron: 24 February 2009 - 17:18

в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#33 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 24 February 2009 - 17:31

Просто если в 010 открывать с этим шаблоном файлы, имеющие вторую секцию то вся подцветка сместится неправильно.

Это потому что это:
typedef struct {
byte value[44]; 
} TElement2;
не равно по размеру этому:
typedef struct {
FLOAT fUnk0;
FLOAT fUnk1;
FLOAT fUnk2;
FLOAT fUnk3;
FLOAT fUnk4;
FLOAT fUnk5;
FLOAT fUnk6;
FLOAT fUnk7;
DWORD dwUnk1;
DWORD dwUnk2;
DWORD dwUnk3;
DWORD dwUnk2;
} TElement2;
А это значит что либо в первом, либо во втором случае размер элемента секции неправильный.

P.S. GooD, можешь выложить тот архив со всеми WPL?

Могу. Вот.

Сообщение отредактировал GooD-NTS: 24 February 2009 - 17:33

Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#34 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 24 February 2009 - 17:37

16я секция какая-то совсем хитрая, я уже думал что ее разобрал, но нашел файл на котором прога выдает ерору)

#35 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 25 February 2009 - 10:44

Спасибо за архив)

А это значит что либо в первом, либо во втором случае размер элемента секции неправильный


В том-то и дело, что расцветка смещается в старом случае. На самом деле размер элемента секции равен не 44 байтам, а 48.
Попробуй открыть, к примеру, brook_s3.wpl с запущенным шаблоном. Там в во второй секции два блока, и если посмотреть в конец файла то какраз-таки на 8 байт и "недоподцвечивается". Если заменить на тот кусок который я в предыдущем посте выкладывал или на
typedef struct {
byte value[4[b]8[/b]]; 
} TElement2;
то все норм становится)


Примерная структура для девятой секции:
typedef struct { 
 FLOAT zn;
 FLOAT zn2;
 FLOAT zn3;
 FLOAT zn4; 
 FLOAT zn5; 
 FLOAT zn6; 
 int zn7; 
 int zn8;
 int zn9; 
 int zn10; 
 int zn11; 
 int zn12;
 int zn13;  
 int zn14; 
 int zn15;
 int zn16; 
 int zn17;  
 char text1[32];  
 char text2[32];  
 char text3[32];  
 char text4[32];  
 char text5[32];  
 char text6[32];  
 char text7[32];  
 char text8[32];  
 char text9[32];  
 char text10[32];  
} TElement9;

Сообщение отредактировал Dageron: 25 February 2009 - 12:38

в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#36 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 25 February 2009 - 12:48

я вродибы разобрал все секции) позже напишу их всех кстати zn8 - zn17 это хеши моделей text1 - text10

#37 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 27 February 2009 - 19:29

Но есть одно "но" - 15 секция этих файлов. В XENON-е там вообще байты другие (не расположены по-другому, а именно другие). Сначала надо протестить как игра вообще будет без этой секции работать если в файлах где она есть просто удалить кусок.


так там все нормально, целые и флоты расположены задом на перед, строка в прямом порядке


немного посмотрев икспл файлы, увидел, что кроме порядка байт, ихняя структура ничем не отличается от впл

#38 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 01 March 2009 - 15:37

Вот моя структура секции8 (strbig):

16 байт - название модели
 4 байта Int
 4 байта Int
 4 байта Float
 4 байта Float
 4 байта Float
 4 байта Float {очевидно, координата X}
 4 байта Float {очевидно, координата Y}
 4 байта Float {очевидно, координата Z}
 4 байта Float
 4 байта Float
 4 байта Float
 4 байта Float


в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#39 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 01 March 2009 - 15:58

а следующие 4 после координат это повороты в виде кватериона

#40 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 25 April 2009 - 16:19

обновил статью в вики, описал все, что на данный момент мне известно (ну или почти все)




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных