Мой HEX-редактор 010Editor, да я особой разницы между ними не вижу.. к этому просто привык. Кому интересно в бинарнике Killing Time launchMe нашлась функция, обрабатывающая оффсеты в файлах CARY (только оффсеты! распаковывает какая-то другая функция). Её адрес в IDA Pro sub_E130. Адрес в эмуляторе 0x7E130. Игра загружает ary-файлы по мере необходимости, можно установить взаимосвязь между ary-файлами и уровнем, на котором они используются. Так например розовые стены в начале игры нашлись в 144.ary, там же что-то похожее на пол.
Ну пока не могу сказать что это такое и где встречается) До этого вообще получался набор квадратов-точек, а тут уже что-то похожее на текстуру стены\пола\потолка. Конвертировал руками в HEX-редакторе) Надо писать программу и конвертить все файлы. Тогда можно будет делать выводы. Если надо могу попробовать объяснить структуру файла, но там всё достаточно просто. Единственный вопрос остался. В самом CARY секция PLUT имеет размер 64 байта, а должно быть 68. Я пооткрывал несколько cel-картинок с этой секцией, вроде бы везде первые байты 00 00 00 20. Добавил их, получил осмысленную картинку.Не уверен насколько это правильно и что означает эта цифра...
Всё это очень радует, вот и ещё один замок взломан, добавь информацию по формату в раздел документации, думаю очень пригодится.
Phoenix, насколько я знаю, ты один из разработчиков 3DOResExplorer, может глянешь что там и как?)
Цитата (aliast)
Вроде бы нашлись оранжевые стены из стартовой зоны, так что похоже на правду. Есть подозрение, что не все файлы ARY распаковались правильно, просьба проверить. Тама после буковок CARY + 8 байт идёт (размер файла - 4), распаковщик иногда ошибается и укорачивает файл.
Проверю, а в каких файлах есть подозрения на ошибку?
Сообщение отредактировал Holks - Воскресенье, 02.06.2013, 22:52
Проверю, а в каких файлах есть подозрения на ошибку?
Навскидку в 58.ARY. Байты CARY_hdr + 8 = 00 00 61 B4, а файл обрывается на 1F8Eh 568.ARY - значится С050h, обрывается на BD5Eh 569.ARY - интересный экземпляр. Значится 1774h, имеем 1A6Bh. Честно говоря не пойму что с ним делать.. может я ошибся?)
Phoenix, насколько я знаю, ты один из разработчиков 3DOResExplorer, может глянешь что там и как?)
Да, я его немного доработал, чтобы он не вываливался при открытии видяшек и понимал больше заголовков. Самое ужасное это сохранение видео в BMP, конвертацию в AVI так и не прикрутил Теоретически в паре с ZStream Reader'о и любым видеоредактором можно сконвертить до конца.
Посмотреть в исходники не проблема, только код обработки CEL файлов писал не я. Если что, не тронутые мной исходники можно посмотреть на странице: "http://arts-union.ru/node/20"
Ну или тут именно по работе с CEL
int OpenCel(char *file) { int fsize,hand,tmp,i,j; //////////////////////////////////////////////////// unsigned char *fbuf; unsigned int *fdata; unsigned short *fshd; if( (hand=_rtl_open(file, O_RDONLY))==-1)return 1; fsize=lseek(hand,0,SEEK_END); lseek(hand,0,SEEK_SET);
Навскидку в 58.ARY. Байты CARY_hdr + 8 = 00 00 61 B4, а файл обрывается на 1F8Eh 568.ARY - значится С050h, обрывается на BD5Eh 569.ARY - интересный экземпляр. Значится 1774h, имеем 1A6Bh. Честно говоря не пойму что с ним делать.. может я ошибся?)
Разница уж слишком большая в первом случае 4226h. Во втором 2F2h, в третьем 2F7h это ещё куда не шло. Но я не понял что за цифры ты привёл? 58.ARY находится по адресу 18A0044h в ZStream, там до него стоит JOIN (размером 1FB8)->JARY->JHDR. Следующий за ним находится файл VRT по адресу 18A1FD4 с заголовком JOIN(размером 1FB8)->JVRTJHDR. 58.ARY прочитан верно.
Сообщение отредактировал Phoenix - Понедельник, 03.06.2013, 11:02
8.ARY находится по адресу 18A0044h в ZStream, там до него стоит JOIN (размером 1FB8)->JARY->JHDR. Следующий за ним находится файл VRT по адресу 18A1FD4 с заголовком JOIN(размером 1FB8)->JVRTJHDR. 58.ARY прочитан верно.
Так то оно так, но... что означают циферки после JARY->JHDR (там стоит 0000 61B8h) - по идее это размер файла, но применительно к 58.ARY это не прокатывает... по логике следом должен идти JDAT, но мы видим JVRTJHDR и это меня сбивает с толку( ощущение такое что либо JVRT является частью СARY, либо его продолжение следует искать где-то в другом месте стрима... и никому не показалось странным целая куча файлов размером 8080 (или 8079) байт? Все эти файлы, имхо, обрезаны))
Upd: Ну вот смотрите. После 58.ARY следует JVRT, а после JVRT следует JARYJDAT!!!, а распаковщик не глядя пихает эту часть в качесте продолжения 59.VRT... Далее идёт ещё 3 куска JARYJDAT и в итоге размер 58.ary у меня получился заданные 61b8h (25016) байт.
Сообщение отредактировал aliast - Понедельник, 03.06.2013, 15:39
aliast, из написанного тобой следует один вывод, что VRT файлов не существует, это запчасть одного большого файла (пусть это будет ARY, Хотя х.з как на самом деле). Весь вопрос, что это за тип файла такой. Ведь чтобы вытащить звуковой файл из стрима, нужно пройтись по SNDS(sounds), SHDR(sound header) и SSMP(sound sample) чанкам. Значит обрезки нужно собирать воедино, а тащить в отдельные файлы. Самый верный путь смотреть в 3DO SDK, что там сказано про это, как это правильно собрать.
Сообщение отредактировал Phoenix - Понедельник, 03.06.2013, 16:23
все может быть, такое уже было в 3do форматах один файл имеет несколько частей,заголовков, они все взаимосвязаны, но VRT существует в реале, встречался в играх 3do как Uprising, Battle Tank инфо маловато в интернете http://www.gdal.org/gdal_vrttut.html даже встречаются обрывки кодов по конвертации в текстуры,но совсем не понятно что там к чему.
С этого сайта http://arts-union.ru/ редкие проги может кто выложить сюда?),у меня сайт arts-union.ru вот так работает(( (Невозможно подключиться к удалённому серверу)
Ryudo, там вроде Altmer рулит, если что выкладывать надо с его согласия наверное или он сам может проявит желание, а материала полезного там очень много.
aliast, из написанного тобой следует один вывод, что VRT файлов не существует, это запчасть одного большого файла
Вы меня неправильно поняли. Это было моё предположение, которое я тут же опроверг. Там получается такая картина: 1) Сначала идёт ПЕРВЫЙ СЕГМЕНТ файла 58.ary, его размер 1F90h. Заголовок JARY JHDR 2) Далее начинается ПЕРВЫЙ СЕГМЕНТ файла 59.vrt, размером тоже 1F90h. Заголовок JVRT JHDR 3) Далее идёт ВТОРОЙ сегмент файла 58.ARY, размер 1F90h. Заголовок JARYJDAT. В этом месте распаковщик тупит и пишет этот сегмент в 59.VRT вместо 58.ARY 4) Далее файл 60.MAP, размером 0B12h. Заголовок JMAP JHDR 5) Далее нули FILL 6) Далее ВТОРОЙ СЕГМЕНТ файла 59.VRT. Размер 1A70h JVRT JDAT 7) Далее ТРЕТИЙ сегмент 58.ARY. Размер 1F90h JARY JDAT 8) Далее ПЕРВЫЙ сегмент 61.FAC. Размер 1F90h JFAC JHDR 9) Далее ЧЕТВЕРТЫЙ, последний сегмент злополучного 58.ARY, размером 0308h JARY JDAT ... 58.ARY распаковали. Вот такая сегментация. А у нас получился только первый кусок ARY...
Сообщение отредактировал aliast - Понедельник, 03.06.2013, 17:24
очередность распаковки программой имеет какое значение? Вот например 58.ARY 59.VRT 60.MAP 61.FAC 62.VNT cлед. 85.ARY 86.ARY а что за 86.idb что это за файл? у меня два 86
86.idb у меня нет, по идее это файл Ida Pro. Как он к вам попал не знаю, может пытались ARY-файл в Иде ковырять?) Про очередность вопроса не понял. Если имелась ввиду выборочная распакова файлов, то нет никакого значения в очередности, распаковывайте в любом порядке) Однако распаковщик некоторые файлы не до конца распаковывает по вышеописанной причине (неправильная склейка сегментированных файлов). Кстати, только сейчас заметил ещё один прикол с этим 58.ARY. В окне программы выводится "58.ARY Размер: 25 Кб", а распаковывается только 8 Кб... 25 Кб - правильный размер.
Сообщение отредактировал aliast - Понедельник, 03.06.2013, 23:05
меня уже переглючило))). верно файл ida. очередность расширения файлов после распаковки, сначала очередность такая 58.ARY 59.VRT 60.MAP 61.FAC 62.VNT а потом подряд два 85.ARY 86.ARY может как раз они и не открылись
Добавлено (03.06.2013, 23:17) --------------------------------------------- может каждый файл ARY несет несколько заголовков ,которые взаимосвязаны типа VRT,MAP,FAC и др поетому остальные неправильно открылись или не соответствуют по размерам
Сообщение отредактировал Hulk - Понедельник, 03.06.2013, 23:19
aliast, спасибо за информацию, баг действительно наблюдается при распаковке некоторых файлов, программа путает блоки одних файлов с другими, и получается манная каша с набором из разных файлов, происходит это потому что все JOIN - JHDR, JDAT обрабатываются в одном потоке, без учёта формата файлов, но сам алгоритм распаковки правильный, могу так же предположить что по этой причине некоторые из CEL's не открывались, но всё будет ясно когда исправлю баг.
Сообщение отредактировал Holks - Вторник, 04.06.2013, 09:54