Хранение сжатой графики SMS
В этой статье я хочу рассмотреть один из
примеров сжатия графики в играх. В частности, мы будем рассматривать игру
Double Hawk для
Sega Master System (
SMS).
Так же будет полезно ознакомится со статьёй «SMS/GG (Метод хранение несжатой графики в играх для SMS/GG) (http://pscd.ru/forum/index.php?/topic/316-khranenie-neszhatoi-grafiki-na-razlichnykh-igrovy/?p=3275)».
Метод хранения схож с методом описанном в статье «Хранение сжатой графики 1BBP (http://pscd.ru/forum/index.php?/topic/593-khranenie-szhatoi-grafiki-1bbp/)».
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-87249200-1480497695.png)
В игре много пожатой графики, мы же будем рассматривать надпись
Mission.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-06756300-1480497696.png)
Так называемый архив со сжатой графика хранится в роме (игре) с $
CCAD по $
D0BE.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-22001300-1480497696.png)
Первые два байта
60 01 эта что-то вроде
размера архива. Переворачиваем значение и получаем
01 60. В переводи в десятичные это
352. Это значение сколько пикселей по
8 мы запишем в видеопамять консоли. Проще говоря «
размер архива».
Начнём рассматривать по порядку.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-36121100-1480497696.png)
Байт 01 это число сколько графических дынных будет до следующего «
служебного байта».
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-51556000-1480497696.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-68345300-1480497695.png)
В нашем случае мы считываем одно значение
FF 00 00 00 равное
4 байтам.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-01369000-1480498044.png)
Далее идёт «
служебный байт»
81, который указывает на
количество повторений.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-20154500-1480498044.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-50393600-1480497695.png)
В нашем случае
3 повторения значения
47 B8 00 00.
То есть 0x
81 – 0x
7E =
3 (http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-37873900-1480498162.png)
Для наглядности
Большое дело делаешь, ведь раньше так подробно никто это не расписывал и не объяснял.
Надеюсь, благодаря вашим усилиям появится ещё больше хороших ромхакеров, а с ними и новых качественных переводов игр.
Цитировать
То есть 0x81 – 0x7E = 3
P.S. Откуда взялась 0x
7E?
Цитата: PSXDev от 30 ноября 2016, 11:41P.S. Откуда взялась 0x7E?
«
Служебный байт»
делится на два типа. Один считывает значения данных
подряд, другой
повторяет.
От
01 до
7E это количество которое будет считываться подряд.
От
7F до
FF – количество повторов.