|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Чт Июн 24, 2004 7:52 pm Заголовок сообщения: Rings of Power [SEGA GENESIS] |
|
|
Rings of Power - это неординарная РПГшка, загубленная ужасной реализацией на толчковом (или как там назвали-то? ) движке на Sega Genesis.
Не выдержал я этих ваших стенаний и снова полез в РОМку RoP. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Чт Июн 24, 2004 7:54 pm Заголовок сообщения: |
|
|
Сразу же обнаружилась ещё одна подлянка, которую подстроили Naughty Dog. Неужели никто (Orlangoor, например) не пытался изменить пару байт в игре? Она же, зараза, чексумму проверяет программно!
Вот это они зря сделали, это только злит... Пришлось посидеть в отладчике... не оригинальные ребята оказались, в плане чексумм-то.
Короче, вот патчик, который убирает проверку чексуммы (ставить на bin), теперь каждый может править игру как хочет. Потому что я её переводить не собираюсь, могу только помогать советами, может ещё чего-нить взломаю, но мучаться с особенностями словарей я не собираюсь. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Чт Июн 24, 2004 7:56 pm Заголовок сообщения: |
|
|
Пара интересных адресов:
D6EBA - первое слово "An" Главного Словаря. Именно код 0001, потому что код 0000 используется для другого, это как бы код "нет слова". Слова в этом ничем не разделяются, представляют собой массив, из которого игра по Таблице Словарных Поинтеров выискивает нужное слово.
DC0C2 - Таблица Словарных Поинтеров. Стандартная таблица смещений, перевый поинтер 0000 указывает прямиком на D6EBA, то есть на слово "An". Соответственно, второй 0002 - на второе слово "unknown", 0009 - на третье, и т.д. Ну поинтеры и поинтеры, это ясно.
Скорее всего зажатый текст тоже хранится одним куском, но начало этого массива определить не так легко. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Чт Июн 24, 2004 7:56 pm Заголовок сообщения: |
|
|
Теперь немного о методе хранения текста в игре.
1. Таблицу для текста может сотавить любой - просто посмотрите на содержимое видеопамяти, там все буквы (тайлы) идут по порядку.
2. Текст хранится целыми словами, а не слогами, как в нормальных DTE/MTE. так как разных слов в игре явно больше 256 , то каждое такое слово кодируется 2 байтами. То есть всего по теории можно вместить 65536 слов, не в данном случае их гораздо меньше (читайте пункт 3) - где-то 16386 - вот почему я говорил, что для русского языка это будет весьма затруднительно - у нас одно только слово "ring" может переводиться как "кольцо", "кольца", "кольцу" и т.д., по всем падежам, то есть в словаре должно быть где-то раз в 6 больше слов. Не считал, сколько слов в оригинале (там ещё не один словарь, а несколько, это вообще маразм), но должно быть где-то 10 тысяч, то есть явно будут проблемы при переводе. Проблемы не в недостатке места - РОМ запросто можно расширить до 2 мегабайт и изменить поинтеры, но дальше 16 тысяч (или меньше, точно не знаю) не выйдешь - только если менять процедуру вывода текста, а это вообще конец света.
Да, предвижу такие варианты выкрутиться - типа, давайте в словарь заносить не целиком русские слова, а только корни, а окончания добавлять как отдельные слоги (короче, перейти от слов к слогам). Однако, это не удастся, и вот почему.
3. В тексте не используются пробелы - они ставятся игрой автоматически! Шибко умные разработчики таким образом нехило сэкономили место. В тексте почти после каждого слова есть пробел, и даже в словаре он тоже есть (слово под номером 0004), но в РОМе он встречается крайне редко - а в тексте в игре очень часто. Или не пробел, а точка (если слово в конце предложения), или вопросительный знак - это зависит от двух старших бит в коде слова (то есть, 00 - пробел, 40 - запятая, 80 - точка, C0 - ?, и ещё что-то там есть - сами проверяйте эмпирически. Хм, а может и не двух старших бит, а трех... влом проверять)
Просто игра понимает, что в словаре хранятся целые слова, и сама уже выравнивает текст, ставит пробелы между словами, либо точки (если видит код 0003, то выводит слово building (ну или то, на что ссылается третий поинтер из Таблицы Словарных Поинтеров), а за ним ставит пробел и читает РОМ дальше, а если видит 8003, то тоже выводит слово building и ставит точку).
Кстати, что хорошо - игра сама переносит слова на следующую строку, умная скотина. :twisted:
4. Процедура поиска сжатого текста в РОМе.
Слова в искомой фразе должны быть в главном словаре, то есть, если будут всякие Townsman, то эти я не искал, но принцип тот же, просто возможны глюки.
Я искал фразу "The Lobotomy Club sits atop". Кстати, чем длиннее фраза, тем меньше вариантов придётся отсеивать после Relative Search, но тем выше шанс ошибиться и ввести немного не ту последовательность, и вообще ничего не найти.
Значит у нас 5 слов, то есть 10 байт.
Смотрим по Главному Словарю - "The" лежит по адресу D6FB3. Если не уверены - лучше изменить букву и посмотреть в игре.
Считаем на калькуляторе D6FB3 - D6EBA = 00F9. По Таблице Словарных Поинтеров находим его по адресу DC11A.
Теперь надо определить какой это по счёту поинтер. Опять считаем на калькуляторе (DC11A - DC0C2) / 2 = 2C.
Значит "The" - это слово №2C, которое кодируется в РОМе как 002D (т.е. плюс единица т.к. считаем не с нуля).
Почему именно 00 2D - так как после слова идёт пробел, то будет 00, если бы была точка после слова, то было бы 802D.
Далее точно так же находим коды "Lobotomy", "Club", "sits", "atop".
Получаем строку в 10 байт: 00 2D 00 7B 00 7C 00 7D 00 7E
Тут дело такое... не факт, что мы всё учли, и в РОМе она будет лежать именно в таком виде. Вернее, насчёт 2D, 7B, 7C и других номеров слов мы уверены, а вот со старшим байтом можно ошибиться - кто знает, какую подлянку подстроят разработчики в очередной раз.
Поэтому можно сделать так - попробовать поискать простым поиском 002D007B007C007D007E, если не нашлось - относительным!
В данном случае всё нашлось и так - по адресу E0BFC.
Вариант с Relative Search - ищем:
2Dh
*
7Bh
*
7Ch
*
7Dh
*
7Eh
...и тоже что-то находим, может быть найдётся сразу несколько похожих строк, но среди них будет одна НАША! :D
Если в фразе есть слова из другого словаря, то лучше найти фразу рядом (или искать несколько слов из этого же предложения, которые есть в Главном Словаре), и посмотреть в Hexpose - как раз станет понятно, как кодируется другой словарь.
5. Ещё один прикол - строки в РОМе не отделяются спец.символом, точно так же как слова в Главном Словаре. То есть где-то есть таблица поинтеров на текст, по которой игра выуживает из массива закодированного текста нужную стоку и раскодирует её. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Чт Июн 24, 2004 8:01 pm Заголовок сообщения: |
|
|
Ффуу..... всё на сегодня.
Насчёт взлома шрифта - постараюсь (как сессия закончится), но ничего не обещаю.
А тему я создал именно в Экстремальном ромхакинге, потому что на данный момент игру невозможно перевести стандартными методами - вот когда кто-то напишет прогу, составляющую по зажатому тексту из РОМа оригинальные строки для игры (то есть напишет распаковщик) и наоборот (запаковщик), а также когда шрифт будет перерисован, то перевод этой игры может стать вполне доступным. |
|
Вернуться к началу |
|
|
Fish
Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
|
Добавлено: Пт Июн 25, 2004 10:21 am Заголовок сообщения: |
|
|
Вот за что я АнС'а люблю и уважаю! Good job!... |
|
Вернуться к началу |
|
|
Orlangoor
Зарегистрирован: 09.06.2004 Сообщения: 217 Откуда: Ярославль
|
Добавлено: Пт Июн 25, 2004 9:45 pm Заголовок сообщения: |
|
|
А я теперь тебя люблю и уважаю в 100 раз больше чем Фиш !!!!!!!!! Респектище тебе огроменный!
Вот только из за такой голимой системы словарей я даже незнаю как к это игрушке подступится .
Насчет проверки чексуммы - я это заметил - когда просто пытался подправить парочку слов из словарей. Однако решил это оставить на лучшие времена (то есть когда перевод будет более возможен).
К сожалению с такой системой, и таким громадным словарем, боюсь и в правду придется ждать когда кто нибудь более продвинутый в программировании напишет хоть какие нибудь вспомогательные средства.
Еще раз ОГРОМНОЕ спасибо АнСу!!! _________________ Человек не должен зависеть от длины своего меча. Миямото Мусаси "Книга Пяти Колец" |
|
Вернуться к началу |
|
|
RomaRS
Зарегистрирован: 02.07.2004 Сообщения: 225
|
Добавлено: Вт Июл 06, 2004 8:44 pm Заголовок сообщения: |
|
|
Видно - работает настоящий профессионал в своём деле. Уважаю. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вт Июл 06, 2004 9:22 pm Заголовок сообщения: |
|
|
Вообще-то над игрой никто не работает - я же написал, что не буду её переводить, я её даже пройти не могу - специально себя настраивал - всё равно не могу.
Я специально выложил все мои наработки (то, что успел за тот день, когда настроил себя, может ещё как-нить засяду - выложу патч с переведённой графикой), чтобы ЛЮБОЙ человек мог их взять (в первую очередь патч DeCheck) и попытаться перевести, если у него действительно будет такое сильное желание. Если будет желание - будут и силы для дальнейшего взлома, быть может и найдётся тот, у кого этих сил хватит для написания распаковщика, ну и так далее. |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Пн Окт 04, 2004 3:21 pm Заголовок сообщения: |
|
|
ICQ: 1120060 напишу распаковщик. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Окт 04, 2004 6:15 pm Заголовок сообщения: |
|
|
Crusader писал(а): | ICQ: 1120060 напишу распаковщик. |
Хы, outsourcing значит. А запаковщик кто писать будет?? |
|
Вернуться к началу |
|
|
IfritZ
Зарегистрирован: 13.11.2003 Сообщения: 40
|
Добавлено: Пн Окт 04, 2004 7:26 pm Заголовок сообщения: |
|
|
Да, АнС, ты настоящий мастер!
Но что-то мне подсказывает, что эту игру на русском никогда не увидеть... |
|
Вернуться к началу |
|
|
Delex
Зарегистрирован: 05.01.2004 Сообщения: 284 Откуда: Челябинск
|
Добавлено: Пн Окт 04, 2004 9:00 pm Заголовок сообщения: |
|
|
Crusader писал(а): | ICQ: 1120060 напишу распаковщик. |
бесплатно? _________________ ...пусть даже через сто веков в страну не дураков, а гениев... |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Вт Окт 05, 2004 6:55 am Заголовок сообщения: |
|
|
Напишу, бесплатно, т.к. в свое время играл в эту игру на SEGA и прошел. Прошел потому, что она мне понравилась.
А распоковщик, может быть общий не только для этой игры, а для всех.
Просто мне должен кто-то объяснить алгоритм запаковки(для чего я собственно и предоставил номер аськи). Просто я никогда не занимался переводом... Со слов АнС'а я примерно въехал, что нужно делать. Но без моральной поддержки сами понимаете... :)
Само собой это будет и распаковщик и запаковщик.
Вам останеться, только указать коды букв(распаковщику), перерисовать тайлы, и исправить чексумму. |
|
Вернуться к началу |
|
|
Amorpho[US] БесФорменный
Зарегистрирован: 16.12.2003 Сообщения: 161 Откуда: Воронеж
|
Добавлено: Вт Окт 05, 2004 11:05 am Заголовок сообщения: |
|
|
Crusader писал(а): | Просто мне должен кто-то объяснить алгоритм запаковки... | ГЫ! Зная алгоритм, любой из нас напишет и то и другое. _________________ Я вернулся!!! ...ну почти. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вт Окт 05, 2004 3:03 pm Заголовок сообщения: |
|
|
Amorpho[US] писал(а): | Crusader писал(а): | Просто мне должен кто-то объяснить алгоритм запаковки... | ГЫ! Зная алгоритм, любой из нас напишет и то и другое. |
Да, программировать тут все умеют. Дело не в этом. Запаковщик и распаковщик написать можно, но сам алгорится таков, что русский скрипт он будет сжимать в 6 раз хуже, чем английский. Ну и ладно бы только это, расширить РОМ и всё, но дело в том, что там есть чисто физическое ограничение - в словаре не может быть больше (2^14) = 16384 слов. Подумайте, сможет ли такой большой срипт в игре в русском переводе состоять только из 16 тысяч слов? Вот только в этом моём сообщении уже примерно 80 слов, то есть вся игра (весь текст) должна будет вместиться в 200 вот таких фраз, как эта. Как вам такая ситуация? Аморфус, скажи, реально ли изменить код распаковщика на более простой? Причём наверняка придётся изменять код не в одном месте... |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Вт Окт 05, 2004 5:38 pm Заголовок сообщения: |
|
|
Может я тебя плохо понял, но мне не кажеться, что это можно исправить(чем я сейчас и занимаюсь).
Пример:
слово "little" - размер 6 байт. Находиться по адресу 0x00002 следующее слово "huge", находиться по адресу 0x00008, т.е. сразу за ним.
Поинтер для "little" например 02h значит поинтер для "huge" 08h.
После того как мы переделали слово "little" в слово "маленький" мы записываем слово "huge" по адресу 0x0000B т.е. сразу за словом "маленький". И соответственно смещаем адреса остальных слов. Поинтер для "huge" мы соответственно тоже переделывам...
С выше описаным я проблем не вижу... Можно будет также добавлять свои слова. И давать им адреса. |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Вт Окт 05, 2004 6:06 pm Заголовок сообщения: |
|
|
На данный момент готов только распаковщик... но работает пока плохо, т.к. не знаю коды всех знаков препинания. Главное текст расспаковывает...
http://bpks.ru/pakunp.rar
В командной строке давайте ему файл RoP.bin (pakunp.exe RoP.bin)
Он создаст файл RoP.bin.txt. в нем все, что ему удалось распаковать... |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вт Окт 05, 2004 10:35 pm Заголовок сообщения: |
|
|
Crusader писал(а): | С выше описаным я проблем не вижу... Можно будет также добавлять свои слова. И давать им адреса. |
Нет проблемы с распаковкой. Но ты подумай - в русском варианте это слово little превратится в 7 слов: маленький, маленькая, маленькое, маленьких, маленьким, маленькими, маленькие. Ну и т.д.
Особенность данного алгоритма в том, что он отличается от словарного MTE - он хранит целые слова, а не слоги, и сам расставляет пробелы и точки между этими словами. Поэтому, так как в русском языке примерно в 6-7 раз больше слов (так как однокоренные слова, отличающиеся всего на одну букву, уже считаются отдельным словом), то и переведённый скрипт сожмётся, в 6-7 раз хуже. |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Ср Окт 06, 2004 7:17 am Заголовок сообщения: |
|
|
Я уверен, что в игре должен быть обработчик (без него не обойтись), он переносит слова, ставит пробелы, запятые, точки и т.д. А это означает, что проблему, со знаками препинания, можно решить... Добавив в обработчик еще одно событие и на это событие никак не реагировать...
Например в обработчике встречаеться 00h после фразы - он ставит пробел. А если например заменить, этот байт другим - несуществующим в сравнении обработчика, вряд ли он поставит какой-то знак препинания... А если и поставит, то нужно будет присвоить ему, вот такой символ "". Следовательно следующее слово уже не будет писаться отдельно, а соединиться с предыдущим.
А это можно использовать в корыстных целях :)
Хотя возможно я сейчас сморозил глупость, и разделение, будет всеравно присутствовать, так как байт 00h например номер тайла... |
|
Вернуться к началу |
|
|
Orlangoor
Зарегистрирован: 09.06.2004 Сообщения: 217 Откуда: Ярославль
|
Добавлено: Ср Окт 06, 2004 8:11 am Заголовок сообщения: |
|
|
Цитата: | Например в обработчике встречаеться 00h после фразы - он ставит пробел. А если например заменить, этот байт другим - несуществующим в сравнении обработчика, вряд ли он поставит какой-то знак препинания... А если и поставит, то нужно будет присвоить ему, вот такой символ "". Следовательно следующее слово уже не будет писаться отдельно, а соединиться с предыдущим. |
А ведь действительно может так получится... Тогда может даже моя любимая игра будет переведена! Жду результатов исследования обработчика. _________________ Человек не должен зависеть от длины своего меча. Миямото Мусаси "Книга Пяти Колец" |
|
Вернуться к началу |
|
|
Amorpho[US] БесФорменный
Зарегистрирован: 16.12.2003 Сообщения: 161 Откуда: Воронеж
|
Добавлено: Ср Окт 06, 2004 11:53 am Заголовок сообщения: |
|
|
АнС писал(а): | Аморфус, скажи, реально ли изменить код распаковщика на более простой? Причём наверняка придётся изменять код не в одном месте... |
Ну а как же! Тем более других способов не видно... _________________ Я вернулся!!! ...ну почти. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Ср Окт 06, 2004 4:53 pm Заголовок сообщения: |
|
|
Crusader писал(а): | Я уверен, что в игре должен быть обработчик (без него не обойтись), он переносит слова, ставит пробелы, запятые, точки и т.д. А это означает, что проблему, со знаками препинания, можно решить... Добавив в обработчик еще одно событие и на это событие никак не реагировать...
Например в обработчике встречаеться 00h после фразы - он ставит пробел. А если например заменить, этот байт другим - несуществующим в сравнении обработчика, вряд ли он поставит какой-то знак препинания... А если и поставит, то нужно будет присвоить ему, вот такой символ "". Следовательно следующее слово уже не будет писаться отдельно, а соединиться с предыдущим.
А это можно использовать в корыстных целях :)
Хотя возможно я сейчас сморозил глупость, и разделение, будет всеравно присутствовать, так как байт 00h например номер тайла... |
Там другой метод расставления пробелов и точек, я же написал о нём ещё тогда, раньше.
Каждое слово кодируется 2 байтами, то есть 16 битами, но 2 старших бита - это код знака препинания после данного слова.
Код: | AABBBBBBBBBBBBBB
^ ^
| [номер слова в словаре]
[код] |
00 - пробел
01 - точка
10 - вопрос
11 - запятая |
|
Вернуться к началу |
|
|
Crusader Гость
|
Добавлено: Пт Окт 08, 2004 1:44 pm Заголовок сообщения: |
|
|
Распаковщик, полностью готов!!!
http://bpks.ru/pakunp.rar
Можете пока переводить, текст!
Максимум через 2-е недели будет готов и упаковщик. |
|
Вернуться к началу |
|
|
Orlangoor
Зарегистрирован: 09.06.2004 Сообщения: 217 Откуда: Ярославль
|
Добавлено: Пт Окт 08, 2004 3:24 pm Заголовок сообщения: |
|
|
А как ситуация со знаками препинания? _________________ Человек не должен зависеть от длины своего меча. Миямото Мусаси "Книга Пяти Колец" |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|