Clock Tower (PS1), формат хранения графики |
Добро пожаловать, гость ( Вход | Регистрация )
Clock Tower (PS1), формат хранения графики |
Rash_forever |
Aug 9 2019, 03:17
Сообщение
#1
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Всем привет! Ребят такой вопрос кто знает как хранится графика в PS1 кроме TIM, хотел попробовать как то русский припилить в игру Clock Tower(фан в детстве был) собсна вопрос есть в игре архивы в них картинки, возможно модели и т.д. Текстуры вижу через тайловый редактор все нормально но если бы был TIM были бы и заголовки формата но их нет как узнать что за формат текстур и как можно распаковать для просмотра? Могу приложить пример архива или псевдоархива! Поможет кто?
|
-=CHE@TER=- |
Aug 9 2019, 08:31
Сообщение
#2
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Да, поглядеть пример архива с изображениями внутри было бы не кисло.
Если не сложно, просьба выложить куда-нибудь небольшой такой архив (в котором есть изображения) на файловый обменник не требующий регистрации для скачивания. Я видел на YouTube прохождение какого-то Clock Tower (для SNES, кажется). Вроде бы там текста много и вряд ли это картинки (не знаю как там с версией для PS1). Поэтому, скорее всего, помимо изображений придётся ещё и с форматами шрифта и текста возиться. |
Rash_forever |
Aug 9 2019, 15:13
Сообщение
#3
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Ссылка на файл: https://yadi.sk/d/dZOBgvJU6l5Eug
Посмотреть можно этой прогой: https://yadi.sk/d/d5zmXVSzksieXA Можно ей и перерисовать но всеже здесь по извлечению ресов Еще вопрос как ПАЛетку найти на каждую тектуру, я так понял большая часть там 4bpp |
-=CHE@TER=- |
Aug 9 2019, 18:27
Сообщение
#4
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Выложенный файл можно распаковать на отдельные составляющие вот так:
binunpak.c CODE #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #include <stdint.h> #pragma pack(push, 1) typedef struct { uint32_t offs; uint32_t size; uint32_t zero; /* always zero? */ uint16_t number; /* number in group */ uint16_t last; /* last in group: 1 - yes; 0 - no */ } bin_item; #pragma pack(pop) int main(void) { uint32_t i, j, k, count; bin_item *list; FILE *fl, *f; char s[16]; void *p; fl = fopen("D1A.BIN", "rb"); if (!fl) { return(1); } fread(&count, 4, 1, fl); fseek(fl, 16, SEEK_SET); list = (bin_item *) malloc(count * sizeof(list[0])); if (!list) { fclose(fl); return(2); } /* relative offset */ k = 16 + (count * sizeof(list[0])); fread(list, sizeof(list[0]), count, fl); for (i = 0; i < count; i++) { sprintf(s, "%03u-____.DAT", i); p = malloc(list[i].size); if (p) { fseek(fl, list[i].offs + k, SEEK_SET); fread(p, list[i].size, 1, fl); memcpy(&s[4], p, 4); for (j = 0; j < 4; j++) { /* alpha or number */ if (isalnum(s[4 + j])) { continue; } s[4 + j] = '_'; } f = fopen(s, "wb"); if (f) { fwrite(p, list[i].size, 1, f); fclose(f); } free(p); } printf("%s\n", s); } free(list); fclose(fl); printf("\ndone\n\n"); return(0); } Как я понял, там всё: изображения, звуки, музыка, архитектура комнаты и прочее. Картинки, походу, в TIG0 файлах, но что это за формат я не в курсе. Подозреваю, что у TIG0 примерно такой формат: char[4] - TIG0 - сигнатура uint32_t - смещение до палитры uint32_t - смещение до палитры (опять, не знаю почему их два) uint16_t - количество записей в первой таблице uint16_t - количество записей во второй таблице uint16_t - количество записей в третьей таблице uint16_t - всегда ноль (выравнивание? количество записей в четвёртой? таблица опциональна?) далее идут две таблицы каждая запись в которой 8 байт: uint16_t - неизвестно uint16_t - неизвестно (иногда равно предыдущему значению) uint32_t - всегда ноль (?) каждая запись в третьей таблице 12 байт: uint32_t - смещение? uint16_t - ширина? uint16_t - высота? uint32_t - номер? Потом идёт палитра (см. смещение из заголовка) и уже сами изображения. Палитра, как я вижу, 768 байт (по 3 байта на цвет, но прядок (RGB, BGR и т.д.) не проверял). Кстати говоря, изображение, всё же, на мой взгляд, 8 бит, а не 4, ибо 768/3 = 256 цветов. Ах, да, crystaltile2 запустить не смог - оно почему-то падает с ошибкой обращения к нулевому (?) адресу. Спасибо сказали:
|
Rash_forever |
Aug 10 2019, 02:23
Сообщение
#5
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Спасибо будем разбираться правда Си дебри но ниче попробуем а про кристал может не открывать файл если он уже чем то занят т.е. открыт допустим в хекс редакторе и т.д.
|
-=CHE@TER=- |
Aug 10 2019, 11:32
Сообщение
#6
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Не, там редактор просто не запускается - я его запускаю и тут же получаю сообщение об ошибке, даже до открытия файла добраться не могу. Сама по себе программа криво написана. Теоретически, если поковырять её под отладчиком, то можно попробовать найти в чём там проблема, но время на это жалко.
|
Rash_forever |
Aug 10 2019, 16:21
Сообщение
#7
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Незнаю ява мож старая или библиотеки какой нехватает. Просто программа хороша тем что любой файл просматривает как картинку ей легко нахадить в архивах текстуры по крайней мере все пс1 пс2 игры видит четко только с палитрой сложно подбирать))))
|
Rash_forever |
Nov 4 2019, 04:34
Сообщение
#8
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Всем привет! Народ ктонить знает можно ли риппером например NinjaRipper рипать модели с эмуляторов PS, DreamCast и т.д.??? Или есть какаянить другая прога??
|
-=CHE@TER=- |
Nov 4 2019, 11:37
Сообщение
#9
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Я лично не знаю и подозреваю что вряд ли тебе кто-то тут поможет с этой темой, потому что, во-первых, с приставочными играми здесь мало кто имел дело, во-вторых, извлечение 3D моделей само по себе занятие ещё то. Могу посоветовать только это (DirectX) и это (OpenGL) - эмуляторы консолей наверняка какой-то из этих интерфейсов используют, возможно, поможет. Есть ещё зарубежный форум там, вроде бы, модели достают (судя по названиями тем).
|
Rash_forever |
Nov 4 2019, 15:07
Сообщение
#10
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Спасибо! Посмотрим будем искать)))
|
Rash_forever |
Jan 19 2020, 11:18
Сообщение
#11
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Всем привет! Хочу дополнить тему может кому надо будет)) Вообщем как сказал великий -=CHE@TER=- (огромное спасибо ему правда не пойму как он узнал это без проги по просмотру тайловой графики!) все текстуры хранятся в формате TIG0 после заголовка идет смещение до палитры, в файле несколько картинок т.е. морда, волосы, одежда и т.д., и какой порядок картинки смещается палитра на 32 байта. Т.Е. 1 картинка начало палитры от смещения от заголовка, 2-я картинка +32 байта от начала палитры чет намудрил мож поймет кто))))
Спасибо сказали:
|
-=CHE@TER=- |
Jan 19 2020, 14:52
Сообщение
#12
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
огромное спасибо ему правда не пойму как он узнал это без проги по просмотру тайловой графики! Нашему проекту CTPAX-X в феврале будет 14 лет, а занимаемся мы всем этим гораздо больше времени. Когда много с разбором незнакомых файловых форматов работаешь, то уже глаз намётан. Здесь нет ничего удивительного - с опытом и временем каждый это может. Другое вопрос, конечно да, количество времени, которое на это уйдёт. Но спасибо за тёплые слова!Т.Е. 1 картинка начало палитры от смещения от заголовка, 2-я картинка +32 байта от начала палитры чет намудрил мож поймет то)))) Я формат описывал по прикидке, не особо проверяя точность значений (т.е. программу для чтения и проверки не писал). Поэтому, возможно, что-то упустил, откуда и вылезают эти +32 байта. Я поэтому и написал "подозреваю что формат примерно такой" - если бы знал точно, то так бы и написал, что формат 100% вот такой. Сам не люблю, когда читаешь документацию, где пишут что всё точно-точно вот так, а ты потом смотришь, но в файле на диске всё местами сильно не так, как описано. А так хотя бы честно предупреждают что оно примерно где-то так, так что есть на что опираться и от чего оттолкнуться при изучении, но считать за точное описание не стоит.Спасибо сказали:
|
Rash_forever |
Jan 26 2020, 18:14
Сообщение
#13
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Еще раз привет! Знаю уже наглею(надоел) а можно как то пояснить выше приложенный код по разделению архива на файлы TIG0 чет я думал, думал и.....! Ну просто описать какая строка за что отвечает? Как бы знаю основы циклы операторы и т.д.(понимаю как это все работает, никогда небыло опыта работы с файлами) простые программы написать могу а тут чет сложно((( Заранее спасибо)))
Кого обманываю дилетант походу вообщем |
-=CHE@TER=- |
Jan 27 2020, 14:28
Сообщение
#14
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Да почему - нормальные вопросы. На Extractor.ru была 15 лет назад тема по программированию, где я написал похожую программу с подробными комментариями. Правда там были архивы .PAK от Quake II, но главное не это, а понимание за что какие команды языка отвечают. Я ту программу недавно переписал, чтобы была более аккуратная и понятная. Думаю как отправная точка для разбора и понимания программы от Clock Tower (она куда проще) - это то что нужно.
А если есть вопросы по программированию, то их лучше в другой теме задавать (кстати, тоже рекомендую её почитать, а всё что относится к PHP, Assembler и настройке веб-серверов можешь спокойно там пропускать). Если правда этим интересуешься и есть желание разобраться, то тебе с удовольствием ответят. Спасибо сказали:
|
Rash_forever |
Jan 31 2020, 04:49
Сообщение
#15
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
-=CHE@TER=- а можно извлечение сделать от начала TIG, до начала нового TIG чтобы перед следующим TIG выполнялась распаковка. Т.Е. в архиве найден первый файл(TIG) выделяется все смещение до второго файла(TIG) и экспортируется 1-й файл и т.д. без просчета байтов заголовка и т.д. Просто там видишь есть заголовок TIG все байты доходят до следующ. TIG это один файл с несколькими картинками и т.д. Надеюсь понятно написал(((
Спасибо сказали:
|
-=CHE@TER=- |
Jan 31 2020, 16:15
Сообщение
#16
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Вот это я пролетел. Дичайше извиняюсь - промахнулся с форматом. Я почему-то подумал что размер 16, когда он 32. Исправил свою программу выше - теперь она должна правильно распаковывать:
CODE uint16_t size; uint16_t flags; /* unknown 0, 1 or 3 */ Заменил на (16 + 16 = 32): CODE uint32_t size; Потому что размер не 2 байта, а 4. Мне почему-то подумалось, что раз файл небольшой, значит и данные там не должны за 2 байта выходить. А есть больше из-за чего файлы извлекались не целиком. Теперь точно должно правильно работать, потому что я проверил: сумма всех извлечённых файлов + размер заголовка = целиком размеру D1A.BIN. Прошу прощение за причинённые неудобства. Спасибо сказали:
|
Rash_forever |
Feb 1 2020, 04:25
Сообщение
#17
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Огромное спасибо все работает в том числе для всех архивов все четко этот сайт это находка для начинающих. Я до этого вообще не представлял как распаковкой заниматься а теперь подсел на изучение Си потому что язык реально универсален огромное спасибо СТРАХ-Х за помощь в частности -=CHE@TER=-, за ответы на тупые вопросы, за терпение и т.д. и т.п. Люблю ВАШ канал!!!)))
Спасибо сказали:
|
Rash_forever |
Feb 18 2020, 08:57
Сообщение
#18
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Всем привет!
Ребят поясните что за код понять не могу?! "#pragma pack(push, 1), #pragma pack(pop)" сама структура эт понятно а вот это?((( в нете тож толковой инфы нет...или мож ищу так(( Заранее спасибо! Спасибо сказали:
|
-=CHE@TER=- |
Feb 18 2020, 13:51
Сообщение
#19
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Хороший вопрос. Если человек спрашивает, значит пытается разобраться - это здорово!
Но, главное в программировании, да и, наверное, во многих других областях - это внимание к деталям. Я парой сообщений выше давал ссылку на форум Extractor.ru с примером похожей программы и комментариями, где этот момент был объяснён. Но я могу объяснить гораздо подробнее и понятнее, с примером, если подобный вопрос, как я уже писал парой сообщений выше, будет задан в другой теме, ссылку на которую я, опять таки, в том же сообщении уже давал. Вот. Внимание к деталям - это очень важно. Спасибо! Спасибо сказали:
|
Rash_forever |
Feb 19 2020, 05:03
Сообщение
#20
|
Member Группа: Authorized Сообщений: 16 Регистрация: 6-August 19 Пользователь №: 18,033 Спасибо сказали: 4 раз(а) |
Да, да я забыл написать о том что читал статью по ссылке не раз перечитывал она в избранном у меня но непонятно было по этим строкам(( щас уже в принципе с указателями хорошо ознакомился синтаксис почти не отличается от шарпа, функции немного путаются "print, sanf, %s,i,d, c" со строками тож сложновато набор символов берешь адрес на первый символ мутишь крутишь))) вообще спасибо что подсадили на СИ нравится изучать его интересный с шарпом не так было))), а вот прагма чет недогоняю поэтому спросил если можно подробнее))) Спасибо!!!
|
Упрощённая версия | Сейчас: 31st October 2024 - 07:26 |