Я присылаю тебе две самые нужные и необходимые проги для начала перевода. Далее я объясню их суть и назначение. Так, ладно. Я сам дам тебе пока небольшое разьяснение о том как переводить игры.
Итак, немного теории. Первое, что сразу хочу заметить, тебе необходимо хотя бы худо-бедно знать и уметь работать с 16-ричными редакторами. Не бойся, это совсем не сложно. Основное отличие их от обычных редакторов, это то, что экран разбит на две колонки - в одной(справа) расположен обычный текст, а в другой(слева) - 16-ричные значения каждой буквы(или символа) и 16-ричный адрес каждой строки. В правой колонке с текст можно вводить прямо с клавиатуры, нажимая нужные клавиши с буквами, а в левой буквы или символы можно вводить указывая только указывая 16-ричный код каждой буквы или символа, а адреса указанны для удобства поиска, перемещений с одного места на другое и для запоминания(адрес обычно пишется так $000295A45, где $ указывает на то, что это адрес, а не просто 16-ричное значение). Наглядно в этом убедиться ты можешь в приложенном мной hexpose.rar - это и есть 16-ричный редактор, в который добавлены дополнительные функции для перевода. Распакуй его и попробуй загрузить в него какой-нибудь текстовой файл(обязательно в ДОС-кодировке, т.к. это ДОСовская программа), теперь подвигай стрелками курсор, видишь - выделяешь 16-ричное значение, а справа выделяется соответствующая этому значению буква. Все очень просто, но если знания у тебя "нулевые", то, как ты, наверное, знаешь, в компьютере данные хранятся и обрабатываются в битах - простейших значения равных или 0 или 1. Если ты немного знаком с радиоэлектроникой, то знаешь, что есть такая штука - транзистор, который при определенных обстоятельствах может быть "открытым" и пропускать ток, или "закрытым" и не пропускать, а процессор и является огромной кучей(около 10 миллионов) транзисторов, собранных на одной интегральной схеме(кристале процессора), поэтому 0 и 1 и являются показателем замкнутости или разомкнутости одной из логических цепочек процессора(т.е. одного из миллионов его транзисторов). Но, как ты понимаешь, работать с одними битами было бы несколько неудобно, поэтому их стали объединять в байты - один байт равен 8 битам и имеет значения от 0 до FF, т.е. от 0 до 255, потому что как не трудно догадаться, если произвести несложный математический расчет, что максимальное количество значений, которые может принимать последовательность из восьми двоичных чисел равна 256. Для некоторых это немного странно и непонятно, но 16-ричных формат чисел гораздо удобней - суди сам - что лучше FF или 255, FFFF или 65535. Все это ты свободно можешь посчитать в Виндовском калькуляторе, но просто, чтобы ты знал, смысл 16-ричного фомата(далее буду называть его просто "Хексом") в том, что в нем в одной "десятке" 16 чисел. Мы, например используем 10-ричную систему, где счет идет от 0 до 9(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), а в хексе от 0 до F(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F), а комп, как я уже говорил выше, использует двоичную, там счет идет от 0 до 1. Попробуй поэксперементировать с этими системами в Виндовом калькуляторе(в "Виде" включи "Инженерный"), например, в 10-ричном режиме введи какое-нибудь офигительной длинны значение, а затем ткни "Hex" и увидишь насколько в этом числе стало меньше цифр. В общем ладно, это были основы, если ты всего этого не понял, то и не стоит слишком вникать - это собственно к переводу не относится.
Идем дальше. Про хекс я тебе рассказывал потому, что все данные в компьютере хранятся в нем, ты же в курсе, что информация хранится в байтах, а байт, как я и говорил, и есть 16-ричное значение от 00 до FF. Помнишь, я говорил тебе раскрыть в Хекспозе(Hexposure, тот хекс-редактор, который я приложил к письму) текстовой файл? Там было наглядно видно, что каждая буква имеет свой хекс-код(на всякий случай напомню, что я называю "хексом" 16-ричный формат данных, по-английски 16-ричный пишется Hexandesimal или просто Hex), так вот, существует множество разных кодировок для букв, но есть несколько основных стандартов - ASCII, KOI, WIN, ISO и т.д. Каждая из них представляет собой набор символов, букв и цифр, выстроенных в определенной последовательности и в каждой из этих кодировок символы, буквы и цифры имеют свой хекс-код. Если у тебя установлена Виндовская прога "Таблица символов"(Программы --> Стандартные --> Служебные), то ты сможешь наглядно убедится в этом(выбери шрифт "Terminal" и ты увидишь стандартную ASCII-кодировку). Так вот, такой же принцип размещения текста используется и в играх. Во многих играх используется кодировка ASCII, но, к сожалению, ДАЛЕКО не во всех, гораздо чаще в каждая игра имеет свою кодировку текста, например, в ASCII баква A(английская) соответствует значению 41h(маленькая буква h обозначает, что данное число в 16-ричном формате, запомни, еще понадобится), а в игре значение может быть и 0Ah, например. Для этого во многих редакторах для перевода введен "Относительный Поиск"(Relative Search), принцип его работы заключается в том, что ты вводишь какое-нибудь слово, которое ты видел в игре, а редактор ищет его из расчета, что буквы в кодировке этой игры расположены по алфавиту(т.е. A, B, C, D, E, F, G, H, I..., X, Y, Z - в такой последовательности они расположенны в ЛЮБОЙ игре, вне зависимости от кодироки) и быстро перебирает все возможные значения для букв и как только находит нужные значения, сообщает об этом и выводит результаты поиска. Допустим, ты ввел слово happy, и поиск вывел тебе, что h=28, a=21, p=30, y=39. Теперь, когда у тебя есть значения каких-то букв, оставшиеся будет очень легко найти: если а=21, значит b=22, c=23, d=24, e=25, f=26, g=27, h=28(видишь, значение, выданное в поиске, соответсвует тому, что мы вычислили), i=29, j=2A, k=2B, l=2C, m=2D, n=2E, o=2F, p=30, q=31, r=32, s=33, t=34, u=35, v=36, w=37, x=38, y=39, z=3A. Только ЗАПОМНИ: нельзя вводить слово, которое содержит и заглавные и строчные буквы! Потому что заглавные и строчные буквы могут идти или раздельно или вместе и расположенны могут быть по-разному. Т.е., чтобы получить кодировку строчных букв вводи слово состоящее только из строчных, а чтобы получить кодировку заглавных - только из заглавных. Но, т.к. слов из заглавных букв в игре не так уж и много, можно просто найти слово, в котором есть заглавная буква найти кодировку строчных букв этого слова и посмотреть на то место, где стоит заглавная, там будет хекс-значение и зная его и букву, которую оно обозначает, ты уже легко найдешь все остальные буквы.
Обрати внимание на то, что в буквы в 16-ричных значениях пишутся С БОЛЬШОЙ БУКВЫ, запомни, это ОЧЕНЬ важно!!!!! Теперь, зная эти значения, ты можешь уже, хорошо приглядевшись, различать в хекс-коде(левой колонке) слова, а, вводя другие значения, и менять эти слова. Но как ты понимаешь, довольно неудобно, надо помнить хекс-значения всех букв, да и запутаться очень легко, поэтому во всех прогах для перевода есть функция автоматического распознавания и декодирования кодировок букв и отображения их в нормальном виде. Это делается с помощью специальных таблиц. Примеры таких таблиц ты найдешь во все том же hexpose.rar, раскрой в Виндовом блокноте файл cv2.tbl(это таблица к игре CastleVania2), видишь, все просто - здесь введены хекс-значения и их буквенный или символьный иквивалент. Но особенностью именно Хекспозы является то, что название таблицы должно быть таким же как и название файла с РОМом переводимой игры(т.е. если cv2.tbl, то РОМ должен называться cv2.nes)Думаю, тут особенно нечего объяснять, тебе, наверное, интересно, что это за *=FE и /=FF, не так ли? Здесь тоже все просто * обозначает конец строки, а / - конец сообщения. Это значит, что * используется как клавиша Enter, т.е. заканчивает вывод текста на данной строке и перескакивает на следующую(в Хекспозе, в колонке справа с текстом это обозначается красной стрелкой вниз), а / означает, что данный текст закончился, прекращает вывод текста, или переходит от данной к другой фразе диалога или к другому тексту(в Хекспозе обозначается красным квадратом). Эти значения в Относительном Поиске(все его называют РелативСерч) не ищутся, тебе придется самому их вычислять, но это тоже просто - допустим ты уже составил таблицу и уже видишь текст, например идет какая-то строка и после какого-то слова стоит какая-то точка(при использовании таблицы Хекспоза все не указанные в таблице значения указывает в виде точек), выделяешь эту точку и видишь, что ее значение, например E8 и далее после еще нескольких слов стоит еще одна точка, но ее значение E9. Запоминаешь эту строк, эатем берешь эмулятор, раскрываешь в нем этот РОМ и ищешь в игре эту строку. Допустим в Хекспозе ты видел примерно такую строку: That`s really.great!. где первая точка - E8, а вторая Е9, а в игре эта надпись выглядит так: That`s really great! и затем диалог или прекращался или начинался другой, следовательно, Е8 обозначает *, т.к. после нее текст перескакивает на следующую строку, а Е9 означает /, т.к. после нее данны текст заканчивается. И вообще, надо заметить, что ты кроме букв Релативсерчем ничего не найдешь, всякие символы, знаки препинания и прочее тебе придетя искать самому подобным способом - смотреть где в игре находятся точки, запятые и т.п. и затем, находя эти строчки в Хекспозе смотреть где там стоят точки(т.е. неизвестные символы, отсутствующие в таблице), только смотри не перепутай их с настоящими точками, если они уже есть в таблице :-)). Кстати, чуть не забыл, пробел тоже символ!!! Писать его надо так: открываешь таблицу в Блокноте, в таблице пишешь хекс-код пробела, ставишь = и нажимаешь пробел(один раз!), убедись, что пробел стоит, выделив написанное мышью, иначе вместо пробелов будут одни точки :-). Надо еще заметить, что бывают всякие байты, обозначающие притормаживание вывода текста и прочую чушь, здесь тоже надо выяснять эксперементальным путем - попробуй или убрать это значение(поставив пробел), или изменить, сохрани изменения и запусти этот РОМ если игру в месте, где ты изменил это значение проглючит, значит его трогать не надо :-)), т.к. это, возможно, кусок програмного кода, и к тексту он не относится. Там еще бывают некоторые ньюансы, например кодирование и компресование текста, и на игру, в которой оно тебе встретилось можешь сразу забивать :-)), но это довольно редкое явление. Есть только один(вернее, два) тип компресии(сжатия) текста, который можно декодировать, не зная ассемблера - это DTE. Смысл в том, что каждый хекс-код обозначает две или три буквы. Посмотреть на него ты можешь в приложенном к Хекспозе ff1e.tbl - это таблица для Final Fantasy 1 на Денди. Такая кодировка используется, по-моему, только в играх Square. Хотя есть еще один тип, но я его кодировкой не считаю - это словари. Принцип прост: вычисляются самые часто-повторяющиеся слова в тексте и их выписывают и располагают одним блоком и каждому слову в тексте соответствует одно- или двухбайтное значение. Я сам с такой с этими кодировками толком не работал, поэтому ничего определенного сказать не могу.
Теперь другой вопрос - принципы расположения текста в РОМах. Само расположение бывает двух типов: блоками или разбросаным по всему РОМу. Думаю из самих слов уже понятно, что блоки - это когда весь текст выстроен строчка за строчкой в одном или нескольких местах, образуя блоки, а когда текст разбросан по всему РОМу соответственно напротив - строки лежат то тут, то там. Как ты догадался, лучше первый вариант ;-). Для организации текста существуют три основых системы: Пойнтерами(With Pointers) Последовательный Текст(Sequetial Text) Фиксированная Длина(Fixed Lenght) Сразу говорю, что устанавить какая из этих систем использована в каком-то конкретном РОМе можно только эксперементальным путем. Подробно на этом останавливаться не буду, просто расскажу как каждая из них действует, а ты, думаю, уже сможешь разобраться как их определять. Итак, когда использована организация текста пойнтерами, то ты как бы ограничен для перевода длиной этой строки(т.е. была строка That`s OK. - вот и думай как ее перевести, чтобы уместится в то количество символов, которое она занимает, т.е. 10 букв, символов или знаков и не более!). Все дело в том, что пойнтер - это как бы указатель на то место расположен текст или какая-то строка, он указывает на первую букву после /(красного квадрата в Хекспозе, обозначающего конец строки, лично я называю его ). Еще раз, на всякий случай, повторю - - это я так называю байт, обозначающий конец строки(в таблице /)!!!! Например, в Хекспозе ты видишь такой текст: We go there.Yes, let`s go! Значит его в данном случае можно перевести так: Идем туда. Да, пойдем! Ты, наверное, заметил, что все остались на своих местах. Верно, их НЕЛЬЗЯ перемещать, или стирать, т.к. в програмном коде указано, что первая фраза начинается там, где находится буква W, а вторая - там, где Y. А байт просто нужен для прекращения вывода текста после конца предложения. Как видишь это довольно неудобно, т.к. не всегда можно поместиться в отведенное место, а иногда остается много лишнего места, но ничего не поделешь. Тут, в принципе, можно сделать небольшую уловку и поменять пойнтеры, но это довольно сложно, а тебе на данном этапе это будет понять еще сложнее, поэтому я об этом тебе позже расскажу, когда переведешь несколько игр и набьешь руку. Противоположностью этой системе является Последовательный текст. Разница в том, что ты можешь с ней написать перевод так: We go there.Yes, let`s go!Мы идем туда.Да, пойдем! Как видишь, оба байта передвинуты, но текст в игре так и будет отображаться как надо, потому что здесь уже байт определяет не только конец предыдущей, но и начало следующей строки. Эта система удобна, т.к. позволяет менять длину строки, но, к сожалению, такая система встречается нечасто. Но если она тебе встретится, помни, она действует ТОЛЬКО в пределах какого-то диалога, разговора, события! Здесь тоже используются пойнтеры - пойнтер указал на начало диалога, а дальше строки переключаются байтом , и так ТОЛЬКО до следующего диалога, т.к. на него снова указывает пойнтер. Отличить первую систему от второй очень просто, например так: We gothere.Yes, let`s go! То есть поставить в середине первой строчки байт и посмотреть, если в игре ты увидишь, что первая фраза прервалась(она и должна была, т.к. поставили ), а следующая за ней не изменилась, то использована первая система - с пойнтерами, а если вместо следующей строки ты видишь обрывок предыдущей, значит значит использована вторая система - последовательный текст. Насчет системы Фиксированная Длина могу сказать, что пока для себя можешь считать ее эквивалентом первой системы - тут ты тоже ограничен двумя байтами с двух строн, отличие в том, что даже изменив пойнтер, длину строки ты не изменишь(название само за себя говорит). Эта система для текста почти не используется, в основном для менюшек или предметов в РПГшках. -=НО!=- Прежде чем что-то делать в Хекспозе, ОБЯЗАТЕЛЬНО почитай приложенный текстовик о том как пользоваться этой прогой(!!!), прежде чем задавать мне какие-то вопросы о ней, причем читай внимательно, там немного рассказано о том, что тебе рассказал я. Ну, насчет текста пока все, теперь переходим к другому, не менее интересному разделу - Рисование русских букв.
Тут все уже гораздо проще. Я прислал тебе один из лучших редакторов графики в РОМах - Tile Layer Pro. Процесс прост как три рубля - открываешь РОМ, выбираешь тип РОМа(т.е. для какой приставки этот РОМ). Думаю с интерфейсом этой проги у тебя проблем не возникнет(если возникнет - пиши), так что на этом я останавливаться не буду. Затем ищешь где находятся буквы, тыкаешь мышой в эту букву и в маленьком окне справа точками рисуешь нужную тебе букву. Если ты нашел буквы, но они лежат не по клеткам, или покрыты всякими глюками, то, удерживая Ctrl, нажимай курсорными клавишами Вправо или Влево, пока буквы не встанут СТРОГО по клетка(чтобы не вылазили ни снизу, ни сверху, ни справа, ни слева), и не исчезнут глюки. Сразу хочу сказать, что буквы совсем не обязательно могут быть нарисованы в РОМе в формате данной приставки, на Сеге, например, бывают буквы в формате 1bpp(причем, довольно часто), или 2bpp. Это делается с целью экономии места на картридже(сам посуди, что больше 1 бит на пиксель(1bpp) или 4 бита на пиксель(4bpp)?). То есть, если ты загрузил, допустим, Сеговский РОМ, включил режим Genesis(т.е. естественный для Сеги режим графики), просмотрел весь РОМ, а никаких намеков на буквы так и не нашел, значит шрифт или закомпресован(что ПОЛНОСТЬЮ исключает возможность перерисовать его), или находится в другом формате, попробуй просмотреть РОМ, используя другие форматы(в основном пробуй 1bpp, или Gameboy, остальные используются гораздо реже). И еще, когда будешь перерисовывать буквы, рисуй их ТЕМ ЖЕ цветом, что они были до этого, а то глюки будут. Тоже КРАЙНЕ рекомендую почитать документацию, прежде чем что-то рисовать.
Теперь немного практической части. Тут последовательность твоих действий должна быть такова: сначала открываешь выбраный тобой для перевода РОМ в Тайл Лейере(Tile Layer) и ищешь буквы, но если найдешь, пока не меняешь(это нужно, чтобы узнать, имеет ли смысл искать там кодировку для текста и терять время, т.к. если ты букв не найдешь - ты эту игру уже точно не сможешь перевести, думаю, понятно почему :-)). Итак, если первая фаза пройдена успешно, дальше тебе нужно открыть РОМ в Хекспозе и найти кодировку(я уже рассказал как, читай выше, если забыл). Кстати, если не можешь найти кодировку какого-то символа - используй Тайл Лейер! Там они нарисованы в ТОЙ ЖЕ последовательности, как они идут в кодировке! Если ты, допустим, не можешь найти хекс-код запятой, а в Тайл Лейере видно, что эта запятая идет за буквой Z, значит пиши следующее после Z значение(если у Z хекс-код 3A, значит у запятой в данном случае будет 3B), это НАМНОГО упрощает нахождение хекс-кодов для символов. Ну вот, таблица составлена, теперь возвращайся к еще раскрытому(я надеюсь :-)) окну с Тайл Лейером и начинай перерисовывать английские буквы в русские(можешь выстроить буквы в алфавитном порядке, а можешь на месте английских ставить созвучные русские(вместо Z ставить З, вместо U ставить У и т.д.) - это на твое усмотрение, как тебе удобно, лично я всегда ставлю в алфавитном порядке - так проще потом таблицу составлять). Сразу запоминай(а лучше - записывай), какую ты букву на какую поменял. Ты, возможно, спросишь: ведь в русском алфавите букв поболее, чем в английском, куда же оставшиеся девать? Во-первых, выбрасывай ненужные буквы, например, если в игре нет слов, состоящих из одних заглавных букв, то можно спокойно выбросить заклавные буквы Й, Ь, Ы, Ъ, т.к. с этих букв слова не начинаются. Ну а букву Ё можно выбросить и для строчных и для заглавных. Далее, ставь буквы поверх ненужных тебе символов(зачем тебе, например, символ $, или & ?). В общем, при желании вполне можно затолкать русский алфавит. Когда закончишь перерисовывать буквы, сохрани РОМ с другим именем. Теперь сделай копию составленной тобой таблицы и дай ей имя такое же как и сохраненному тобой только что РОМу с перерисованными буквами. Раскрой ее в ДОСовском редакторе(в FAR`е, NORTON`е и т.п.), т.к. Хекспоза - ДОСовская прога, а на русские буквы в Винде другая кодировка, затем включи русский шрифт(Shift+Ctrl справа) и заменяй в ней старые английские буквы на те, которые ты на их место поставил(!). Ну вот, в принципе, и все. Теперь раскрывай два окна Хекспозы - в первом английский неизмененный РОМ, а во втором - РОМ с уже перерисованными буквами. В первом ищешь какую-нибудь строку, смотришь на ее адрес, и во втором тыкаешь F1 и вводишь этот адрес. Как ты заметил, во втором окне вместо текста одна чушь - все правильно, если сейчас запустишь этот РОМ ты увидишь ту же чушь - ты же буквы поменял, но ведь текст остался старый, поэтому писать текст во втором окне придется, ориентируясь на то, как он идет в первом окне - там он в нормальном английском виде. Когда будешь вводить текст, ОБЯЗАТЕЛЬНО(!!!) учитывай, что количество символов, умещающихся на одной линии в любой игре ограниченно!!! Эксперементальным путем установи сколько умещается и переноси специальным байтом(который в таблице обозначается как *, я уже об этом выше рассказывал), его кстати можно легко ввести, нажав ENTER, а вот байт нужно вводить в левой колонке, вводя его хекс-код, если ты, допустим, переводишь РОМ с Последовательным Текстом.
1199 Прочтений • [С самого начала] [07.08.2012] [Комментариев: 0]