|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Zidane
Зарегистрирован: 24.03.2006 Сообщения: 24
|
Добавлено: Вс Апр 16, 2006 3:32 pm Заголовок сообщения: DTE изнутри (на примере FF4) |
|
|
Вот решил попробовать раскодить кодировку текста для FinalFantasy IV(II) на SNES.
Нашел то место где раскодируется она, и вписывается в память.
По адресу 7E0772 в RAM`e, во время первых фраз в игре: Crew:Captain Ceciel.........
Происходит следующее сначала вписываются 2 байта, потом раскодируется сам текст, и потом эти два байта меняются на B6 02.
За раз раскодируются 2 буквы.
Вписываются с помощью вот этих комманд:
......
LDA $139700,x[$13:9770]
STA $0774,y[$00:077C]
INY
LDA $139701,x[$13:9771]
STA $0774,y[$00:077D]
INY
.......
После выполнения комманды STA вписывается одна буква.
Я выкладываю лог, и таблицу символов, + адреса.
Каждый может сам проделать это, для того чтобы емму стало понятней.
ТЕПЕРЬ ПОМОГИТЕ ПОНЯТЬ ЧТО ДЕЛАТЬ, ЧТОБЫ РАСКОДИРОВАТЬ ЭТУ БАЙДУ. :D
Ставил два бряка на 7E0772 и 7E0774, на чтение запись и исполнение.
Всё происходит непосредственно перед выводом надписи на экран.
Я использовал для этого:
Ром с названием FF2.smc (взят с сайта www.shinra.ru)
Дебаггер Snes9X v1.43.ep9r8 - Geiger's Snes9x Debugger( http://geigercount.net/crypt/)
Лог http://gamems.narod.ru/Files/ff20000.log
Таблица http://gamems.narod.ru/Files/ff21.tbl |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Апр 16, 2006 7:38 pm Заголовок сообщения: |
|
|
Ого, экстремальным методом взломал обычное ДТЕ? Почитай доки (лучший док по DTE - help к проге Translhextion), здесь всё просто, это не запаковка, а просто оптимизация текста. |
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пн Апр 17, 2006 10:41 am Заголовок сообщения: |
|
|
Опять танкисты за воробьями охотятся. |
|
Вернуться к началу |
|
|
Zidane
Зарегистрирован: 24.03.2006 Сообщения: 24
|
Добавлено: Пн Апр 17, 2006 11:57 am Заголовок сообщения: |
|
|
Просто где-то здесь читал, что там применяется какойто свой способ шифровки. Ну и с Dte ещё не попадалось ничего. |
|
Вернуться к началу |
|
|
Zidane
Зарегистрирован: 24.03.2006 Сообщения: 24
|
Добавлено: Пн Апр 17, 2006 4:02 pm Заголовок сообщения: |
|
|
Почитал асм по снесу, посидел в дебаггере, сделал уже где-то 1/3 таблицы.
Вот она:http://gamems.narod.ru/FFIISNES.tbl
Пишу в ручную, копаясь в дебаггере. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Апр 17, 2006 4:12 pm Заголовок сообщения: |
|
|
Лучше бы не занимался ерундой, а нашёл в РОМе таблицу слогов и составил по ней таблицу за 5 минут. |
|
Вернуться к началу |
|
|
Zidane
Зарегистрирован: 24.03.2006 Сообщения: 24
|
Добавлено: Пн Апр 17, 2006 6:13 pm Заголовок сообщения: |
|
|
Да нету там этой таблицы, там "кодировка" раскладывается на символы, перед выводом раскладывается на отдельные буквы, а потом выводятся по отдельности, там же таблица символов - просто алфавит.
Но что-то пока не перевел вообще её, странно это как-то.
Вот доделаю таблицу, пусть потом кто захочет тот начнет переводить.
Я может буду переводить, а может и нет.
Мне было просто интересно разобраться, так сказать, поднять свой уровень. |
|
Вернуться к началу |
|
|
wl
Зарегистрирован: 20.12.2005 Сообщения: 76 Откуда: Россия
|
Добавлено: Пн Апр 17, 2006 7:21 pm Заголовок сообщения: |
|
|
оффтоп: на gba есть версия этой игры с официальным переводом |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Апр 17, 2006 8:59 pm Заголовок сообщения: |
|
|
Zidan писал(а): | Да нету там этой таблицы, там "кодировка" |
Посмотри внимательнее на код (прямо на те строчки, что ты запостил).
LDA $139700,x[$13:9770] - загрузить в регистр-аккумулятор байт из РОМа по адресу 13:9970, то есть в HEX-редакторе это адрес 99970h.
Там у нас лежит 6F (буква t, если сравнить по твоеё первой таблице).
STA $0774,y[$00:077C] - записать этот байт из аккумулятора в RAM (вот и вся "раскодировка", хех)
INY - сдвинуть курсор вперёд, чтобы использовать Y при следующей записи в память
LDA $139701,x[$13:9771] - прочесть в A второй байт слога (в DTE используется слоги только из 2 байтов). Заметь, здесь X - это смещение относительно базы 9700. По сути, для следующего (по порядку) слога X=72, то есть тогда в аккумулятор поочерёдно считается 2 байта - из 9772 и 9773.
Далее всё понятно и так.
Помимо знания асма, желательно бы понимать архитектуру платформы - знать, как распределяется память (на SNES с этим особый напряг - со всякими HiROM/LoROM и зеркальными отображениями/различными режимами использования).
Если посмотреть в HEX-редакторе РОМ игры (с хедером, то есть к 9770 надо добавить 200) вместе с твоей первой таблицей (которая без слогов, только с буквами), там ты увидишь всё слоги, идущие подряд (даже разделителей не поставили, ибо нет надобности, в общем-то). За ta идёт _b _l te и т.д. - это и есть та самая таблица слогов, о которой я говорил. Можешь теперь не изучать каждое значение X, а выписать все слоги себе в таблицу, даже не проверяя, как они выглядят в игре - ведь это первоисточник! Потом, когда нужно будет вставлять русский скрипт в игру, надо будет меня именно эту таблицу (вставлять туда наиболее часто повторяющиеся РУССКИЕ слоги). Всё 80 (128) слогов - 99900-999FF.
Можно предположить, что начало таблицы - 99914, то есть слог e_ (кодируется в скрипте байтом 8A, из-за которого X становится равным 14. {9,9770 + _200_ + [8A-80]*2} Но реально начало - в 99900, просто те первые 10 слогов ты бы не увидел, безоглядно экспериментируя в дебаггере.
Что касается вывода имён (Cecil/Kain/...) - смотри таблицу по адресу 7A910, это уже смахивает на MTE. Каждое имя отделяется байтом FF.
Zidan писал(а): | Мне было просто интересно разобраться, так сказать, поднять свой уровень. |
Это правильно, но ты слишком увлёкся, зайдя далеко в одном направлении. Иногда нужно проветриться (я в таких случаях собаку вывожу, иногда даже в 4 часа ночи), чтобы взглянуть на проект свежим взглядом и увидеть новый путь, более эффективный/остроумный.
Я думаю, раз уж эта тему появилась в Экстремальном ромхакинге, давай назовём её иначе - "DTE изнутри", чтобы другие могли понять, что на самом деле стоит за базовым ромхакингом (DTE - это базовый), как игра в реальности обрабатывает всё то, что ромхакер так запросто модифицирует (при переводе), даже не зная исполняемого кода.
Последний раз редактировалось: АнС (Пн Апр 17, 2006 9:02 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Апр 17, 2006 9:00 pm Заголовок сообщения: |
|
|
wl писал(а): | оффтоп: на gba есть версия этой игры с официальным переводом |
На SNES тоже, но всё равно фанский перевод (их даже несколько разных) лучше. |
|
Вернуться к началу |
|
|
Zidane
Зарегистрирован: 24.03.2006 Сообщения: 24
|
Добавлено: Вт Апр 18, 2006 11:39 am Заголовок сообщения: |
|
|
На счет таблицы погарячился.......
На счет X, ещё вчера сам понял(до поста)
А таблицу сам тоже нашел, после того, как ответил вчера проанализировав строки:
LDA $139700,x[$13:9716]
STA $0774,y[$00:079B]
INY
LDA $139701,x[$13:9717]
STA $0774,y[$00:079C]
На счет всех акумуляторов, X, Y тоже разобрался, но по началу пугала команда BEQ, в доках смущала надпись Branch ....., потом понял что это :)
Посмотрел память по 13:9716, и окончательно утвердился в этом.
Все равно, за все спасибо.
Кстати, нету на SNES ещё дебаггеров кроме Geiger's Snes9x Debugger,SNEMUL90 и Super Sleuth ?
В общем Geiger`s Debugger устраивает, но там немного не хватает Code Viewera как в SNEMUL90. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|