Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сжатая графика в Tombs & Treasure(NES)

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 05, 2006 1:34 pm    Заголовок сообщения: Сжатая графика в Tombs & Treasure(NES) Ответить с цитатой

Ломал я голову над этой проблемой, ломал, ломал и доламался - почти вывел алгоритм сжатия. Но почти, как известно, не считается. Я попытаюсь поподробнее описать ситуацию - может у кого найдутся соображения на этот счет.

Я определил, что графика сжимается системой байтов в таком формате:
{Неизвестный байт}{00}{Описывающий байт}{Байты графики}

Теперь подробнее:

{Неизвестный байт} - байт, предназначение которого мне еще неизвестно, но стоит хоть чуть-чуть его изменить и картинка сразу-же изменяется. Измениться может цвет, положение части картинки, возможно кодировка графики с 1BPP на 2BPP(еще не уверен, с 2BPP не разбирался).

{00} - не знаю, отделяющий это байт или просто так совпало, что это продолжение неизвестного байта, но он есть после каждого неизвестного байта.

{Описывающий байт} - байт, который описывает, сколько впереди него будет байт, отвечающих за графику. Если байт {0X}, то X - это количество идущих друг за другом байт графики(о них чуть ниже), а если байт {8X}, то после него идет один байт, рисующий свою графику X раз подряд(то есть будет X одинаковых восьми-пиксельных линий подряд).

{Байт графики} - байт, описывающий графику в кодировке 1BPP, кто не знает, объясню:

Допустим у нас есть байт D5, если перевести его в биты получиться 11010101(B=1011, 5=0101). Так вот, графика будет отображаться также, только вместо нулей и едениц будут точки двух разных цветов(я говорю только про 1BPP), то есть получиться строка из восьми точек.


Надеюсь, ситуация понятна. Ну так вот, я пытался переписать этот промежуток, но тогда картинка портилась, наверное дело в этих "неизвестных байтах", а может там есть что-то типа поинтеров - не знаю. Самому пока-что в эту хитрую систёму полностью въехать не получаеться, могу только распаковать графику, а обратно она не хотит. Может кто сталкивался с подобным и может дать какой-нибудь совет, буду очень благодарен.

З.Ы. Самое обидное то, что эта графика особого значения не имеет - в ней только названия локаций, а по тексту и так можно догадаться, где ты находишься. Обычно сразу и пишеться, что за локация. Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Axel
Советник


Зарегистрирован: 14.11.2003
Сообщения: 680

СообщениеДобавлено: Ср Июл 05, 2006 7:52 pm    Заголовок сообщения: Ответить с цитатой

Нинтендо обычно использует сжатие по алгоритму LZ77
либо ты описываешь тривиальный RLE (он даже в .BMP используется...иногда)
_________________
Всех их вместе переведём!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Ср Июл 05, 2006 8:52 pm    Заголовок сообщения: Ответить с цитатой

А в гугле это точно есть? Smile А то с 1BPP я сам разбирался, в гугле не нашел ничего, кроме ссылок на этот форум.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tmax



Зарегистрирован: 24.12.2003
Сообщения: 53

СообщениеДобавлено: Чт Июл 06, 2006 5:56 am    Заголовок сообщения: Ответить с цитатой

Axel писал(а):
Нинтендо обычно использует сжатие по алгоритму LZ77
либо ты описываешь тривиальный RLE (он даже в .BMP используется...иногда)

Насколько я понял из объяснения все-таки RLE.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Июл 06, 2006 7:30 am    Заголовок сообщения: Ответить с цитатой

Да, RLE. Проблема только в том, что распаковать и запаковать я могу, а вот вставить в ром не могу. Видимо где-то есть ссылки на определенные участки, да и с этими "неизвестными байтами" проблема - нафига они их и {00} сували? Не могли что-ли только описывающие и графические байты оставить? Да изачем сжимать-то? Свободного места они от этого совсем не выиграли, да его-то как раз вроде бы в роме хватает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
CaH4e3



Зарегистрирован: 21.01.2004
Сообщения: 195

СообщениеДобавлено: Вс Июл 09, 2006 1:16 pm    Заголовок сообщения: Ответить с цитатой

В игре испольуется самый обычный RLE, даже без каких бы то ни было расширений. И никаких неизвестных байтов в начале нет. Блок запакованных данных всегда начинается с RLE кода, который содержит счетчик (младшие 7 бит) и RLE флаг (старший бит). Если RLE флаг равен 1, то следующий за кодом байт данных повторяется столько раз, сколько указано в счетчике. Если RLE флаг равен нулю, то следующие за кодом байты в количестве равном значению счетчика переписываются в принимающий буфер. Декодирование останавливается, когда очередной RLE код равен 0x7F.
Как правило, в начале каждого пакуемого блока находится пустое место - пробел или просто пара пустых строк - потому каждый блок в массе своей начинается как {1xxxxxxb}{00000000b} данными...

Ты забыл совсем про такую штуку, как указатели... Это такая хрень, которая говорит декодеру, где лежат данные и без них никакой декодер работать не будет... Указатели могут быть записаны непосредственно кодом в соответствующие переменные декодера, а могут быть считаны из таблиц указателей... Так вот скажу по секрету, что почти всегда, а в данной игре уж и подавно, таблицы указателей лежат в начале банка, содержащего данные... В данном случае, это восьмой 16кб банк (считая от нуля), и адрес начала таблицы - 0х8010. Каждый элемент - трехбайтовый. Первые два байта - и есть смещение начала запакованного фрагмента.

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


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Июл 09, 2006 6:54 pm    Заголовок сообщения: Ответить с цитатой

CaH4e3 писал(а):
Ты забыл совсем про такую штуку, как указатели...

Я о ней вообще не знал Smile

Спасибо за информацию, будет над чем подумать, когда еще немного кой-чему подучусь, а то за эту неделю моё представление о ромхакинге сильно изменилось... Но это не значит, что я его брошу - я упорный, если не могу что-то сделать, то буду биться до тех пор, пока это не сделаю. Другое дело, если я знаю, как сделать, но не хочу - тогда и забросить могу.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вс Июл 09, 2006 10:52 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
я упорный, если не могу что-то сделать, то буду биться до тех пор, пока это не сделаю. Другое дело, если я знаю, как сделать, но не хочу - тогда и забросить могу.


Вот так всегда бывает. Sad Пока не знаешь - хочешь, а значит, прилагаешь максимум усилий. Потом уже всё знаешь, но ничего не хочешь. Sad И чем дольше продлится пограничный период с момента "не знаю, но хочу" до "знаю, но не хочу" - тем лучше...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 6:58 am    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
HoRRoR писал(а):
я упорный, если не могу что-то сделать, то буду биться до тех пор, пока это не сделаю. Другое дело, если я знаю, как сделать, но не хочу - тогда и забросить могу.


Вот так всегда бывает. Sad Пока не знаешь - хочешь, а значит, прилагаешь максимум усилий. Потом уже всё знаешь, но ничего не хочешь. Sad И чем дольше продлится пограничный период с момента "не знаю, но хочу" до "знаю, но не хочу" - тем лучше...

Не всегда. Из-за этого "не знаю" в основном и стопоришься, а как только узнал - делаешь дальше, пока не надоест.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group