Ыыы) Ладно, сейчас буду их пытать
Помогите новичку с переводом
Сообщений 141 страница 152 из 152
Поделиться1422011-06-20 23:32:47
Вот обнаружил интересную вещь:
Если посмотреть на выделенную последовательность
И сравнить с последовательностью в роме
F7 AA B1 B1 DC 61 08
F7 - флаговый байт.
DC 61 - байты сжатия.
Да вот только, если посмотреть на картинке как распаковались эти байты (20 20 00 00)... такой последовательности в распакованных данных нет. Поэтому не понятно откуда они взялись. И если поиграть с этими тремя старшими битами второго байта, то в роме появляются откуда-то байты 20...
Поделиться1432011-06-21 22:48:20
Покопался в ассемблере:
Длина вычисляется правильно - берётся 5 младших бит второго байта и прибавляется 3
and a,1F add a, 03
Из трёх старших битов второго байта пары сжатия берётся только первые два
and a, 03
И они становятся старшими битами адреса.
Но всё равно мало что понятно.. по поводу моего верхнего поста: в самой игре адрес указывает именно на байты 20 20 00 00... но откуда они там взялись мне не понятно
В интернете почитал про алгоритм LZSS, там объяснялось, что пара байт сжатия - это <смещение, длина>. Здесь же этот алгоритм извратили
Отредактировано Ace Lightning (2011-06-21 22:51:31)
Поделиться1442011-06-22 19:42:46
в самой игре адрес указывает именно на байты 20 20 00 00... но откуда они там взялись мне не понятно
Картинка распаковывается в некий буфер в оперативке и если указатель направлен за пределы картинки, то будут копироваться какие-нибудь левые данные, которые сейчас хранятся по этому адресу. Я пробовал менять указатель на один, два, десять байтов раньше начала картинки и тоже появлялись 20-ки. Может быть они специально туда были заранее загружены, а может просто для всех адресов не попадающих в картинку берутся 20-ки.
Отредактировано TrickZter (2011-06-22 19:43:07)
Поделиться1452011-06-23 00:23:52
Нет, определённо не для всех берутся биты 20. Т.к. в случае выше распаковалось 20 20 00 00. На сколько я понял, буфер здесь состоит из 255 байт 22 и 2 байт 00. Вобще, там 34 байта 00 (да и байт 22 встречается там 992 раза )) ), но тогда все нули запаковывались бы из этого буфера, а они берутся из моей распакованной последовательности, поэтому вероятно 32 байта нулей в буфер не входят...
Чтож, тогда придётся ещё и буфер задавать перед распаковкой, посмотрим, что из этого получится..
Отредактировано Ace Lightning (2011-06-23 00:24:21)
Поделиться1462011-11-06 15:37:10
Я это сделал!!! Наконец-то я написал распаковщик!! yess1 yess1 yess1
Сегодня, когда сравнил дамп памяти эмулятора и мою распакованную последовательность, увидел заветное сообщение, которое я ждал так давно:
Теперь нужно найти всю графику, перерисовать и начать писать запаковщик. Так что перевод будет!!!!! yahoo
Отредактировано Ace Lightning (2011-11-06 15:38:19)
Поделиться1472011-11-06 18:49:36
Молоток!
Поделиться1482011-11-06 20:09:49
Кувалда!
P.S. На компе учетка понравилась.
Поделиться1492011-11-07 10:19:34
Киянка!
и начать писать запаковщик.
Запаковщик чуток сложнее писать, чем распаковщик: ведь надо не просто запаковать, а самым оптимальным способом. Хотя, если ресурс не влезет - его всегда можно перекинуть в конец рома.
Поделиться1502011-11-07 13:28:48
А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...
Поделиться1512011-11-08 14:48:09
А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...
Везёт Тебе...
Поделиться1522011-11-09 20:12:12
А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...
Краткость - сестра таланта B)