Моддинг ChinatownWars
#2
Отправлено 06 August 2010 - 05:24
GAME.PAK пока что особо не смотрел. Можно навскидку сказать, что там находятся шрифты, много других текстур и неизвестных сжатых данных.
ROM.WAD содержит файлы, выровненные на 2048 байт. Кроме того еще есть ROM.TOC, содержащий таблицу данных для ROM.WAD.
Структура ROM.TOC достаточно проста:
typedef struct item{ DWORD dwUnknown; //вероятнее всего хеш имени DWORD dwItemPtr; //указатель на объект DWORD dwItemSize; //размер объекта }; struct ctwTOC{ item m_item[(FileSize())/sizeof(item)]; }m_ctwTOC;По этой таблице можно извлечь все данные из ROM.WAD. Например, тексты gxt. Формат новый (имеет сигнатуру "DS_GXT"), никаких блоков TKEY и TDAT там нет. Каждый gxt-файл - отдельная секция, представляющая простые unicode-строки, идущие по порядку (null-terminated). Что, собственно, в этом всем хорошего - так это достаточно простая "табличная" упаковка ROM.WAD. Теперь совсем не обязательно беспокоиться о размере файлов и стараться уложиться в текущий сектор 2048 байт. Достаточно просто изменить размер файла и пересчитать все указатели в ROM.TOC. Единственный нюанс - имена файлов отсутствуют, есть только хеши.
Собственно, интересна кому-нибудь дальнейшая распаковка ресурсов? (с целью локализации или модифицирования)
#5
Отправлено 06 August 2010 - 17:41
Very nice that you are interested. Probably I will publish some more file formats documentation (or some not-researched files from the game) - it will be very nice if somebody will also research them (or try to research). Currentrly I am working on text decoding (and texteres are the next step). So, I think that it is hard for you to read Russian form, should I stick on English in my messages?
lupus
А ты смотрел файлы для Apple-устройств и DS? Формат графики там точно другой.
Пока что разобрал новый формат gxt с сигнатурой "DS_GXT" (видимо был придумал специально для DS, а потом использован на PSP). Как оказалось, там используются не null-terminated strings, а чуть более сложная система со специальными полями, в которых задается количество строк в файле и количество символов в каждой строке (символ занимает два байта - это unicode).
Теперь можно собрать программку, которая извлекала бы все тексты в обычный *.txt-формат (минуя *.ds_gxt) и собирала обратно.
#7
Отправлено 06 August 2010 - 21:06
Archive: GTA_ CTW 1.1.0.ipa Length Date Time Name ------ ---- ---- ---- 0 03-28-110 23:11 Payload/ 0 03-28-110 23:10 Payload/RslP1.app/ 0 03-22-110 16:56 Payload/RslP1.app/_CodeSignature/ 5093 03-28-110 23:10 Payload/RslP1.app/_CodeSignature/CodeResources 256133 03-22-110 16:48 Payload/RslP1.app/airport_dry.caf 260529 03-22-110 16:48 Payload/RslP1.app/airport_wet.caf 8671321 03-22-110 16:48 Payload/RslP1.app/Anvil.caf 27531 03-22-110 16:48 Payload/RslP1.app/Busted.caf 319188 03-22-110 16:48 Payload/RslP1.app/chan_tune_4096.caf 6409317 03-22-110 16:48 Payload/RslP1.app/Chinese.caf 291311 03-22-110 16:48 Payload/RslP1.app/City_LongLoop8bit.caf 294962 03-22-110 16:48 Payload/RslP1.app/City_LongLoop8bit_WithRain.caf 1366 03-22-110 16:48 Payload/RslP1.app/close.png 1189 03-22-110 16:48 Payload/RslP1.app/closeHi.png 28 03-28-110 23:10 Payload/RslP1.app/CodeResources 10118172 03-22-110 16:48 Payload/RslP1.app/CTW_iPhone_intro.mp4 8193352 03-22-110 16:48 Payload/RslP1.app/CTW_iPhone_outro.mp4 0 03-22-110 16:48 Payload/RslP1.app/de.lproj/ 38644 03-22-110 16:48 Payload/RslP1.app/de.lproj/Default.png 180 03-22-110 16:48 Payload/RslP1.app/de.lproj/Localizable.strings 7391494 03-22-110 16:48 Payload/RslP1.app/DFA.caf 241223 03-22-110 16:48 Payload/RslP1.app/Dragon_loop.caf 0 03-22-110 16:48 Payload/RslP1.app/en.lproj/ 34533 03-22-110 16:48 Payload/RslP1.app/en.lproj/Default.png 101 03-22-110 16:48 Payload/RslP1.app/en.lproj/Localizable.strings 62 03-22-110 16:48 Payload/RslP1.app/entitlements.plist 0 03-22-110 16:48 Payload/RslP1.app/es.lproj/ 36195 03-22-110 16:48 Payload/RslP1.app/es.lproj/Default.png 198 03-22-110 16:48 Payload/RslP1.app/es.lproj/Localizable.strings 94370 03-22-110 16:48 Payload/RslP1.app/Flatliner_4096.caf 0 03-22-110 16:48 Payload/RslP1.app/fr.lproj/ 37672 03-22-110 16:48 Payload/RslP1.app/fr.lproj/Default.png 174 03-22-110 16:48 Payload/RslP1.app/fr.lproj/Localizable.strings 523169906 03-22-110 16:49 Payload/RslP1.app/game.pak 244622 03-22-110 16:48 Payload/RslP1.app/Heston_tune_4096.caf 319271 03-22-110 16:48 Payload/RslP1.app/Hsin_tune_4096.caf 9082 03-22-110 16:48 Payload/RslP1.app/icon.png 814 03-22-110 16:48 Payload/RslP1.app/Info.plist 1934800 03-22-110 16:48 Payload/RslP1.app/INTRO1.caf 640101 03-22-110 16:48 Payload/RslP1.app/INTRO2.caf 0 03-22-110 16:48 Payload/RslP1.app/it.lproj/ 35565 03-22-110 16:48 Payload/RslP1.app/it.lproj/Default.png 171 03-22-110 16:48 Payload/RslP1.app/it.lproj/Localizable.strings 270010 03-22-110 16:48 Payload/RslP1.app/Kenny_tune_4096.caf 7654617 03-22-110 16:48 Payload/RslP1.app/Khalil.caf 242085 03-22-110 16:48 Payload/RslP1.app/Leerock_tune_4096.caf 1192 03-22-110 16:48 Payload/RslP1.app/MainWindow.nib 63917 03-22-110 16:48 Payload/RslP1.app/MissionComplete_16k.caf 8 03-22-110 16:48 Payload/RslP1.app/PkgInfo 7006303 03-22-110 16:48 Payload/RslP1.app/Radio1.caf 5087114 03-22-110 16:48 Payload/RslP1.app/Radio2.caf 4598166 03-22-110 16:48 Payload/RslP1.app/Radio3.caf 8517228 03-22-110 16:48 Payload/RslP1.app/Radio4.caf 7584816 03-22-110 16:48 Payload/RslP1.app/Radio5.caf 250 03-28-110 23:10 Payload/RslP1.app/ResourceRules.plist 34692 03-22-110 16:48 Payload/RslP1.app/ROM.TOC 61811200 03-22-110 16:49 Payload/RslP1.app/ROM.WAD 5688384 03-22-110 16:56 Payload/RslP1.app/RslP1 253482 03-22-110 16:48 Payload/RslP1.app/Rudy_tune_4096.caf 0 03-28-110 23:10 Payload/RslP1.app/SC_Info/ 42372 03-28-110 23:11 Payload/RslP1.app/SC_Info/RslP1.supp 17910 03-22-110 16:48 Payload/RslP1.app/SILENCE.caf 64008 03-22-110 16:48 Payload/RslP1.app/sinking_car.caf 8333669 03-22-110 16:48 Payload/RslP1.app/Tortoise.caf 30423 03-22-110 16:48 Payload/RslP1.app/Wasted.caf 312766 03-22-110 16:48 Payload/RslP1.app/Water_LongLoop8bit.caf 7630288 03-22-110 16:48 Payload/RslP1.app/Wonderwheel.caf 244775 03-22-110 16:48 Payload/RslP1.app/Xin_tune_4096.caf 233294 03-22-110 16:48 Payload/RslP1.app/Zhou_tune_4096.caf 2815 07-16-10 21:11 iTunesMetadata.plist 1032 07-16-10 21:11 Payload/RslP1.app/SC_Info/RslP1.sinf 81996 07-16-10 21:11 iTunesArtwork ------ ------- 694887482 72 files
Сообщение отредактировал listener: 06 August 2010 - 21:08
#9
Отправлено 07 August 2010 - 09:19
Arvis
Well, hope that you can understand Russian a bit. Probably I will publish some info in English, but currently it can be useless because I can not see so much gamers from different countries who are interested in console GTA researching. By the way, what version of the game do you have?
#12
Отправлено 07 August 2010 - 16:06
#13
Отправлено 07 August 2010 - 17:20
#14
Отправлено 08 August 2010 - 16:21
Скриншот того, что удалось-таки разобрать/извлечь:
Файлы с текстом *.ds_gxt на данном этапе определяются за счет проверки сигнатуры. В их внутренней структуре, как оказалось, разработчики отказались от использования тегов вообще. Вместо это теперь используются байты-определители и их очень много. Например, $FF12 значит ~y~, а $FF09 - ~b~. Есть байты, которые определяют цвета и кнопки - в общем, все то, что в старых частях определялось именно тегом.
Неплохо бы на каких-нибудь других форумах рассказать про всю идею разбора ресурсов CTW и локализации...
Arvis
If you want to help, please, can you stick on "common" *.pak researching? I mean file table structure and/or dictionary structure (if it exists). I want to stick on *.wad/*.toc and so it will be very nice if somebody works on *.pak. So, I worked on CTW *.ds_gxt file format and can say, that R* invented some more rather interesting things like binary tags (for example, tag ~y~ now has $FF12 binary code).
#15
Отправлено 08 August 2010 - 16:56
#16
Отправлено 08 August 2010 - 17:11
#17
Отправлено 08 August 2010 - 20:06
The float is at offset 4h, but it also has value in int, so no idea which one means anything.
I'm interested in understanding process how do you find the data you need, learn formats and such
I read some parts of documentation, but I kinda doubt that kind of stuff is covered
And zlib is a black image for me I guess
So let me show something from what I checked to build basic template
struct FILE { struct HEADER { short unknownnumber; //same for both pak files char K; //same ^ char P; //same ^ float unknownfloat; //not same } header; } file;No idea what I've found, and how to make use of it
I'm just confused
and just checked your structure in rom.toc
DWORD dwUnknown; //вероятнее всего хеш имени
^So how did you find that this is the hash name? It's values in data inspector don't seem to tell anything
DWORD dwItemPtr; //указатель на объект
DWORD dwItemSize; //размер объекта
^same with these values, how to find out what they actually mean?
Сообщение отредактировал Arvis: 08 August 2010 - 20:13
#18
Отправлено 09 August 2010 - 08:03
Ответить
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных