PSX Planet: SONY PlayStation Community

PSX Planet: SONY PlayStation Community (https://psxplanet.ru/forum/index.php)
-   Ваши игровые проекты (https://psxplanet.ru/forum/forumdisplay.php?f=9)
-   -   О переводах игр (https://psxplanet.ru/forum/showthread.php?t=31951)

Enma 10.01.2019 21:13

Ответ: О переводах игр
 
хм, приспичило что-нибудь перевести.
скачал megaman x5, поставил Hex Workshop Hex Editor.потыкал все файлы у образа, ничего похожего на текст не обнаружил, сплошная абракадабра.

я что-то не так делаю или текст там, как я где-то читал, закодирован и просто так его не достать?

volgame 10.01.2019 21:53

Ответ: О переводах игр
 
Ты выше почитай и тогда поймёшь, что перевод игры не такое уж и простое занятие. Сложность перевода зависит от игры (независимо от количества текста).

1. Надо вначале найти текст, его местонахождение не всегда очевидно, точнее почти всегда не очевидно, а иногда его и вовсе не найти. Текст может быть запакован, может быть в графике и тексте, а дальше уже от фантазии разработчиков зависит. Так чтобы текст был в знакомом всем формате почти не бывает.
2. Для большинства игр нужны уникальные распаковщики/запаковщики ресурсов игры, т.к текст, графика, видео не всегда лежит там где ей бы следовало лежать и выглядит не так, как следовало бы выглядеть. Иногда инструменты можно найти (редко и как правило для популярных игр над которыми уже прежде работали), но чаще их пишут сами хакеры. Соответственно, знание хакинга игр хотя бы начального уровня обязательно.
3. Чтобы русский был русским обычно надо ещё найти шрифт (или несколько шрифтов) игры и перерисовать на русские буквы алфавита.
4. Даже если ты найдёшь текст, то переводить его в Хекс-редакторе ты будешь до конца жизни, ещё и потомкам достанется.
5. Некоторые игры имеют привязку LBA (механизм адресации и доступа к блоку данных), где любые изменения и смещения в байт делают игру неработоспособной (игра будет зависать в проблемных местах, либо вообще не будет работать).
6. Перевод текста игры самое простое, а порой и приятное занятие, единственное, для него надо иметь свободное время, желание, знание языка оригинала игры, хорошо владеть родным языком, включая обороты речи и грамматику.

SlavaVlasov 10.01.2019 22:11

Ответ: О переводах игр
 
Цитата:

Сообщение от Enma (Сообщение 242843)
хм, приспичило что-нибудь перевести.
скачал megaman x5, поставил Hex Workshop Hex Editor.потыкал все файлы у образа, ничего похожего на текст не обнаружил, сплошная абракадабра.

я что-то не так делаю или текст там, как я где-то читал, закодирован и просто так его не достать?

Я так мучился, пытаясь перевести Super Mario Bros для NES: там текст в такой кодировке, что найти ее можно разве что относительным поиском (Relative Search) через Translhextion.

Еще один способ: найди уже переведенную версию игры, либо другую локализацию (скажем, только Французскую, только Немецкую и т.д.), и сравни с оригинальной тем же HexCmp, например. Попробуй найти, в каких участках файла были внесены изменения и работай только с ними. Можно попробовать изменить байты на этих участках, а затем посмотреть изменилось ли чего в игре. Можно попробовать через HxD открыть процесс эмулятора в оперативной памяти и попробовать найти текст там. Если в оперативной памяти адекватные слова находятся, а просто в игровых файлах - нет, значит текст - закодирован и декодируется только при загрузке в ОЗУ.

SlavaVlasov 11.01.2019 15:04

Ответ: О переводах игр
 
Цитата:

Сообщение от Enma (Сообщение 242843)
megaman x5

Вот еще о Мегамэну (немного покопался).
  1. Относительный поиск, вероятно, не выход: попытался найти слово "Sigma", но ни относительным поиском, ни так, ни даже в Save Statе'е (в т.ч. относительным поиском), ни в ОЗУ этого слова нет. Хотя в геймплее оно присутствует в самом начале.
  2. Часть текста - это графика (например, описание к персонажам в меню их выбора)
  3. Помимо всего прочего, среди графики хранятся одиночные шрифты, а не просто готовые субтитры. Это должно говорить о том, что игра все же использует текст в том понимании, в котором мы его пытаемся найти, однако, он выходит за правила относительного поиска.
Текст может быть написан как угодно, либо это вообще может быть код, возможно состоящий и не из одного байта, который просто позиционирует картинки (буквы) на экране, не имея ничего общего с текстом. Т.е. я хочу сказать, что написание субтитров похоже технически было устроено, как строительство уровня для игры Super Mario Bros, нежели как написание текста. Только строился не уровень, а... субтитры. И тут уже нужно искать что-то более, чем текст. Рыться глубже в коде.

Пробовал забаговать шрифты с Save Stat'е - в игре они также изменились. Получается, что шрифты в нашем понимании используются, а текст - нет.

MFS 11.01.2019 17:23

Ответ: О переводах игр
 
Цитата:

Сообщение от SlavaVlasov (Сообщение 242846)
Я так мучился, пытаясь перевести Super Mario Bros для NES

Че ж, для самой популярной игры планеты Земля в сети нет подробных туториалов по переводу и хакингу, что пришлось самому всё искать?)

SlavaVlasov 11.01.2019 17:33

Ответ: О переводах игр
 
Цитата:

Сообщение от MFS (Сообщение 242897)
Че ж, для самой популярной игры планеты Земля в сети нет подробных туториалов по переводу и хакингу, что пришлось самому всё искать?)

На тот момент я уже находил в сети перевод Марио с хакнутыми пойнтерами (в чем я тогда был ноль), и только тогда я (пока только вникал в ромхакинг) узнал об относительном поиске. Как я попытался перевести? Просчитывая в голове, под какой цифрой (байтом) должна быть буква, я писал перевод... шестнадцатеричными байтами :ng_Lol:Ну, и основные тексты как бы перевел ))

Вообще, я нашел больше туториалов во-первых намного позже, когда ретрогейминг стал трендом, во вторых когда сам стал разбираться глубже и правильно гуглить вопросы.

MFS 11.01.2019 23:54

Ответ: О переводах игр
 
Цитата:

Сообщение от SlavaVlasov (Сообщение 242898)
я писал перевод... шестнадцатеричными байтами

Хорош)))) Как говорили в фильме жмурки, братец ты реальный маньяк. И что, в игре после этого появилось что-то похожее на текст? хД Вообще забавно, что в бродилке 85-го года, где весь текст это "старт/опции", он еще и зашифрован.:ng_Wacko:
Цитата:

Сообщение от volgame (Сообщение 242845)
Даже если ты найдёшь текст, то переводить его в Хекс-редакторе ты будешь до конца жизни, ещё и потомкам достанется.

Хех, я частенько так перевожу, главное таблицу по возможности поочевиднее сделать, чтобы было проще запомнить, ну там g = г, b = в, чтоб все общие буквы само собой совпадали, и вперёд. =) Как по мне таблицы нужно делать когда текста действительно МНОГО, диалоги всякие и прочее. А когда весь текст это "старт/опции", то задачу вполне можно решить в лоб.

volgame 12.01.2019 00:08

Ответ: О переводах игр
 
MFS, я думаю игры, где три строчки на вражьем языке, можно вообще не переводить :) Но насколько я помню в Мегамэне текста хватает, он же бормочет с персонажами и в начале игры и по ходу игры, сюжет есть, игра японского происхождения, а в играх японцы самые говорливые. Диалоги представлены всплывающими субтитрами в окне.

SlavaVlasov 18.01.2020 15:44

Ответ: О переводах игр
 
Цитата:

Сообщение от MFS (Сообщение 242932)
И что, в игре после этого появилось что-то похожее на текст?

Да, только с сокращениями, типа "BPEM"

SlavaVlasov 18.01.2020 15:57

Ответ: О переводах игр
 
Кто-нибудь может помочь мне найти пойнтеры в EXE-шнике Looney Tunes Racing? Игру как-то между делом переводил, но там такая вещь: названия трасс на загрузочных экранах отличаются, в зависимости от того, из какого файла происходит переход. Например, если я запускаю трассу из меню (файл SHELL.DAT, пожатый Deflate'ом), то текст с названием трассы берется из SHELL.DAT, но если в режиме чемпионата после первой трассы загружается вторая, текст с названием трассы берется из EXE-шника (там уже сжатия нет). Плюс для некоторых слов (LAP) в EXE-шнике нет свободных байтов.

Kazooki 20.01.2020 10:14

Ответ: О переводах игр
 
SlavaVlasov, так сам elf выложил бы

SlavaVlasov 20.01.2020 19:56

Ответ: О переводах игр
 
Цитата:

Сообщение от Kazooki (Сообщение 257932)
SlavaVlasov, так сам elf выложил бы

Вот.

Kazooki 21.01.2020 15:58

Ответ: О переводах игр
 
Чисто на глаз какой то блок поинтеров с адреса 0xa924

SlavaVlasov 23.01.2020 16:41

Ответ: О переводах игр
 
Цитата:

Сообщение от Kazooki (Сообщение 257999)
какой то блок поинтеров с адреса 0xa924

Вряд ли. Размер блока с текстом - 7 788‬ байт (1E6C). Пойнтеров маловато. Основная проблема в том, что я не нахожу пойнтеров со значениями согласно длине слов. Например:
[h00] WELL DONE!..
[h0C] BAD LUCK....
[h18] TO CONTINUE.

Высматриваю разницу между другими значениями, но совпадений не нахожу.

UPD:
Обнаружил, что там два текстовых блока: один - на 0x7858, второй - на 0xB22D0.
В первом обнаружил интересную закономерность: большинство строк имеют размер C (если считать вместе с нулевыми байтами). Во втором блоке размер коротких строк - 4, средних - 8 (тоже с нулевыми байтами).

ViToTiV 23.01.2020 21:30

Ответ: О переводах игр
 
SlavaVlasov, в исполняемом файле поинтеры могут идти где угодно и как угодно, могут повторяться по 10 раз. совсем не обязательно они идут по порядку, я бы даже сказал что в большинстве случаев они идут не по порядку.
искать их конечно надо не в самом файле, а в дампе памяти, а потом уже смотреть где они находятся в файле.
я бы тебе помог, но совсем нет времени.

SlavaVlasov 23.01.2020 22:44

Ответ: О переводах игр
 
Цитата:

Сообщение от ViToTiV (Сообщение 258100)
в исполняемом файле поинтеры могут идти где угодно и как угодно, могут повторяться по 10 раз

Это я уже понял. Я уж и через ArtMoney сканировал. Обычные пойнтеры не находит, а пойнтеры со сдвигом - от 400 до 3000. Те, которые менял (в т.ч.по адресу ближе к блоку с текстом) - ничего не поменялось (менял от силы штук 50 пойнтеров, увеличивая значение первого байта).

SlavaVlasov 23.01.2020 22:53

Ответ: О переводах игр
 
Небольшое отступление: выяснил, что файл титров в игре (0004901f.dat, извлекаемый из сжатого SHELL.DAT) не должен превышать исходный размер - 6 834 байта (1AB2), иначе игра перестает отображать титры. И это не смотря на то, что даже оригинальный файл после повторного сжатия имеет меньший размер структуры данных.

YAGAMI55 23.01.2020 23:12

Ответ: О переводах игр
 
SlavaVlasov, скорее всего где то есть поинтер указывающий на размер текстового блока. Часто такое бывает. Получается если после сжатия ориг файл меньшего размера и пашет, значит все манипуляции происходят в самом сжатом файле SHELL.DAT

SlavaVlasov 24.01.2020 03:21

Ответ: О переводах игр
 
Вложений: 1
Еще в SHELL.DAT обнаружил любопытные INI-файлы (пока не проверял, задействованы они в игре или нет), вроде:
Нажмите
[Desktop]
width = 320
height = 240
onBack = goBack
[button]
id = Background
x = 0
y = 10
width = 320
height = 240
image = "MMLogo" at(5,5) plane(100)
image = "trackBack1" at 0,0 tint(40,40,250) plane 3000
image = "trackBack2" at 64,0 tint(40,40,250) plane 3000
image = "trackBack3" at 128,0 tint(40,40,250) plane 3000
image = "trackBack4" at 192,0 tint(40,40,250) plane 3000
image = "trackBack5" at 256,0 tint(40,40,250) plane 3000
[button]
id = Title
x = 0
y = 10
width = 320
height = 240
text = string(PCHS) centered (200, 26) font(Big) color(10,130,200) bgcolor(0,0,210) plane(10)
[button]
id = player1Button
x = 0
y = 90
width = 320
height = 40
hasfocus = yes
focustype = highlight
text = string(pOne) id (btnText) centered 192,0 font (Big) color (180,130,10) plane (50)
onFocus = setIndex
onFocusP = 1
action = loadscript
aparam = CtrlCfg.afw
onup = setfocus
onupP = btnAccept
ondown = setfocus
ondownP = player2Button
[button]
id = player2Button
x = 0
y = 120
width = 320
height = 40
focustype = highlight
text = string(pTwo) id (btnText) centered 192,0 font (Big) color (180,130,10) plane (50)
onFocus = setIndex
onFocusP = 2
action = loadscript
aparam = CtrlCfg.afw
onup = setfocus
onupP = player1Button
ondown = setfocus
ondownP = btnVib
[button]
id = btnVib
x = 0
y = 150
width = 320
height = 40
focustype = highlight
text = string(NULL) id (txt) centered 192,0 font (Big) color (180,130,10) plane (50)
onFocus = setIndex
onFocusP = 3
onup = setFocus
onupP = player2Button
ondown = setFocus
ondownP = btnAccept
onleft = ToggleVib
onright = ToggleVib
[button]
id = btnAccept
x = 0
y = 180
width = 320
height = 40
focustype = highlight
text = string(Ok) id (txt) centered 192,0 font (Big) color (180,130,10) plane (50)
action = Accept
onFocus = setIndex
onFocusP = 4
onup = setfocus
onupP = btnVib
ondown = setfocus
ondownP = player1Button
[button]
id = btnOK
x = 100
y = 70
focustype = highlight
rect = coords(0,0,190,110) bgcolor(0,0,0) plane(20) blend(half)
textWindow = string(null) id (txt) centered(95,20) font(Micro) color(180,130,10) plane(10) width(150) height(100)
text = string(OK) centered(95,95) font(Big) color(180,130,10) plane(10)
isVisible = no
isModal = yes
action = hidepopup
[menu]
id = popup
item = btnOK
(ewt) IMPORTANT! Leave this button here at the BOTTOM of the file.
[button]
id = dummy
setValue = activeController, both




Прикреплю на всякий случай архив с ними (может потом как-нибудь понадобится).


Часовой пояс GMT +3, время: 19:58.

Перевод: zCarot
Права | Copyright ©
© PSX Planet Community 2003-2024