Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Переводы » Phantom 2040 (SNES)


Phantom 2040 (SNES)

Сообщений 41 страница 60 из 319

41

Так, я разобрался что делают все пять подпрограмм, правда как они это делают понятно пока только в трёх:
1. сдвигает флаговые байты на заданное аккумулятором количество бит, + грузит из рома новое значение аккумулятора.
2. строит таблицы смещений для двух режимов копирования - из рома и из распакованных данных (как пока не разобрался).
3. в зависимости от входного Y определяет смещение для копирования из распакованных данных или количество байт для копирования (из рома или из распаковки) (тоже пока не разобрался).
4. записывает значение аккумулятора в распаковку как 2 байта - это просто ;)
5. тоже, что и 4, но 1 байт.

Основная логика распаковки заключена в подпрограмме 3, так как основа программы просто циклично повторяет её с тремя разными Y (32, 160, 288) попеременно, и записывает результаты подпрограммами 4 и 5.

Однако для полного понимания алгоритма нужно разобраться в таблицах смещений второй подпрограммы.

42

Небольшое уточнение: первая подпрограмма не просто сдвигает флаговые байты, она переносит из флаговых байтов в выходной аккумулятор число бит (с каонца) заданное значением входного аккумулятора.

43

Надеюсь и верю.:)

44

Я тоже, я тоже...

45

Так, в алгоритме третьей подпрограммы я, вроде, разобрался, даже могу немного сам расчитывать значения флаговых битов по смещению и количеству байт для копирования. Попробую написать пакер без учета второй подпрограммы, просто копируя исходные данные по таблицам смещений из начала пакета в роме (только пока не ясно, как определять их размер, но, думаю, должно получиться).

46

Хотя нет, :( не получится: сразу за данными таблиц идет последовательность из 16 бит (не обязательно в два байта, может быть и в три, если последовательность начинается не с начала флаговых байтов), которая определяет количество повторений основного цикла (того, в котором третья подпрограмма повторяется по три раза за цикл), а это значит, что заранее узнать какое значение записывать в эти  флаговые байты не получится (да и само расположение второй половины последовательности может меняться), так как количество повторений вычислится только после запаковки пакета.

47

Хе-хе-хе, обратные подпрограммы 1 и 2 написаны и работают: заголовок пакета генерируется нормально, теперь нужно решить, как оставить место под счетчик основного цикла и можно будет браться за обратную подпрограмму 3 (4 и 5 простые, так что я на них даже напрягаться не буду :) )

48

Крутяк. Какой алшоритм для сжатия текста используется, кроме МТЕ?

49

Никакого, после распаковки пакета событий весь текст в нем можно увидеть применив таблицу МТЕ.

50

Потратив полдня на отладку, я получил таки рабочий алгоритм, правда отпускать его, думаю, пока рано, хоть он и делает 2-3 цикла выдавая на выходе данные идентичные оригинальному пакету, за ним еще следует последить (да и запись счетчика еще нужно дописать). Скоро уже закончу.

P.S.: Mefistotel, ответь в ЛС.

51

Да, был прав... Всё работает нормально, за исключением случаев, когда флаговые байты должны записываться за копируемыми из рома, а они пишутся перед ними :'( такая проблема была и с предыдущим пакером, буду дальше ковыряться, может пойму, где косяк.

52

Еще полдня экспериментов принесли плоды: пакер работает, правда с эффективностью пока проблемы, но это решаемо, главное - он сжимает по правилам, так, что анпакер всё обратно распаковывает.
Фух, умаялся...

53

:blink:  я в недоумении... Пакер работает лучше анпакера: после пробы пакета, запакованного пакером, помещенного на место оригинального в роме выявлена проблемка - при работе с оригинальным ромом данные, распакованные анпакером, не совпадают с данными распаованными игрой, однако, данные, запакованные пакером, после распаковки игрой, совпадают с теми, которые запаковывались пакером. Во как, по неисправному анпакеру был написан исправный пакер.
Буду теперь анпакер пытать...

54

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

55

Эх, максимум, чего смог добиться - экономия 73 байт относительно перврначального варианта, но проигрываю 54 байта относительно оригинала, я не знаю как заставить программу выбирать вариант менее выгодный на первый взгляд, после использования которого дальнейшее сжатие идет по более выгодному пути. Она у меня всегда ищет наиболее длинные цепочки, которые заменяет комбинацией флаговых бит, но иногда такие цепочки не очень выгодны и эффективность страдает. Лучше я уже вряд ли смогу сделать.
Печалька...

56

Есть же вероятность, что русский текст будет меньше английского. А если нет, то придётся сделать так. :)

57

Вероятность, конечно, есть, только вот еще нужно научиться укорачивать строки (да и вообще разобраться с командами событий), а то я пока определил несколько (два ;) ) управляющих байт, отвечающих за вывод текста (да и то не полностью).

58

Не, с командами событий разбираться не придется, оказывается разметка (поинтеры) пакетов событий находятся не в пакетах, а в роме :blink: так что теперь нужно просто найти всё пакеты и поинтеры и можно будет вытаскивать текст (ну и писать скриптер, учитывающий длину строк в пакет и в ром. Да такого еще не было, чтобы скриптер работал с двумя файлами и сохранял смещения текста в оба, причем по-разному: в ром поинтеры на блоки событий, в пакет смещения строк (однобайтовые относительно начала строки) предстоит немало попотеть  Sman

59

Решил разбить работу на два этапа:
1. Распознавание данных и их извлечение в текстовый файл (машинный скрипт)
2. Применение таблицы МТЕ к машинному скрипту и получение игрового текста (скрипт для перевода)

Возврат текста будет происходить аналогично, двумя этапами в обратной последовательности:
1. (3) Применение таблицы МТЕ к скрипту (тексту) и генерация машинного скрипта
2. (4) Вставка машинного скрипта в пакеты (с параллельным расчетом поинтеров и записью их в ром)

Причем программку для распознавания (пункт 1) я уже наваял, работает четко и быстро, аж сам не ожидал, думал, будет глючить нещадно, но нет.

60

Применялка МТЕ тоже готова, можно заниматься поиском пакетов и поинтеров ;)


Вы здесь » Chief-NET » Переводы » Phantom 2040 (SNES)