WPL
#21
Отправлено 23 February 2009 - 18:27
#22
Отправлено 23 February 2009 - 19:00
Просканировав все WPL файлы (у меня такая спецальня программа есть) ПК версии, получаем следующие.
Заголовок WPL файла можно представить таким образом:
Где secX это число элементов в секции. Щас если еще немного подождёте смогу представить примерные размеры элементов в каждой из существующих секций.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;
Сообщение отредактировал GooD-NTS: 23 February 2009 - 19:02
RAGE research project, public side: OpenIV (Журнал изменений • План развития) | openFormats
#23
Отправлено 23 February 2009 - 19:07
#24
Отправлено 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 файлы и их заголовок.
Надеюсь, все это вам поможет как-то разобраться с этими файлами... потому что в будущем как я понимаю, их придется визуализировать (для редактора карт, например
Секция интересная, стручок поймешь что содержит. Элементы размером в 132 байта. Каждый элементы начинается с числа (DWORD, 4 байта) потом идет строка неизвестного размера (её можно прочитать тупо до первого нулевого “0” символа). Дальше непонятно либо это данные, либо это просто мусор из буффура для строки.посмотри 16ю секцию пожалуйста!
П.С: Если надо архив WPL.rar содержащий все wpl из игры весит 2,85 MB (2 995 451 bytes)
Прикрепленные файлы
RAGE research project, public side: OpenIV (Журнал изменений • План развития) | openFormats
#25
Отправлено 23 February 2009 - 21:32
только как ты узнал что строка длинной в 68 байт?
в структуре 16й секции последние 32 байта это 8 значений типа float, походу какие-то координаты
и еще перед ними 1 значение - какое-то целое
в итоге пока из этих 132 байтов точно знаем первые 4 и 36 последних)
ну если кто-то бы написал было бы круто, моих знаний явно маловато будет чтобы его написатьпотому что в будущем как я понимаю, их придется визуализировать (для редактора карт, например).
#26
Отправлено 23 February 2009 - 21:53
А это я на абум написалтолько как ты узнал что строка длинной в 68 байт?
Как вариант, то что между ними это все строка...в итоге пока из этих 132 байтов точно знаем первые 4 и 36 последних)
RAGE research project, public side: OpenIV (Журнал изменений • План развития) | openFormats
#27
Отправлено 24 February 2009 - 12:11
Они как-то из моделей извлечены, я же использую готовую таблицу hashtbl. Для того чтобы увидеть настоящее название модели, щелкни по объекту правой кнопкой мыши и нажми "информация о модели".Dageron, в твоей программе нет имён моделей. Полазив в хексе я не нашёл названия ни одной модели, они шифрованы, как и названия объектов в rpf?
Редактирование "прямо в ячейке" не будет точно т.к. я задумал немного по-другому и придется переписывать большинсво основных процедур. Если все будет нормально (надеюсь на это), то можно будет редактировать любой файл в таком же виде как это было во всех предыдущих GTA (т.е. через блокнот как старые IPL). Функция экспорта уже есть, сейчас занимаюсь импортом.Можно бы добавить ещё 1 столбец и там имя модели будет отображаться. Так же неудобно редактировать, можешь сделать по экселю, чтоб выбрал ячейку и сразу же редактируешь?
Seeman
Спасибо, я давно искал как запятые на точки поменять))SysUtils.DecimalSeparator установи в '.', чтобы дробные числа показывались с точкой
Таблица уже есть готовая, в ней какраз-таки с минусами все. По идее можно сделать и отображение в LongWord, но в любом случае опорным материалом является та таблица.Для Model Hash должно использоваться 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
#28
Отправлено 24 February 2009 - 12:43
попробуй в начале добавить слэш ('\hashes.txt')При команде assignfile(file, 'hashes.txt') выдает ошибку что файл не найден.
Я обычно использую такую функцию:
function sGlobalExePath: string; begin Result := ExtractFileDir(ParamStr(0)) + '\'; end;
и потом assignfile(file, sGlobalExePath+'hashes.txt')
и ребята, пока разбираете формат WPL, не забывайте обновлять статью в вики, в обсуждении которой мы собственно и находимся
#29
Отправлено 24 February 2009 - 13:07
#30
Отправлено 24 February 2009 - 14:24
пока что нет, хочется самому пописать) а то так не интересно)Я тоже к себе добавил отображение числа содержимого секций. Нужны мои исходники? По идее лучше сделать одну, но многофункциональную программу.
Полнорабочий вариант со всеми функциями просмотра/редактирования есть для основной секции, хотелось бы добавить хотя бы просмотр остальных. Как я понял, сложная из них только 16-я (если считать от нуля то 15-я)?
#31
Отправлено 24 February 2009 - 14:54
вы бы лучше сделали так: один бы писал оболочку (интерфейс) (EXE), другой модули для работы с отдельными секциями WPL в виде DLL.
#32
Отправлено 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
#33
Отправлено 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
Отправлено 24 February 2009 - 17:37
#35
Отправлено 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
#36
Отправлено 25 February 2009 - 12:48
#37
Отправлено 27 February 2009 - 19:29
Но есть одно "но" - 15 секция этих файлов. В XENON-е там вообще байты другие (не расположены по-другому, а именно другие). Сначала надо протестить как игра вообще будет без этой секции работать если в файлах где она есть просто удалить кусок.
так там все нормально, целые и флоты расположены задом на перед, строка в прямом порядке
немного посмотрев икспл файлы, увидел, что кроме порядка байт, ихняя структура ничем не отличается от впл
#38
Отправлено 01 March 2009 - 15:37
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
#39
Отправлено 01 March 2009 - 15:58
#40
Отправлено 25 April 2009 - 16:19
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных

















