Перейти к содержимому


Фотография

Lego Racers Текстуры (Сжатая графика) [PSX]

Сжатая графика графика Текстуры PSX Lego Racers Lego Racers Romhacking Взлом Распаковка

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 11 Декабрь 2016 - 14:56

В этой статье я хочу рассмотреть формат хранения текстур (графических изображений) в игре Lego Racers для Sony PlayStation.

 

Хранение текстур (графики / изображения)

 

 

Lego Racers Viever Textures - Программа для просмотра графики в игре Lego Racers.


  • 3

#2 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 11 Декабрь 2016 - 14:56

Хранение текстур (графики / изображения)

 
Графика в игре хранится в пожатом виде. Скорее всего это какой-то аналог LZ77.
 
Текстуры (графика) хранятся в файле LEGO.JAM. Судя по всему, исходными файлами были *.BMP. В качестве примера мы рассмотрим «DSHOCK».
 
Адрес: $139982
Размер: $19F (415 байт)
 
Для удобства мы извлечём данный архив в отдельный файл. Он будет прикреплён к этой статье.
 
Для начала нужно сказать пару строк об особенности вывода графики.
 

post-1-0-66232700-1481461332.png

Как рисунок выглядит в игре.
 

post-1-0-98009000-1481461332.png

Как рисунок выглядит в распакованном виде (оригинал).
 

post-1-0-47385500-1481461332.png

Конечно рисунки маленькие и разницу между ними сложно заметить, но в игре дублируется пиксель поверху и с левого края. На рисунке эта область обозначена красным цветом. За счёт этого изображение сдвигается и часть его попадает в невидимую область (на рисунке обозначена зелёным цветом).
 

post-1-0-13295800-1481461332.png

Такой вид имеет «архив» в hex-редакторе.
 

post-1-0-56364100-1481461583.png

Первый байт (04) – указывает на тип изображения. 04 - то сколько будет занимать один пиксель бит. В нашем случае это 4 бита или пол байта.

 

Если встречаем значение 08, то один пиксель будет равен 1 байту.
 

post-1-0-76676000-1481461583.png

Второй байт (06) – указывает на количество цветов в рисунке. Проще говоря сколько цветов будет содержать палитра. В нашем случае это 7 цветов, так как ноль учитывается.
 

post-1-0-97236600-1481461583.png

Ширина (длинна) изображения в пикселях по X. У нас оно составляет 52 пикселей.
 


post-1-0-16289800-1481461584.png

Высота изображения в пикселях по Y. У нас оно составляет 32 пикселя.
 


post-1-0-32341800-1481461584.png

Палитра – занимает 15 байт.
 
7 * 3 = 15.
7 – количество цветов
3 – сколько байт занимает один цвет.
 

post-1-0-49399300-1481461584.png

Один цвет занимает 3 байта.
 

post-1-0-85497900-1481461584.png

Палитра хранится в формате RGB, права в перевёрнутом виде.
 

post-1-0-21864300-1481461886.png

(40 03) - сколько байт данные занимают в распакованном виде. В нашем случае это 832
байта. Это так же блок, в пределах которого будет идти отсчёт сжатия.

 

post-1-0-41230500-1481461886.png

Следующие два байта (80 01) - размер блока (сжатых данных). Он равен 384 (0x0180) байта.

 

Если размер запакованных данных равен размеру распакованных, то это значит, что данные не сжаты. 
 

post-1-0-74447400-1481461886.png

Размер сжатой графики, как написано выше, 384 байта.
 

post-1-0-06980400-1481461887.png

00 – два пикселя цвета 0 и 0. При чём вывод пикселей идёт справа налево.


 

post-1-0-38429100-1481461887.png

8C – служебный байт. В битах данный байт имеет следующий вид 10001100.
1 – данные сжаты.
0 – считывает не сжатые данные.
 

post-1-0-93367800-1481462066.png

Для начала начнём с простых примеров.
 
00 – служебный байт. В битах имеет вид 00000000. Это значит, что сжатых данных не содержится. Считываем следующие 8 байт.
Напомню, что один пиксель равен 4 байтам. То есть данные будут иметь следующий вид.
5 5 4 6 6 6 6 2 4 1 6 2 3 2 1 4
 
98 – следующий служебный байт, но сейчас мы его рассматривать не будем.
 

post-1-0-22324200-1481462067.png

Теперь рассмотрим пример содержащий сжатые данные.
 
80 – служебный байт. В битах имеет вид 10000000.
1 – обозначает сжатые данные, считываем их. (Сжатые данные обозначены оранжевым цветом)
 
0F 4D - сжатые данные имеют вид.  Данные нужно преобразовать следующим образом

 

post-1-0-66940700-1481462066.png

F 04D
 
F – Сколько байт считывать. В данном случае это 3 байта, что равно 6 пикселям.
Расчёт производится по следующей формуле.
 
0x0f-XX+3
 
Таким образом подставив вместо XX значение F мы получим 3.
 
0x0f-0x0f+3=3
 
04D – на сколько байт нам нужно вернуться в изображение. В нашем случае это 77 байт. Хочу обратить ваше внимание, что возврат происходит именно в изображение (но в пределах блока).
 
Далее идут не сжатые данные.
 
80 – следующий служебный байт

 

post-1-0-38234500-1481462067.png

Теперь вернёмся в самое начало и рассмотрим данный пример.

 

8C – служебный байт. В битах данный байт имеет следующий вид 10001100.

00 01 44 – Мы ещё не рассматривали данный способ сжатия. Тут всё намного сложнее и запутаннее.

 

post-1-0-55158100-1481462067.png

Данные 4 бита (пол байта) (равны нулю) говорят нам о том, что это другой способ сжатия и он занимает 3 байта.

 

Тут в принципе всё тоже самое что и в предыдущем случае, но с небольшим дополнением.

 

Переворачиваем данные

 

post-1-0-45989400-1481462066.png

 

0 44 001

 

0 – Сколько байт считывать. В данном случае это 18 байт, что равно 36 пикселям.

Расчёт производится по следующей формуле.

 

0x0f-XX+3

 

Таким образом подставив вместо XX значение 0 мы получим 36.

 

0x0f-0x00+3=18

 

Но это ещё не всё, к этому числу (18) нужно прибавить 0x44 (68)

18 + 68 = 86 байт.

 

Вот теперь мы получили окончательное значение сколько байт считывать.

 

001 – на сколько байт нам нужно вернуться в изображение. В нашем случае это 1 байт.

 

06 – следующий служебный байт

 

post-1-0-73379800-1481462067.png

FF 00 00 – что-то вроде стоп байт.

Прикрепленные изображения

  • DSHOCK.png
  • Pad2.png
  • PadGame.png
  • PadOrig.png
  • p1.png
  • p2.png
  • p3.png
  • p4.png
  • p5.png
  • p6.png
  • p9.png
  • p8.png
  • p10.png
  • p11.png
  • p12.png
  • p13.png
  • 044001.png
  • f0d4.png
  • p14.png
  • p15.png
  • p16.png
  • p17.png
  • p18.png

  • 4

#3 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 12 Декабрь 2016 - 17:36

post-95-0-98382300-1481556948.png

Немного развлёкся и вставил текстуру от призрака на голову. Получилось довольно забавно. Учитывая ещё тот факт, что подобной детальки нет в наборах LEGO.

Прикрепленные изображения

  • GHOST_LEGO.png

  • 4

#4 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 12 Декабрь 2016 - 20:00

Lego Racers Viever Textures

 

post-95-0-40604200-1481565453.png

Написал программу Lego Racers Viever Textures для просмотра текстур (графики) в игре Lego Racers.

В программе нужно открыть файл LEGO.JAM (в нём хранится графика и другие данные). После чего можно просмотреть графику из игры непосредственно в программе. Так же изображение можно сохранить в *.BMP. Для удобства можно сохранить сразу все изображения (текстуры) в *.BMP.

 

Скачать Lego Racers Viever Textures:

Прикрепленный файл  Lego Racers Viever Textures.7z   380,4К   43 Количество загрузок:

 

post-95-0-94071200-1481565451.pngpost-95-0-27676500-1481565452.png

Прикрепленные изображения

  • bmp1.png
  • bmp2.png
  • Lego Racers Viever Textures.png

  • 4

#5 Alon

Alon

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 403 сообщений

Отправлено 13 Декабрь 2016 - 13:34

Круто, может быть теперь благодаря проделанной вами работы кто-то переведён Lego Racers на русский язык. А то с имеющейся руссификацией хуже, чем играть без неё.


  • 2

#6 PSXDev

PSXDev

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 114 сообщений

Отправлено 14 Декабрь 2016 - 14:12

Никогда особа не понимал зачем на CD носителях жать данные. Вот в Lego Racers вытащенная графа с помощью Lego Racers Viever Textures весит 35 МБ. Что для диска эти 35 МБ, капля в море. Так это в БМП, а в том же tim я думаю файлы бы занимали меньше места.


  • 2

#7 Diablo

Diablo

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 301 сообщений

Отправлено 14 Декабрь 2016 - 15:52

Никогда особа не понимал зачем на CD носителях жать данные. Вот в Lego Racers вытащенная графа с помощью Lego Racers Viever Textures весит 35 МБ. Что для диска эти 35 МБ, капля в море. Так это в БМП, а в том же tim я думаю файлы бы занимали меньше места.

Возможно для зашиты данных от хакеров, что бы было не так просто перерисовать графику или переделать какие-либо данные.


  • 0

#8 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 15 Декабрь 2016 - 09:31

post-95-0-95269000-1481786914.png

Вставил стороннее изображение в игру. Графу не зажимал. Судя по всему изображения типа 08 (1 пиксель равен 1 байту) нельзя не пожатыми вставить в игру.

Прикрепленные изображения

  • box.png

  • 3

#9 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 15 Декабрь 2016 - 19:13

Заметил кое-что интересное связанное с региональными отличиями.

 

SLUS_005.81 – Версия для США

SLES_012.07 – Европейская версия

 

Судя по всему, файлы для европейской версии были созданы чуть раньше, чем для версии для США. Хотя в европейской версии файл SYSTEM.CNF, создан позже, чем аналогичный файл в версии для США. Но не об этом я хотел сказать.

Заметил, что некоторые картинки в европейской версии большего разрешения.

 

post-95-0-61683200-1481821923.png

Так, например, в версии для США картинка разрешения 512х240

 

post-95-0-10811700-1481821924.png

В то время как в Европейской версии - 512х256. Заметьте, в европейской версии на картинке нет надписи Loading.

Прикрепленные изображения

  • 1179_TIT.png
  • TITTIT.png

  • 3

#10 Diablo

Diablo

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 301 сообщений

Отправлено 15 Декабрь 2016 - 19:23

Заметил, что некоторые картинки в европейской версии большего разрешения.

 

Возможно это было нужно для чего-то связанного с разрешением экрана, ведь у NTSC (США) разрешение экрана 720х480, а у PAL (Европа) - 720х576.


  • 0

#11 Alon

Alon

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 403 сообщений

Отправлено 16 Декабрь 2016 - 09:34

 

Заметил, что некоторые картинки в европейской версии большего разрешения.

 

Возможно это было нужно для чего-то связанного с разрешением экрана, ведь у NTSC (США) разрешение экрана 720х480, а у PAL (Европа) - 720х576.

 

Всегда думал что в играх для США разрешение больше. Выходит, что лучше в случае Lego Racers играть в европейскую версию.


  • 1

#12 SPOT

SPOT

    Продвинутый пользователь

  • Журналисты
  • PipPipPip
  • 511 сообщений

Отправлено 20 Декабрь 2016 - 13:24

В игре имеется следующий текст:

THE MULTI-TAP IS NOT FULLY INSERTED.

и

PLEASE RE-INSERT THE MULTI-TAP.

 

post-95-0-76580500-1482232897.jpg

А Multitap (SCPH-1070) называется "расчетверитель" для PSX. Устройство позволяющее подключить больше контроллеров.

Выходит, что изначально планировалось сделать возможность играть вчетвером.

Прикрепленные изображения

  • 1280px-PlayStation-Multitap-Adaptor.jpg

  • 2

#13 Марат

Марат

    Пользователь

  • Пользователи
  • PipPip
  • 14 сообщений
  • ГородАстана

Отправлено 21 Декабрь 2016 - 17:54

Правильней будет  viewer.


  • 0

#14 admin

admin

    Администратор

  • Администраторы
  • 1 139 сообщений

Отправлено 10 Январь 2017 - 10:45

Круто, может быть теперь благодаря проделанной вами работы кто-то переведён Lego Racers на русский язык. А то с имеющейся руссификацией хуже, чем играть без неё.

Перевод Lego Racers на русский язык от PSCD.RU


  • 0





Темы с аналогичным тегами Сжатая графика, графика, Текстуры, PSX, Lego Racers, Lego, Racers, Romhacking, Взлом, Распаковка

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Рейтинг@Mail.ru Яндекс.Метрика