IPB

Добро пожаловать, гость ( Вход | Регистрация )

> 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 были бы и заголовки формата но их нет как узнать что за формат текстур и как можно распаковать для просмотра? Могу приложить пример архива или псевдоархива! Поможет кто?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Aug 9 2019, 18:27
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Выложенный файл можно распаковать на отдельные составляющие вот так:

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 запустить не смог - оно почему-то падает с ошибкой обращения к нулевому (?) адресу.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме
Rash_forever   Clock Tower (PS1)   Aug 9 2019, 03:17
-=CHE@TER=-   Да, поглядеть пример архива с изображениями внутри...   Aug 9 2019, 08:31
Rash_forever   Ссылка на файл: https://yadi.sk/d/dZOBgvJU6l5Eug ...   Aug 9 2019, 15:13
-=CHE@TER=-   Выложенный файл можно распаковать на отдельные сос...   Aug 9 2019, 18:27
Rash_forever   Спасибо будем разбираться правда Си дебри но ниче ...   Aug 10 2019, 02:23
-=CHE@TER=-   Не, там редактор просто не запускается - я его зап...   Aug 10 2019, 11:32
Rash_forever   Незнаю ява мож старая или библиотеки какой нехвата...   Aug 10 2019, 16:21
Rash_forever   Всем привет! Народ ктонить знает можно ли рипп...   Nov 4 2019, 04:34
-=CHE@TER=-   Я лично не знаю и подозреваю что вряд ли тебе кто-...   Nov 4 2019, 11:37
Rash_forever   Спасибо! Посмотрим будем искать)))   Nov 4 2019, 15:07
Rash_forever   Всем привет! Хочу дополнить тему может кому на...   Jan 19 2020, 11:18
-=CHE@TER=-   огромное спасибо ему правда не пойму как он узнал ...   Jan 19 2020, 14:52
Rash_forever   Еще раз привет! Знаю уже наглею(надоел) а можн...   Jan 26 2020, 18:14
-=CHE@TER=-   Да почему - нормальные вопросы. На Extractor.ru бы...   Jan 27 2020, 14:28
-=CHE@TER=-   А если есть вопросы по программированию, то их луч...   Feb 19 2020, 11:31
Rash_forever   -=CHE@TER=- а можно извлечение сделать от начала T...   Jan 31 2020, 04:49
-=CHE@TER=-   Вот это я пролетел. Дичайше извиняюсь - промахнулс...   Jan 31 2020, 16:15
Rash_forever   Огромное спасибо все работает в том числе для всех...   Feb 1 2020, 04:25
Rash_forever   Всем привет! Ребят поясните что за код понять ...   Feb 18 2020, 08:57
-=CHE@TER=-   Хороший вопрос. Если человек спрашивает, значит пы...   Feb 18 2020, 13:51
Rash_forever   Да, да я забыл написать о том что читал статью по ...   Feb 19 2020, 05:03
Rash_forever   А еще вот эти строки "typedef unsigned char u...   Feb 19 2020, 05:21
Rash_forever   Сори за флуд :rolleyes:   Feb 20 2020, 06:53
-=CHE@TER=-   Да всё нормально. Ещё раз подчёркиваю: я не против...   Feb 20 2020, 14:11


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 27th April 2024 - 13:52