| Разработка и ромхакинг > Ромхакинг и программирование |
| Помогите с настройкой Text Hooker в FCEUX |
| (1/1) |
| supremacy:
Пытаюсь сделать таблицу для перевода с японского. Формат таблицы вроде понятен, id_тайла=буква Вопрос только в кодировке. Как получить японский текст на выходе? В документации к FCEUX написано что главное замапить символы DC=tenten DD=maru Для чего это нужно мне понятно, непонятно как задавать другие японские иероглифы. Может для остальных японских символов тоже есть алиасы? Пробовал сохранять tht в разных кодировках: UTF16 не может прочитать. UTF-8 неправильно отображает в окне. Может кто-то настраивал и может скинуть свой tht файл для примера? |
| Cyneprepou4uk:
Ты не получишь японский текст, окно рассчитано только на латинские символы. Если нужен конвертер байтов в японские символы, воспользуйся моим скриптом. 1 - открываешь translate.lua в текстовом редакторе, в таблице encoding между "" пишешь нужные япоские символы там где тебе надо, сохраняешь. 2 - в FCEUX открываешь Hex Editor -> View -> PPU Memory, проматываешь до 0x2000, копируешь оттуда байты с текстом и вставляешь в input.bin через любой хекс реактор, сохраняешь. 3 - запускаешь translate.bat, получаешь японский текст в файле output.txt. Добавлено позже: В идеале нужно найти где в роме хранится текст, и копировать байты оттуда, нежели копировать их из видеопамяти. Так как в японских играх встречается дополнительная конвертация байтов в тайлы, например эти 3 буквы へ べ ペ будут выглядеть в видеопамяти одинаково под одним и тем же тайлом как へ, а эти палки/кружки над буквами рисуются на 0x20 выше самой буквы. В то же время копируя байты из рома, в список байтов могут попадать всякие управляющие байты (новая строка, пауза и так далее) с дополнительными параметрами, по случайности совпадающие с номерами байтов для букв. Поэтому на всякий случай надо сверять полученный текст с тем, что ты видишь на экране. |
| Sharpnull:
Уже ответили, но всё-таки. Для открытия файла таблицы используется обычная функция fopen(), так что файл только из ASCII (UPD: 8-битная! Об этом ниже). maru и tenten имеют специальное значение, а остальные загоняются в chartable, причём не больше 3 символов, но код почему-то позволяет ввести 4, что вызовет проблему при сохранении таблицы или при отображении. В общем, Text Hooker нужно заново писать. UPD: --- Цитата: Cyneprepou4uk от 01 Сентябрь 2021, 23:20:38 ---Ты не получишь японский текст, окно рассчитано только на латинские символы. --- Конец цитаты --- Всё-таки можно, но не Unicode. fopen() в Windows открывает файлы в 8-битной кодировке, в Windows с русской локализацией кодировка Windows-1251, поэтому можно вставить русские буквы. Для японской есть https://en.wikipedia.org/wiki/Shift_JIS. Я не разбирался как менять кодировку через Windows, но у меня установлен https://github.com/xupefei/Locale-Emulator: ПКМ по fceux.exe > Locale Emulator > Run in Japanese. Попробовал в файле .tht ввести 50=タスセ и выделить в игре тайл, потом Snap, работает :) Символов мало, но хоть что-то. UPD2: Забыл уточнить, что сохранял .tht в Notepad++ с кодировкой Shift-JIS. Под fopen() имел в виду обычные вызовы, а расширение Windows (https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-wfopen?view=msvc-160#unicode-support) позволяет открывать UNICODE файлы. |
| Cyneprepou4uk:
Sharpnull, любопытно ^_^ |
| supremacy:
Спасибо за предложенные решения! Я тоже уже нашёл исходники fceux, посмотрел как всё печально с юникодом. Пробовал делать tht в utf-8, потом перекодировать то что получилось в окне из win-1251 в utf-8, не для всех символов срабатывает, т.к. для tenten и maru есть ещё простая математика (когда берётся следующий символ алфавита), которая с utf-8 не работает. Sharpnull, спасибо за наводку на Locale Emulator. Как всё-таки не просто распознавать в квадратике 8x8 иероглиф. Некоторые угадываются только из-за того что рядом в алфавите стоят. А с kanji вообще засада, даже рисовалка в google translate не помогает. |
| supremacy:
Если запускать FCEUX через Locale Emulator то этой функцией можно пользоваться, правда она не захватывает спрайты, но зато автоматически определяет над каким иероглифом стоит дакутэн и хандакутэн и соответственно меняет иероглиф на выходе. Встроенный перевод через сайт тоже не работает. tht файл в кодировке Shift-jis. |
| Навигация |
| Главная страница сообщений |