Разработка и ромхакинг > Ромхакинг и программирование
Вопрос к ромхакерам и переводчикам. Подмена символов.
(1/1)
free.gen:
Решил внести в уже существующий перевод некоторые исправления.
Подготовил такую таблицу - какая буква соответствует символу в игре:

--- Код: ---А(A) Б(А) В(B) Г(б) Д(Б) Е(E)  |
                               |
Ж(?) З(3) И(Ь) Й(Ь) К(K) Л(Ш)  |
                               |
М(M) Н(H) О(0) П(И) Р(P) С(C)  |
                               |
Т(T) У(Y) Ф(?) Х(X) Ц(?) Ч(4)  |
                               |
Ш(У) Щ(?) Э(Й) Ю(?) Я(?)       |
--------------------------------
а(a) б(д) в(и) г(r) д(g) е(e)  |
                               |
ж(й) з(т) и(u) й(ъ) к(k) л(щ)  |
                               |
м(m) н(ь) о(o) п(n) р(p) с(c)  |
                               |
т(t) у(y) ф(в) х(x) ц(з) ч(к)  |
                               |
ш(у) щ(ц) э(ы) ю(w) я(d) ы(Яi) |
                               |
ь(Я) ъ(Я)                      |

--- Конец кода ---
Теперь чтобы в игре вывести какой либо текст, его необходимо напечатать в таком виде.
Приветсвую жителей этого форума
Ирuиеtctиw йuteщеъ ыtoro ворyma
Вопрос заключается вот в чем - как вы это упрощаете/автоматизируете?
Возможно ли как-то сделать простую подмену символов при помощи какого-нибудь Notepad++ или Sublime Text?
На данный момент я ввожу исправления вручную, и хотелось бы немного упростить этот процесс...
В идеале хотелось бы иметь некую софтину, в которой можно "переводить" текст по заданному шаблону в обе стороны.
SeregaZ:
хы... у меня как раз такое творится :) я запилил массив, где русская буква, соответствующая ей английская, а так-же сграбливание символа из картинки-шрифта по нужным координатам, а после демонстрационный вывод в окошке, чтобы юзверь видел как оно будет выглядеть в итоге.
Guyver(X.B.M.):
Kruptar
free.gen:
Guyver(X.B.M.), Рассматривал ее в самом начале, но показалась сложной и неудобной. Мне нужно просто поменять символы.
Извлеченные кракозябры в русский. И обратно русский в кракозябры.))
Guyver(X.B.M.):
А чем неудобная? Можно создать хоть текстовые файлы и подключить их, и там будет появляться нужный тебе текст по таблице. Удобнее некуда:



Ничего не надо особо делать. Написал текст в правом окне, сохранил его в файл - и всё... Сразу он переконвертировался...
free.gen:
Guyver(X.B.M.), ну во первых при создании проекта она просит указать ромы. у меня psx игра и перевод вносится в отдельные уже распакованные файлы. да и это я буду делать лишь местами, исправляя ошибки. так и не понял как тут поступить.
во вторых, чтобы текст интерпретировался, нужно как-то создать таблицу для этой проги, в которой будут символы. как это сделать я так и не понял.
ну и в третьих - много в ней сбивающих с толку настроек про смещение, адреса и пр...   
Cyneprepou4uk:
Можно делать через эмулятор fceux свежей сборки. Открываешь любой ром, открываешь хекс редактор, переходишь в rom file, вставляешь текст справа, подгружаешь свой файл с кодировкой, копируешь сконвертированный текст
Sharpnull:

--- Цитата: free.gen от 02 Февраль 2020, 15:36:36 ---при помощи какого-нибудь Notepad++
--- Конец цитаты ---
Вот ответ. В замене (Ctrl+H) включаете "Регулярные выражения", в поиск (нужно продолжить таблицу):

--- Код: ---(А)|(Б)|(В)|(Г)
--- Конец кода ---
В замену:

--- Код: ---(?1A)(?2А)(?3B)(?4б)
--- Конец кода ---
"Заменить все"
--------
Ну и на Python 3 легко пишется. Предполагается, что входной 1.txt в кодировке utf-8, как код скрипта. Здесь AБВГ меняется на 5678.

--- Код: ---#!/usr/bin/env python3
from pathlib import Path

def sub(txt):
    s1 = "АБВГ"
    s2 = "5678"
    for c1, c2 in zip(s1, s2):
        txt = txt.replace(c1, c2)
    return txt

p1 = Path("1.txt")
p2 = Path("2.txt")

txt = p1.read_text(encoding="utf-8")
new_txt = sub(txt)
p2.write_text(new_txt, encoding="utf-8")

--- Конец кода ---
--------
Забыл, что в Python есть специальные методы maketrans и translate. Что упрощает код:

--- Код: ---#!/usr/bin/env python3
from pathlib import Path

def sub(txt):
    s1 = "АБВГ"
    s2 = "5678"
    transtab = str.maketrans(s1, s2)
    return txt.translate(transtab)

p1 = Path("1.txt")
p2 = Path("2.txt")

txt = p1.read_text(encoding="utf-8")
new_txt = sub(txt)
p2.write_text(new_txt, encoding="utf-8")
--- Конец кода ---
paul_met:
free.gen,
Формат таблицы ты можешь видеть на скришоте круптара слева. Если Круптар для тебя слишком сложен и запутан, то бери какой-нить WindHex или Translhextion. Для них нужна только таблица, но указатели придётся считать вручную. Но, по мне, так это прошлый век. Изучай лучше Круптар - удобнее и функциональнее пока ничего не придумали.
lupus:
У меня есть для этого программа, которая по созданной таблицу парсит текст, на выходе получаем текстовый файл.
Как этот текст вставлять - это уже другая история.
Могу подкинуть завтра. Осталось не забыть ;)
free.gen:
Sharpnull, регулярные выражения отмел сразу, а вот по ссылочке прошел и там обнаружил wReplace - подошла идеально. 2 минуты на создание шаблона и готово.
paul_met, был бы рад в этом разобраться, но он похоже не может просто менять символы (или может?), так же я не смог разобраться - как создать рабочую таблицу. нужны ей поинтеры или нет (так и не понял что это). программа заточена под замену текста непосредственно внутри рома, умеет работать с этими ромами учитывая специфику хранения текста в оных.
у меня же более тривиальная задача. просто поменять символы, без заморочек на тему какой там адрес и тд, ведь отредаченный текст я буду ставить сам в hex редакторе.
lupus:

--- Цитата: lupus от 02 Февраль 2020, 21:41:45 ---У меня есть для этого программа, которая по созданной таблицу парсит текст, на выходе получаем текстовый файл.
Как этот текст вставлять - это уже другая история.
Могу подкинуть завтра. Осталось не забыть ;)

--- Конец цитаты ---
Парсер в приложенном архиве.
Sharpnull:
lupus, программа ничем не отличается от моего скрипта на Python выше, кроме способа задания таблицы, что легко исправляется. У вас кодировку (cp1251 - плохой выбор) уже не поменять в отличие от скрипта.
SeregaZ:
а разве эти ромы всякие понимают кодировки? там кажись одна... анси как она там. от 0 до 255 и крутись как хочешь как говорится.
Sharpnull:
SeregaZ, вопрос был про текстовые файлы.

--- Цитата: lupus от 03 Февраль 2020, 19:41:18 ---Парсер в приложенном архиве.

--- Конец цитаты ---
Вот аналогично работающее на Python https://gist.github.com/infval/60c1bdd2c69f38cc81d2b175133dd07d, только по умолчанию кодировка utf-8, чтобы сменить параметр -e (cp1251 в данном случае):

--- Код: ---translate.py readme.txt RU_tbl.txt 1.txt -e cp1251
--- Конец кода ---
--------
Скрипт проще расширить и изменить, решил показать примером.
--------

--- Цитата: Guyver(X.B.M.) от 02 Февраль 2020, 15:44:20 ---Kruptar

--- Конец цитаты ---
Видел, что программу забросили и исходники выложили, вы даже что-то правили в коде, есть развивающийся форк? Было бы неплохо привести в порядок, заменить иконки из win-98, улучшить внешний вид как минимум. Хотя мне лично не нужно, просто страшно смотреть на многие программы для ром хакинга (как CrystalTile2).
lupus:

--- Цитата: Sharpnull от 03 Февраль 2020, 19:57:52 ---lupus, программа ничем не отличается от моего скрипта на Python выше, кроме способа задания таблицы, что легко исправляется. У вас кодировку (cp1251 - плохой выбор) уже не поменять в отличие от скрипта.

--- Конец цитаты ---
Софтинку под мои нужды кто-то из друзей написал, не помню уже кто :(
Есть похожая, но уже под utf-8 и таблица иначе создаётся.
Уверен, что топикстартеру и этой с головой хватит.
paul_met:

--- Цитата: Sharpnull от 03 Февраль 2020, 20:31:14 ---Видел, что программу забросили и исходники выложили, вы даже что-то правили в коде, есть развивающийся форк? Было бы неплохо привести в порядок, заменить иконки из win-98, улучшить внешний вид как минимум. Хотя мне лично не нужно, просто страшно смотреть на многие программы для ром хакинга (как CrystalTile2).
--- Конец цитаты ---
Для этого не нужны исходники по большому счёту. Можно хакнуть через какой-нить Restorator - добавить новую иконку и XP манифест.
Sharpnull:

--- Цитата: paul_met от 03 Февраль 2020, 22:28:08 ---XP манифест
--- Конец цитаты ---
Значит манифест для "Visual Styles" можно вставить без исходного кода, спасибо. Вопрос такой пробегал в голове.

--- Цитата: lupus от 03 Февраль 2020, 22:06:50 ---Уверен, что топикстартеру и этой с головой хватит.
--- Конец цитаты ---
ТС уже нашёл решение в лице wReplace. cp1251 - плохой выбор в смысле идентификации кодировки в текстовом редакторе, но можно представить, что файлы двоичные, тогда программа будет по замене байт (в однобайтовой кодировке вроде нет приколов со специальными байтами) и кодировка не важна.

--- Цитата: SeregaZ от 03 Февраль 2020, 20:12:25 ---а разве эти ромы всякие понимают кодировки?
--- Конец цитаты ---
Сейчас подумал, что можно было сделать отображение "символ -> байт или несколько байт". В специальных программах как Kruptar это всё наверно учтено. ТС, наверно, вставляет из буфера обмена в HEX-редактор и там уже вставляется верно в зависимости от выбранной кодировки.
Навигация
Главная страница сообщений

Перейти к полной версии