Перейти к содержимому
Zone of Games Forum

Renesso

Новички+
  • Публикации

    19
  • Зарегистрирован

  • Посещение

Все публикации пользователя Renesso

  1. Grandia 2

    @Krent Вот посмотри, это хотел? https://yadi.sk/d/gnJZi077y0vnpg
  2. Grandia 2

    Могу переделать дампер. Есть 2 варианта: Вместо японских символов будут их игровые коды. Например {EC}{27}{B5} и сравнивать с таблицей символов. Читабельность так себе, конечно. Прога сама будет подставлять нужные иероглифы, но нужно сопоставить символы из UTF с символами в игре. Например: {30} — 0 {31} — 1 … {74} — ち … {D3} — ヒ и т.д. В вики алфавит хирагана и катакана есть, но не понятно, чем отличаются допустим символы {54} и {55}, {56} и {57}. Есть проект Grandia II Undub/Retranslation. Там вроде исправили эти неточности.
  3. Grandia 2

    Попробуй в hex-редакторе заменить символы, используя эту таблицу:
  4. Grandia 2

    @X-NET Там особо переделывать не надо, когда mdf-файл будет готов, в hex-редакторе обрезать лишнее и посмотреть какие отличия между оригинальными файлами, чтобы их тоже исправить, как в примере выше. Процедура будет одноразовая, но со всеми mdf-файлами перевода. Других вариантов у меня нет.
  5. Grandia 2

    @X-NET scn файлы — это вырезка текстового блока из mdf файлов Anniversary Edition. Там есть некоторые различия, но скорее косметические. Например в файле d000 только одно отличие. По идее можно перевести Anniversary Edition, а затем из её файлов создать scn для HD Remaster. На тулзу времени нет, тем более я её просто доработал и исправил баги, а тут уже посложнее задача.
  6. Grandia 2

    Он необходим для отображения текста в меню, т.е. всё из strings.txt проходит через него. Это что то типа карты-соответствия hex-кодов букв и их места в gr2f24m.frde.dat В принципе он нам не нужен, так как шрифт просто перерисован.
  7. Grandia 2

    @ivdos С переводом scn проблем нет, там формат такой же как и в Anniversary. Только блок текста выдран из mdt в отдельный файл. Ну это ты уже и так понял. Тулза для вытаскивания/вставки текста работает только с конструкцией mdt файлов, поэтому после их перевода можно сделать scn. Другое дело, что перевод этот морока ещё та. Переделал файл шрифта из Anniversary для Remaster: https://yadi.sk/d/hVpYKBakEoUD4w Верхние русские символы нужны для текста, берущегося из scn, нижние — для отображения из strings.txt. В архиве также файлы для теста и таблица соответствия букв с их hex-соответствиями для strings.txt. Считаю, это лучше вариант, чем ковырять экзешник. Есть идеи как игра подменяет имена вещей/магии ,используя коды типа “83cd7fa1=”, у французов и немцев?
  8. Grandia 2

    Графика — последнее, что меня волнует. Её можно сделать в любой момент. Не надо ничего препарировать. Шрифт, отвечающий за этот список лежит в Grandia II Anniversary Edition\data\afs\title_data Там 2 файла: gr2us.FST и gr2f24m.dat Из архива со шрифтом заменяй эти 2 файла, предварительно переименовав второй. Разобрался. Бери этот файл https://yadi.sk/d/4lQHzPekD4F7HA и кидай в \Grandia II Anniversary Edition\data\afs\title_data Заменяй символы в .exe согласно таблицы Не вижу только пока смысла в этом, там строки жёстко закодированы и изменить их длину в hex-редакторе не выйдет, но с помощью радиаликса можно сделать.
  9. Grandia 2

    @x-net Hex-редактор. Вот выпотрошенный файл с названиями и описаниями: https://yadi.sk/i/L5MjhtH8EFRWuA Хэштег там как разделитель.
  10. Grandia 2

    @x-net Это даже не скрипт, простая расчётка в экселе с забитыми ширинами символов. После ввода строки текста указывает, войдёт ли всё или же придётся делать перенос. https://yadi.sk/d/B3wKmmc8aWy2eg В первый столбец вгоняется строка выводимого текста без тегов (<newline>, <pause> и проч.), если выделилась красным, то надо переносить. Решение не очень удобное, но лучше, чем ничего. В саму игру не играл, пару раз запускал, но ужасный шрифт отталкивал и сразу выходил. Это и побудило разобраться в возможности перевода На мой взгляд, лучше не ориентироваться ни на какой из них, но здесь зависит от уровня знаний английского и русского языков и умения ими пользоваться.
  11. Grandia 2

    @x-net Если хочешь увидеть результат, то делай так: Пример для файла d000.mdt, это начальная заставка. С помощью проги дампишь вышеназванный файл. Смотри только, чтобы в конце не было приписки <bigFont XXXX/>, где XXXX - 2 байта. Об этом писал в readme к проге. Не знаю почему баг иногда вылазит. Получится такой файл: https://yadi.sk/i/D8jIT1gzOkI4AQ Удаляешь в получившемся txt файле {00} в конце строк. Станет так: https://yadi.sk/i/1_0uZAMmT9rCyw Изменяешь текст на тот, который хочешь. Обязательно в кодировке ANSI или Windows-1251, в Notepad++ найдёшь в меню. https://yadi.sk/i/DyawJFJe3judrw Патчишь d000.mdt измененным d000.txt https://yadi.sk/d/I6rWFva5-T86qA Смотришь на получившееся Обрати внимание, что прога не делает бэкапов mdt файлов, так что лучше все манипуляции проводить в отдельной папке. И ещё, если пропатчил один раз mdt, затем увидел ошибку/опечатку и захотел её исправить, то изменяй её в txt, а mdt файл бери снова новый из директории игры. Иными словами, при вставке текста в mdt всегда используй чистый оригинальный файл. Тот шрифт должен лежать в Grandia II Anniversary Edition\data\afs\xls_data Тот текст, который я скинул вместе с исходниками программы, нужен только для удобства перевода. Вставка переведенного текста в txt файлы из пункта 1 будет ручная. Я это сделаю, был бы перевод. Скрипт по расчету длины строк, чтобы текст не наслаивался, у меня уже готов.
  12. Grandia 2

    @x-net Зачем тебе сравнивать hex-ы? Это же просто перевод текста с англ.→ рус. Количество символов не ограничено, прога потом сама поинтеры пересчитает.
  13. Grandia 2

    Да, этот. Была идея ещё сделать шрифт как в предыдущем порте на ПК. Файлы и в версии дримкаста, и в предыдущем порте, и в аниверсари практически одинаковые. Нота — Notabenoid, система коллективных переводов.
  14. Grandia 2

    Дерзайте Но лучше конечно на Ноту перевод залить, если есть аккаунт. Ибо текста там много. Не понял вопроса
  15. Grandia 2

    Поработал с очисткой файлов от лишних опкодов. Стало гораздо более читабельно. Файлы для перевода, программу (дампер/инсертер) и её исходник прикладываю: https://yadi.sk/d/rfk2-wiwjuO15g Есть желающие переводчики?
  16. Grandia 2

    Она вам нужна? Мне не удалось внедрить способ автоматической вставки имени говорящего в конструкции: <portrait pos="00" num="00" name=#Ryudo#/> То что в хештегах — это ручное добавление. В самих ресурсах игры таблиц имен 2 штуки в около 80 файлах и в 1 одном файле их 3. И откуда игра берет имена — сложно понять. Поэтому смотрел летс плеи, но они не панацея и многих диалогов там нет. Определенная систематика есть, но хромает и в некоторых местах писал имя исходя из смысла. Мне проще выложить все текстовые файлы для перевода. Тем более, если позднее обнаружится какой-либо баг в программе, я смогу его пофиксить.
  17. Grandia 2

    Дописал программу от итальянцев, теперь можно переводить без ограничения длины текста. Но так как она работает в режиме парсера, мусора там много. Теперь, соответственно, нужны переводчики, способные сделать свое дело в этом хаосе тегов.
  18. Owlboy

    Проходилось на версии 1.2 от 15.04.17 с фиксом из поста #126. Не переведённые фразы: Отсутствует пробел: Путаница "Мезос" и "Месос". В разговорах иногда проскакивает второй вариант, это не единственный случай: Потерянный пробел: "преднАзначение": Отсутствующая запятая после слова "гения", так как после идет причастный оборот: Отсутствует пробел "функцию,снова". Может лучше заменить "мою смерть" на притяжательное местоимение "свою смерть"? Отсутствует точка в конце: "настАнет": Вероятно имелось ввиду "А снова и снова". "голограММе":
  19. Grandia 2

    Про шрифты. Можно воспользоваться одним из шрифтов. Первый предложил jk232431. Второй был нарисован мной. У игры значения от 00 по 1F и от F0 по FF используются как служебные и выводу не подлежат. Для отрисовки символов из строк, где расположен символ сердца и ниже, используется двухбайтное значение. Для их обозначения используется опкод F0. Кто пользовался дампером текста, видел встречающийся F0 в тексте. Строки также начинаются с хекс-значения 20 с добавлением F0. То есть, если верхний символ «Ё» имеет значение E0, то нижняя широкая «Ё» – B0F0, «сердце» - 21F0, - 2AF0 и так далее. Широкий шрифт, как я понял, используется в меню. Вот так эти шрифты выглядят в игре. Шрифт https://yadi.sk/d/YfWc3G7ev8BUN Теперь по изменению длины строки текста. Для разбора структуры файлов использовались: • Итальянский перевод. Обычное сравнение файлов со старой версией и Аниверсари. • Исходный код утилиты GR2dump by Mat. В начале файлов идет первый блок поинтеров. Назову их «главные поинтеры». На рисунке представлены 2 файла: 2000.mdt и 4С00.mdt Структура и для остальных файлов должна быть аналогичной (с некоторыми отличиями, ниже будет показано). Главные поинтеры 4-х байтовые. На смещении 00000078 указан размер текстовой части (выделено темным цветом). В файле 2000.mdt это 54d40000, переворачиваем его и получаем 0000d454. Это и есть размер нашего текста. На смещении 0000007c находится поинтер начала текста (зеленый блок). Он не меняется, так как до начала текста файл не был изменен. Это значение необходимо знать для пересчета остальных главных понтеров. Значит, стартовое смещение текста будет c8ed0000 - > 0000edc8. На далее идут поинтеры, указывающие на следующие блоки информации, которые не относятся к тексту (выделено синим цветом). При том количество этих поинтеров в файле 4С00.mdt больше (строки 80 и 90). С чем это связано, я не знаю. Лучшим способом знать все эти поинтеры – это сравнение в HEX редакторе версии Аниверсари с итальянским переводом. Также имеется значение, похожее на поинтер, в обоих файлах (строка d0, выделено красным). В файле 2000.mdt такого смещения нет, так как файл всего 122 348 байт. В 4С00.mdt значение красного блока меньше предыдущего синего. В итоге: это значение не нужно трогать. Теперь об изменении размера текста. Если кто обратил внимание, то «размер текста» + «смещение начала текста» = «первый синий поинтер», то есть 0000d454 + 0000edc8 = 0001c21c. Переворачиваем и получаем: 1cс20100 (строка a0). То есть при увеличении текста в файле на N байт, необходимо увеличить на N значение размера текста (выделено темным цветом) и на столько же – все блоки с синим цветом, не забыв переворачивания. Теперь опустимся вниз на смещение начала текста. Здесь рассматриваю файл 2000.mdt. Выше выяснили его начало: c8ed0000 - > 0000edc8. Здесь появляется таблица поинтеров текста. Первые 4 байта - это размер этой таблицы (выделено синим цветом). Значение ec000000 переворачиваем и получаем 000000ec. Теперь, зная размер таблицы, можно её выделить полностью (в красной рамке). В принципе, конец таблицы обозначается как ffffffff и без труда находится. После первых 4 байт, указывающих размер таблицы, идут сами поинтеры текста. Состоят они из двух пар по 2 байта. Их легко увидеть, если представить значения в HEX редакторе в 4 столбца: Первая пара – это какой то идентификатор текста, он нам не нужен. Вторая пара – непосредственно указатель на выводимый текст. Для данных указателей «стартовой позицией» отсчета будет адрес, сразу следующий после окончания таблицы поинтеров. То есть для файла 2000.mdt это будет смещение 0000eeb4. Первый поинтер: 00 11 00 00, из которого 00 11 – идентификатор, 00 00 – указатель. Так как его значение равно нулю, то и ссылается он как раз на 0000eeb4. Второй поинтер: 00 40 33 00. Опять же 00 40 – идентификатор, 33 00 – указатель (перевернутый 0033). Текст, на который ссылается указатель рассчитывается так: «стартовая позиция» + «указатель» * 8= «смещение текста относительно начала файла». Для данного примера: 0000eeb4 + 0033 * 8 = 0000f04c. То есть из-за коэффициента все блоки текста кратны восьми. Рассмотрим первый блок текста, на который ссылается поинтер 00 11 00 00. Здесь отображены имена персонажей, встречающиеся в диалогах этого файла. Первые 2 байта 17 01 означают начало текста, этот опкод и далее будет встречаться. После идет перечисление имен персонажей с разделительным опкодом 1f. Завершение перечисления идет опкодом 17 00, он также будет встречаться часто. В конце блока идет последовательность 02 00 00 00 00. Опкод 02 означает конец блока и ставится всегда, нули же идут после 02 и добиваются для кратности блока 8 (восьми). Соответственно иногда блок может заканчиваться только опкодом 02. В самих блоках текста имеются еще одни поинтеры: с идентификатором 03 10 и 03 20. Например, в файле 9000.mdt (для удобства блоки текста раскрашены в синий и желтый цвета): Структура такая же, как и в таблице понтеров: 2 байта – идентификатор, 2 байта – указатель. Основное отличие: поинтеры 0310 и 0320 НЕ нужно умножать на восемь. То есть формула будет такая: «стартовая позиция» + «указатель» = «смещение текста относительно начала файла». В файле 9000.mdt «стартовая позиция» = a7 b0. Значит, поинтер 0310 ссылается на: 0153 (сразу перевернул) + a7b0 = a903. То есть ссылка идет на тот же блок в котором расположен поинтер. Иная ситуация с 0320: 0220 + a7b0 = a9d0 – ссылка идет на другой блок. По поинтерам всё. Этого достаточно, чтобы изменить размер текста. Иногда в файлах встречается служебная информация в двухбайтовой кодировке. В первом желтом блоке ее видно, так как начинается с 17 01. На рисунке выделил ее голубой рамкой. Если расшифровать, получим "TMP DEMO 31700". Понятия не имею для чего это. Теперь немного по опкодам. Для рассмотрения возьму фразу из начальной заставки, она содержится в файле d000.mdt. 17 01 – обозначает начало фразы. 18 00 08 - 3 байта с указанием говорящего. Первые 2 байта и есть сам опкод, оставшийся байт – номер говорящего. Он берется из списка имён, который шел выше в этом файле. Кусок представлю: Значение номера переводим в десятичное. В данном примере оно так и останется 08 и отсчитываем от первого имени, начиная с нуля. Значит: 0 – Ryudo, 1 – Ryudo, 2 – Elena, 4 – Elena, 5 – Millenia и так далее. Иногда номер говорящего обозначен как FF, это значит текст говорит безымянный персонаж. Вернёмся к фразе. Следующие 3 байта – 18 10 ff, довольно часто встречаются в тексте, но я так и не понял для чего они. Пробовал вставить их в середину текста, но опкод был проигнорирован. Далее 1с 02 – точно не понял для чего он. Видел и другие их вариации: 1C01, 1C03 и 1CFF. Похоже, что отвечает за скорость вывода текста. Если 02 заменить на 44, то текст буде выводиться с задержками по 2 символа. Если заменить на ff – похоже, что скорость вывода увеличится. Затем идет последовательность 53 6b 79 65 21 20 - сам текст «Skye! ». 1d ff 09 – это пауза. 1d – опкод, остальные 2 байта – время паузы. Встречаются и другие вариации, например, 1D 01 8C 00, структуру до конца не разобрал. Возможно, 00 не используется, иногда изменяется на 01. Те варианты, которые видел, были вида 1D 01 (некий байт) 00 (или 01). Потом идет фраза «Over here!». Снова пауза и затем идут какие то опкоды, значения которых я не понял. Ещё типы опкодов: 1f – переход текста на новую строку. 1a – Очищает окно с текстом от самого текста. Необходимо, когда у персонажа много текста, не вмещающегося в отведённые строки. Выше я говорил, что фразы начинаются с 17 01. Есть и другие опкоды: 17 40 – это меню с выбором действия, например, когда подходим к точке сохранения. 17 80 –это текст, выводимый вверху экрана, например, при переходе локаций. Похоже, сам опкод здесь только 17, второй байт указывает на тип текста или его завершение. Мест, где требуется увеличить длину строки, не много, но вручную пересчитывать муторно. Я в программировании не силён. Кто сможет накатать прогу для удобного пересчета и редактирования текста или загонет в круптар - дело бы пошло быстрее.
Zone of Games © 2003–2025 | Реклама на сайте.

×