Перевод Iji
Привет, ребята, с вами Кситилон, и сегодня мы попытаемся перевести игру
Это рабочий пост о переводе Iji на русский язык (точнее — как минимум второй попытке перевода, а скорее всего — уже третьей), в котором будет только служебная информация, никакого user/player-friendly контента. В комментариях можно обсуждать детали перевода, в посте всё будет строго по техническому ходу проекта.
http://gamin.me/taxonomy/term/2914/12062#comment-107993 — с этого началась движуха.
http://myothehedgefox.livejournal.com/ — журнал автора прошлых попыток перевода.
http://www.zoneofgames.ru/forum/index.php?showtopic=20348&st=0 — та же попытка перевода.
http://www.old-games.ru/forum/showthread.php?t=42889&page=0 — тоже она.
http://www.remar.se/daniel/iji.php — сайт-источник игры, где также есть переводы.
Задача будет достигнута, когда будет получена такая версия Iji, в которой весь отображаемый текст и спрайты-надписи с текстом — на русском языке.
У нас есть:
- Исходник игры на ГМ5.3, открыто опубликованный автором в интернете на собственной странице.
- Информация о том, что попытка перевода на русский уже была предпринята, причём при согласовании деталей перевода с автором. Отсюда можно заключить, что авторское разрешение на перевод на русский язык у нас уже есть.
У нас нет:
- Лицензионного ГМ5.3 для перекомпиляции. Мы используем крякнутый, и не будем испытывать угрызений совести, так как наш проект некоммерческий, не разжигает межнациональной и прочей розни, и в общем всяко попадает под условия использования, известные как "fair use". Помимо того, GM5.3 это типичный пример abandonware, которое уже не купишь официально, при том что даже хотел бы.
- Возможности просто перекомпилировать под ГМ8.1 — слетит внутренняя логика движка, после 5.3 Овермарс много раз менял движок коллизий, а также имена, параметры, и смысл вызываемых в этом исходнике функций.
Что можно сделать:
- Взять уже откомпилированную игру и допатчить её до "русского состояния", скажем так. Писать кастомный экстрактор-импортер ресурсов с конвертацией спрайтов в PNG и обратно. Это совсем накладно. После выяснения проблем с длинами текстов это уже совсем неактуально, а делать перевод-огрызок в традициях старых пиратов-русефекаторов я не хочу.
- Перекомпилировать игру под 5.3, если он появится. Тексты всё равно должны быть вставлены вручную, так как исходник написан совсем без расчёта на локализацию.
- Портировать исходник на 8.1 либо другую версию ГМ с лицензией. Это потребует вмешательства в код игры, что довольно непросто. Вернёмся к этому варианту в крайнем случае, но пока таких обстоятельств не предвидится.
В абсолютно любом случае, неминуемо нужно будет:
- Перерисовать спрайтовые шрифты и спрайтовые надписи.
- Перевести сам текст.
Важная проблема: если перерисовывать спрайты и переводить текст во внешних файлах, нужен кто-то, кто будет долго и муторно вставлять это обратно в исходник. Пока что продолжаю думать над тем, какое конкретно решение принять. Так и будет. Спрайтов на самом деле не так много, как я думал, а с текстами ещё посмотрим, может выйдет написать импортер во внутренний формат GMD.
In script scr_nukedraw line 8 pos 74: Wrong number of arguments to function or script.
In script scr_firekey line 786 pos 14: Unknown function or script: sprite_restore
In script scr_mainmenu line 209 pos 10: Unknown function or script: screen_gamma
In script scr_menutext line 204 pos 6: Unknown function or script: draw_text_sprite
In script scr_sabotcreate line 150 pos 2: Unknown function or script: sprite_restore
In script scr_sound line 33 pos 10: Unknown function or script: sound_frequency
In script scr_topmessage line 29 pos 6: Unknown function or script: draw_text_sprite
In script scr_herosabot line 230 pos 30: Wrong number of arguments to function or script.
In script scr_heromain line 59 pos 30: Wrong number of arguments to function or script.
In script scr_huddraw line 69 pos 51: Wrong number of arguments to function or script.
In script scr_sabotcreate4 line 196 pos 6: Unknown function or script: screen_gamma
In script scr_drawshape line 33 pos 6: Unknown function or script: draw_polygon_begin
In script scr_facecreate line 121 pos 6: Unknown function or script: screen_gamma
In script scr_loadingdestination line 5 pos 6: Unknown function or script: screen_gamma
In script scr_drawtime line 21 pos 10: Unknown function or script: draw_text_sprite
In script scr_zcir line 38 pos 14: Unknown function or script: screen_gamma
In script scr_seczmusicplay line 6 pos 10: Unknown function or script: sound_frequency
In script scr_drawunlocks line 46 pos 2: Unknown function or script: draw_text_sprite
In script scr_sabotcreate2 line 10 pos 10: Unknown function or script: sprite_restore
In script scr_sabotcreate3 line 4 pos 2: Unknown function or script: sprite_restore
In script scr_mainload line 7 pos 2: Unknown function or script: sprite_restore
In script scr_shreddersfx line 26 pos 10: Unknown function or script: sound_frequency
In script scr_loadcuts line 3 pos 2: Unknown function or script: sprite_restore
In script scr_loadmusic line 12 pos 60: Wrong number of arguments to function or script.
In script scr_proximaarrow line 51 pos 10: Unknown function or script: draw_polygon_begin
In script scr_voice line 402 pos 14: Unknown function or script: sound_frequency
In script scr_pausemenudraw line 14 pos 2: Unknown function or script: draw_text_sprite
In script scr_turretchargetell line 3 pos 10: Unknown function or script: sound_frequency
In script scr_cleardraw line 27 pos 10: Unknown function or script: screen_gamma
Оффсеты внутренних GM-ресурсов оригинального (официального) исходника Iji iji_16_6.gmd, 16 617 077 байт, изменён 15 января 2011 г., 14:01:34, взятого с сайта автора 16 февраля 2014 г., 20:34:18
0x006A39 snd_wea_imach (первый звук)
0x70D7DD spr_block (первый спрайт)
0x8DDBC6 bg_tile1 (первый фон)
0x995163 scr_knockdown (первый скрипт)
0xAD4F97 tim_getribbon (первый таймер?)
0xAEC3C7 obj_iji (первый объект)
0xC39FFA rom_main (первая комната)
До первого звука идут какие-то невнятные, возможно зашифрованные данные, а также название игры, автора, и годы работы над игрой.
После последней комнаты возможно идёт Game Information (которой здесь нет), и список всех ресурсов игры с их относительными оффсетами и/или идентификаторами (?).
Слово "первый" здесь означает "первый в файле". Идентификаторы этих "первых" ресурсов могут и не быть равны нулю, так как в ГМ идентификаторы ресурсов инкрементируются вне зависимости от уже удалённых.
0x90 01 00 00
Она может быть признаком либо начала, либо конца (не выяснено) соответствующей структуры данных. В некоторых случаях повторяется в пределах одного ресурса (либо есть ресурсы, которые невозможно идентифицировать через хекс-редактор).
Всего сигнатур в файле 3759. Хотя уникальность сигнатуры в 4 байта и достаточно высока, эта сигнатура используется внутри формата также для других целей, помимо разделения ресурсов — она разделяет ещё и события внутри объектов (возможно и ещё что-то). Кроме того, эти байты могут быть встречены в сыром потоке данных, не являясь метаданными вообще, но соответствуя четырёхбайтовому значению сигнатуры. Поэтому эта величина (3759) вмещает в себя количество всех ресурсов игры, сложенное с количеством событий в объектах, а также количеством неуточнённых разделителей, если таковые есть, и, наконец, с количеством "сырых" неактуальных совпадений с потоками данными ресурсов. В любом случае она преувеличена, и дальнейший анализ этого пока не нужен.
Кроме того, комнаты не разделяются этой сигнатурой. После первой комнаты более 20 этих сигнатур, но они там не имеют функции разделителя. Комнаты разделяются сигнатурой 0x08 02 00 00 16 00 00 00. Что-то неуточнённое внутри них (объекты?) разделяется сигнатурой 0x80 14 00 00, но не всегда. Пока что оставлю этот анализ.
Регулярное выражение для выцепления всех текстов с целью проверки их на влезание в диалоговое окно (три строки по 65 символов и четвёртая — 63 символа (на последних двух расположен элемент интерфейса)):
text[d+]="[^"]*"
И соответствующий приемлемый конструктор с экранированным литералом (дичь, правда?) для объекта BCL .NET (проверено в 2.0):
new global::System.Text.RegularExpressions.Regex("text\\[\\d+\\]=\"[^\"]*\"");
Вспомогательная программа IjiMessageBox для автоматической проверки:
https://dl.dropboxusercontent.com/u/75034586/Translations/Iji/IjiMessageBox.exe
Принимает на вход iji scripts.gml (экспортированные скрипты из исходника), и пишет результат проверки в Result.txt после нажатия кнопки Batch. Либо можно проверять выбранный текст прямо в окне. Или даже переводить прямо там. Поддерживаются два типа разбиения — автоматическое самим компонентом TextBox из WinForms, и моё написанное с нуля "правильное". Естественно, первым типом текст разбивается автоматически при вводе.
Что нужно исключить при фильтровании тупо-забранных-из-кавычек текстов:
scr_sound("...")
Что нужно обязательно забрать:
.textid="..."
.topmessage="..."
loc="..."
(список видимо ещё неполный, но я буду смотреть по остаткам от фильтрации scr_sound, а не забирать только то, что в белом списке)
- 19 февраля 2014, 15:37
- 010
Завтра я извлеку из этой игры тексты, и выложу их в открытый доступ для всех желающих. Цепочка конвертаций выглядит так:
1) Object Information > Save ... to file
2) Scripts > Export ... Scripts...
1+2 -> извлечённые строки с указанием источника извлечения и позиции в нём -> адаптированный действительный текст, отображающийся в игре. Проверить тексты сразу в игре нельзя будет, нужно будет именно перевести все тексты, потом долго их вставлять обратно, потом сделать тестовый билд, его весь целиком пройти, и повторить всю цепочку, потом обратную цепочку, и снова пройти. Вполне возможно, что описанный процесс будет заменён более эффективным в дальнейшем, но пока это лучшее рабочее решение, которое я вижу.
Барон Суббота является приоритетным кандидатом в исполнители перевода текста, но спрайты-надписи пока висят ничьи.
Если у кого-нибудь есть знакомые заинтересованные люди, зазывайте их в этот пост.
Ну в общем-то я свою позицию сказал, могу повторить тут еще раз. Если мне дадут текст - я переведу.
Если будут еще переводчики - лучше сразу выкладывать текст на нотабеноид. Надо будет только сразу решить раз навсегда, как мы переводим выдуманные термины, а в остальном можно работать независимо.
Что насчёт шрифтов, задача переделать буквы под русские подъёмна и/или интересна?
Ладно, давай все же где-то через месяц об этом говорить.
У меня три недоделанных проекта висит, в этих обстоятельствах браться еще за один как-то глупо.
Хорошо, тогда позиция переводчика пока что совершенно пуста.
То, что я извлёк, структурировано так, как оно внутри движка, и не отфильтровано от строк, относящихся к вызовам скриптов через GML. В таком виде этот файл будет совершенно бесполезен и неудобен переводчику, поэтому выкладывать его не буду, а отфильтрую и переформатирую во что-то более удобное, опять же, завтра.
мне вполне удобен. более того, я предпочел бы работать с ним именно в виде скриптоисходников, чтобы знать условия выдачи текста, а не исходить только из материала для перевода
Я исходил из той мысли, что переводчик должен работать с текстом именно как с текстом, а о месте его показа уже знать заранее, или догадаться; то есть пройти игру, собственно говоря, и помнить её ситуации/варианты. Надобность читать кучу окружающего кода, по моей логике, плохо сказывается на внимательности к самому переводу. В любом случае, результат я получил слишком сырой, проще уж работать с исходником. В следующий раз покажу что-то более удобное, как я думаю — и мне (для автоматизированного, если это возможно, запихивания текста обратно), и переводчику (для собственно перевода). Пока что всё, продолжаю программировать утилиты.
Ну и да, слушаю аргументы за и против тех или иных метаморфоз с исходником.
На практике чтение кода оказалось познавательным и очень полезным. Помогло скорректировать ньюансы, а не переводить текст вне контекста и без представления зачем он тут нужен.
Насчет метаморфоз исходника не знаю что сказать. Я считаю, что код вне кавычек игрового текста должен оставаться максимально неприкосновенным. Однако иногда необходимо оговаривать количество страниц текста (перевод может оказаться существенно длиннее, и скукоживание его до нужной величины даст неэстетичную херню на выходе). Плюс ещё некоторые мелкие ньюансы. Например, тому же скрамблеру (см. ниже в комментах) необходимо обозначить гласные буквы для замены их на заглавные. В английском и в русском их разное количество, даже дети знают.
Но это мнение, аргументов в его пользу дать не могу. Разве что адаптация под новые версии гамака будет утомительна.
http://ru.wiktionary.org/wiki/нюанс
Или это была фонетическая шутка?
Разумеется, ведь это уже моддинг будет, а не перевод, если что-то менять рядом. Надо строго текст менять, именно поэтому я не хочу давать эту сырую мешанину кода и текста. Не знаю, как там контекст, а именно работать переводчику (осуществлять основную задачу по переводу на русский) надо чётко со строками самого текста. А для справки пусть параллельно смотрит сам исходник. Я потом составлю какой-нибудь такой формат, чтобы в нём отдельно был текст и пояснение, откуда он из исходника потырен — пока что моё решение по автоматизации такое.
Страниц в смысле блоков? Экранов?
После раздумий на протяжении последних дней я пришёл к выводу, что конвертация Iji в ГМ8.1 или вообще в принципе любой следующий ГМ — это самое последнее, что должно произойти в этом проекте, как последняя мера по спасению чрезвычайно важного перевода (каковым он пока что не является). Пока что (и, надеюсь, навсегда) в эту сторону даже не смотрим — список несовместимых функций довольно внушителен, а как поведёт себя движок во всех комбинациях игровых состояний — этого я предвидеть никак не могу, но знаю что движок столкновений и видов менялся между версиями существенно.
**Или это была фонетическая шутка?**
Нет. Это была ошибка. Моя. Отсюда всплывает ещё один нюанс. Несмотря на то, что после школы я знал русский на 5, долгое общение в интернетах впоследствии сильно подкосило мою грамотность. Я не хотел бы на выходе иметь перевод, за который учитель русского влепил бы двойку. Я, конечно, юзаю спеллчекер и перепроверяю написанное по 20 раз, но текст в итоге будет нуждаться в дополнительной проверке и коррекции, особенно касательно пунктуации.
**Страниц в смысле блоков? Экранов?**
Очередной нюанс). Вопроса не возникло бы, если бы ты поиграл.
Весь текст выводится в специальный мессаджбокс внизу экрана. Если текст не вмещается туда за раз - он разбивается на блоки. Но разбивание не автоматическое.
смотри:
_____________
text[0]="DAN: Hi, this is Dan again. You're now in Sector 2 of the military complex. There's a medical bay nearby, where some of the experiments on Nanotechnology took place. You should be able to find and assimilate a powerful upgrade there - it'll be hard to";
text[1]="get any farther without it. Remember that you're heading for a Tasen called Krotera, as you may be able to convince him to make the Tasen and their spaceship leave the planet.";
portrait=99;
outline=2;
pages=2;
________________
text[0] - первая страница
text[1] - вторая
pages=2 - количество страниц диалога.
при переводе текст может стать существенно длиннее и в предполагаемые две страницы не поместится. проблема при правке исходника вручную исправляется элементарно.
считать количество символов для автоматизации процесса не вариант, т.к. длинные слова, попавшие на конец строки, не разбиваются (вот ещё гемморойчик был бы - словарь переносов заводить) а переносятся целиком на следующую строку.
Весомо.
Хорошо, я тогда буду делать вычитку и вносить предложения на тему корректуры.
М-да. Приходим к тому что с исходником будем работать практически только руками. Ну что же, посмотрим, что можно ещё придумать.
**Пока что всё, продолжаю программировать утилиты.**
Было бы очень полезно, если бы ты запилил утилитку, которая собрала бы коды создания всех инстансов объектов obj_locationmessage и obj_locationmessage2 гуртом в текстовый файл, а потом смогла бы распихать их обратно. Там сообщаются названия локаций и они вручную натыканы по комнатам. Ползать по румэдитору в их поиске совсем невесело, тем более, что визуально они используют тот же спрайт, что и присутствующие в игре разбиваемые стекла.
Ты имеешь в виду Creation code, который имеет вид:
textid="text118";
Да? Я как раз до этого дошёл. Автор игры был явно не дурак, раз он впилил это аж туда, а не тупо в объекты. Впрочем, говорю очевидные вещи...
Только это из obj_log3 (есть ещё 1, 2, 4). obj_locationmessage и obj_locationmessage2 тоже нашёл. Мне будет проще выцепить всё что устанавливает textid, чем проверять тип объекта, поэтому сначала попробую так, втупую.
Да, криэйшн код
http://i.imgur.com/7I6zfoW.png
лучше выцепи то, что устанавливает loc=чотатам
если я тебя правильно понял.
textid это логи журналов, они хранятся в scr_logs, код создания инстанса там нам не нужен
Проклятье! У ГМ нет штатного экспорта кода создания инстансов в комнатах во внешние файлы.
Сегодня же выцеплю. Экспорт скриптов плюс экспорт объектов плюс экспорт криэйшн кода через самописный экстрактор = все тексты игры.
Возник новый вопрос, требующий выяснения.
Господа игроки, как вы запускаете Iji? Работает ли он в:
Windows 7?
Windows 8?
32-bit? 64-bit?
Адаптация и перекомпиляция игры под 8.1 могла бы решить проблему запуска на новейших операционных системах, поэтому отписывайтесь, ваша информация важна для проекта.
Я точно знаю, что игры, скомпилированные ГМ6/6.1 испытывали с этим трудности, но коснулось ли это ГМ5.3?
У меня Iji работает под: WinXP (SP со 2-го по 3-й), Win7 в обоих вариантах (32/64).
Спасибо. Хм... Выходит, проблема с 64-битностью касалась ГМ6, либо 7.
Круто! Там так много текста, что с моим знанием английского, приходилось все диалоги скипать. Если переведете, для многих игроков, думаю это станет хорошим поводом перепройти игру и получить новые впечатления.
Есть знакомые, которые переводят? Проекту нужны кандидаты.
у меня есть, првда он по фанфикам MLP больше...
Неа :( Го на http://translatedby.com/
Спасибо за рекомендацию, но внезапное появление 0int склонило моё мнение в сторону того, что у нас пока что достаточно сил.
Хм... Со стороны история локализации чем-то напоминает многочисленные попытки перевести на русский Chrono Trigger. Я не злорадствую, удачи вам с переводом. И если Космос не против - пусть ваш вариант будет первым и наиполнейшим.
Исправленные исходники в итоге можно отослать автору и попросить перекомпилить. У него китайская и корейская локализации вон висят на сайте. Не думаю, что он такой мудак, что пошлёт нас нахуй с нашим переводом.
но что-то мне подсказывает, что заранее согласовывать это с ним смысла не имеет. попыток уже было столько, чт на очередной запрос я бы на его месте ответил БУГАГА. нужно по факту мол все уже готово, дядь, скомпилируй.
Вообще я неспешно занимаюсь этим делом последние три недели. Уже дорисовал шрифты по образу и подобию оригинальных (кодировка 866, буквы Ё нету, заглавная Й по краям на пиксель ниже остальных заглавных букв) и перевел ~70% диалогов (именно диалогов а не логбуков или катсцен).
Для перевода названий локаций поворошить текстовый файлик будет недостаточно. Надо вручную пройтись по картам и поправить конкретные объекты.
Внезапно. Какую часть от игровых текстов ты хочешь/можешь перевести? Есть ещё иконки с латинскими буквами, которые нужно перерисовать.
Я в курсе, и текстовый файлик править даже вовсе бесполезно — весь текст врезан внутрь движка. Я сейчас разрабатываю систему для автоматизации перевода. Даже если всё придётся править вручную, можно как-то ускорить или облегчить поиск тех мест, которые нужно править.
И да, откуда ты брал текст? Что ты собственно правил? Исходник прямо на месте?
вообще если других участников не будет, то я в силах все сам сделать. тем не менее, если будет какое-то разделение труда, то я бы занялся диалогами, логбуками и катсценами. очень влом переводить меню. как обладателю нетбука с мизерным экраном так же не хотел бы обшаривать уровни в поисках объектов, сообщающих названия локаций ибо через окошко размером со спичечный коробок это делать оче грустно. разукрасить hud могу, но с радостью спихнул бы это, как и всю оставшуюся графическую работу, на кого-нибудь ещё.
напоминаю также о необходимости создания общего словаря терминов, чтобы не путаться
нужна также будет помощь в наполнении словаря scrambler'а.
-------
текст исходника и правлю, ага. там часто надо смотреть ситуации, по которым выдается текст, чтобы адекватно перевести ибо некоторая нелинейность присутствует.
Да, разделить перевод основной сюжетной канвы и меню/интерфейсов — это весьма уместная мысль. Пожалуй, так и стоит устроить, и разукрашивание тоже от этого независимо.
Словарь терминов... у тебя есть регистрация на Нотабеноиде? Можно конечно и тут обсуждать, но многостраничные ветвистые комментарии на текущем движке Гамина это жесть, а их может выйти весьма много.
Текст исходника, говоришь... Кажется, это наталкивает меня на какие-то новые алгоритмы.
В чём прикол scrambler'а?
андроид два раза скушал огромный коммент. я слишком утомился, чтобы набивать его третий раз. все завтра
**В чём прикол scrambler'а?**
Это a kind of пасхалка. Использование альтернативного переводчика с инопланетного на человеческий и обратно. Ньюанс в том, что он забагован и иногда переводит неправильно. Во-первых - он подменяет некоторые определённые реплики определённой бредятиной. Во-вторых - иногда рандомно заменяет определённые слова в игровом тексте на какое-нибудь слово из своего словаря, равное по длине. Есть там ещё некоторые ньюансы. В любом случае словарь большой и заполнять его утомительно, особенно, когда пойдут слова по 11 букв. Я уже основательно приложился, но там работы непочатый край.
Занятно. А там слова небось ещё в разных формах и контекстах, нужно окончания приделывать русские там, где их не было?
скрамблер заменяет слова абсолютно рандомно. Единственный критерий - длина должна быть одинаковой. Поскольку в английском словоформы более универсальны вплоть до того, что одно и то же слово может быть и глаголом и существительным, да и склонять их особо не надо - разраб особо не парился. У нас же будет все сложно.
Я вижу такие варианты:
1) Мы кладем болт на окончания и просто заполняем словарь разными словами в тех формах, которые нам приспичит. Это только добавит предполагаемой бредовости.
2) Мы кладём болт на неприкосновенность кода и программируем туда анализатор слов, который учитывал бы формы заменяемых слов.
3) Мы кладём болт на рандомную замену слов и прописываем все "проскрамбленые" диалоги вручную, а рандомайзер вырезаем.
4) Мы кладём болт на скрамблер.
Варианты изложил в порядке убывания приемлимости. Второй вариант был бы хорош, но не уверен, что он реален.
Мне кажется, (3) даже хуже чем (4). Впрочем, не о том речь.
Пока что (1) мне тоже кажется кажется самым приемлемым. Что до (2), то поясни мне конкретно, какую задачу должен этот анализатор решать, и я оценю, насколько это реально (в наших силах).
**что до (2), то поясни мне конкретно, какую задачу должен этот анализатор решать, и я оценю, насколько это реально (в наших силах).**
анализировать слова на принадлежность к той или иной части речи, смотреть падежное наклонение и брать слова для замены из соответствующего словаря по образу и подобию.
это не в моих силах однозначно, я не уверен, что смогу даже внятно сформулировать условия
Ну, это слишком общая задача, в таком виде. Давай про этот вариант забудем.
**Дело в том, что я... не играл.**
Это... досадно. Я бы советовал поиграть. Не из соображений в стиле КАК-ТЫ-НЕ-ИГРАЛ-В-ЭТОТ-ШЕДЕВР а хотя бы потому, что тяжело объяснять на словах некоторые ньюансы, вопросы о которых возникнут в процессе перевода. В принципе, теперь мне понятно, почему ты считаешь тэги условий воявления текста необязательными.
Впрочем, я прошёл сабж всего один раз. Но потом я очень основательно изучил официальные гайды, которые разбирают игру едва не по косточкам. И да. именно чтение текста вперемешку с кодом мне помогло ещё яснее понять, что будет происходить в игре при каких условиях.
На самом деле, если мы в итоге будем пилить совместный перевод, а не каждый сам по себе и кто первый поспеет, то решение каких-то особенных технических задач будет большей частью необязательно и скорее затруднит процесс. Но некоторые вещи я бы таки хотел автоматизировать.
**Словарь терминов... у тебя есть регистрация на Нотабеноиде?**
Нету. Но завести недолго. Вообще в силу того, что содержимое скриптофайлов scr_chats, scr_chats2 и половины scr_chats3 я уже перевёл - у меня уже накопился некоторый словарь, который я составлял по ходу перевода.
Вообще рекомендую сначала перечитать дискуссию, касаемую перевода The Domovoi (гамин что-то кнопок с тэгами не предлагает, так что ссылка http://gamin.me/blog/mini-reviews/11968 ). Несмотря на то, что свою позицию я считаю единственно верной, я отдаю себе отчёт, что не каждому она по душе и, возможно, не каждый потенциальный участник согласится под нее подстраиваться. Но бросать сделанное и наступать себе на горло ради того, чтобы вечно недовольные люди вроде yeo сказали что мол малаца, хорошо перевёл, я не намерен.
Чтобы было понятно - я стараюсь придерживаться максимально близко к оригиналу, но бывают моменты, когда приходится совершать незначительные искажения и добавлять что-то от себя ради целостности языка перевода.
На самом деле, у меня нет вариантов: я не могу переводить игру, в которую не играл, и помощь в автоматизации перевода (который уже есть кому делать) для меня куда более приоритетна, чем прохождение игры. Одновременно играть и участвовать в переводе — не вариант, у меня есть ещё другие проекты параллельно. А игра-то объёмная, да с фабулой, издалека видно.
Короче, на этих выходных решаю задачу с экспортом текста из исходника, с записью, откуда он был взят, чтобы можно было посмотреть и/или модифицировать исходник.
Что до содержимого/качества перевода, пока никаких замечаний не нахожу.
Йео, кстати, не вечно недовольный, просто ему довольно тяжело угодить.
Вот тебе задачка
Переводчику дают текст в котором рядом стоят две записи.
1) "IJI: No, that's not right. You already know that the Tasen are as good as gone!"
2) "IJI: No, that's not right. You already know that the Tasen are as good as gone."
Разница в восклицательном знаке. Как переводчик может понять условия выдачи того или иного варианта? Он, конечно, может не париться и тоже просто перевести со знаком и без него, но если он знает контекст - он может использовать возможности Великого и Могучего.
Ответ хотел поместить под спойлер, но Гамин последнее время отказывается показывать мне кнопки для форматирования текста, а тегов я не помню.
Итак, код выглядит так:
if (global.kills+global.totkills>50)
text[0]="IJI: No, that's not right. You already know that the Tasen are as good as gone!";
else
text[0]="IJI: No, that's not right. You already know that the Tasen are as good as gone.";
Упрощая, есть путь пацифиста и путь берсерка. Определяются интенсивностью убивания врагов. Если заберсерковать - то Иджи становится злее, у нее меняется голос и, нередко, выражение лица на портрете при диалогах. Ну и многие реплики.
Зная это, увидев в условиях строку global.totkills>50 переводчик будет знать, что он должен придать прямой речи злой настрой.
**Йео, кстати, не вечно недовольный, просто ему довольно тяжело угодить.**
Вот я тогда и не буду пытаться.
Это-то я понял, но почему ты считаешь, что следует менять содержимое самого текста здесь? Мне кажется, если автор просто повторил фразы с другим знаком, то и в переводе должно быть так. Вот когда он их явно поменял на другие, тогда и перевод должен быть другим. А то получается щепотка отсебятины. Хотя мне интересно — что же именно ты собираешься туда писать, новое?
**Мне кажется, если автор просто повторил фразы с другим знаком, то и в переводе должно быть так.**
Тебе так кажется именно потому, что ты не играл и не знаешь происходящего.
Перевод это всегда lossy transfer. Если строго придерживаться буквы оригинала - язык перевода станет бедным. Понимаю, что все хотят читать именно то, что написал автор, но все нюансы при дословном переводе ты передать не сможешь. Но если ты хорошо знаешь контекст - ты будешь знать, какую щепотку отсебятины ты можешь добавить для компенсации потерь и чтобы не исказить исходную фабулу. Оригинальный язык может не обладать достаточными выразительными средствами для описания условия разными словами, поэтому автор мог написать одинаково. Но у нас то язык великий и могучий, и почему мы не можем пользоваться его богатствами...
В данном случае для руccкого языка нет адекватного аналога красивого оборота "as good as gone!", но зная контекст я мог бы по разному эмоционально раскрасить фразу, учитывая, что в одном варианте Иджи относится к уничтоженным Тасенам как досадному явлению, а в другом - как к несчастному истреблённому народу.
Всегда всё дело в контексте и уместности.
Что ж, аргумент, да.
Мне в общем-то главное, чтобы в переводе это выглядело целостно, а именно — результат твоего им владения.
Тогда просто доверься мне =)
Доверяй, но проверяй. Буду делать полную вычитку в конце. Вот сверять с источником действительно не буду.
Патчить откомпилированную игру будет особенно геморно в виду того, что большие блоки текста хранятся не монолитными кусками, а имеют отдельную секцию на каждую страницу мессаджбокса. если вследствие перевода какие-то телеги займут сильно больше букв, чем оригинал, то это потребует вмешательства в код за пределами кавычек игрового текста т.к. количество страниц надо оговаривать. тупой заменой ресурсов тут не обойтись.
Что ты имеешь в виду под "патчить откомпилированную игру"? Вырезать текст из неё и вставлять обратно другой? Это решение плохо тем, что тогда длина текстов будет ограничена той что была в оригинале, нельзя расширять. Так что патчить будем разве что исходник, если это можно/нужно будет автоматизировать.
Фрагмент из заглавного поста:
**Что можно сделать:
Взять уже откомпилированную игру и допатчить её до "русского состояния", скажем так. Писать кастомный экстрактор-импортер ресурсов с конвертацией спрайтов в PNG и обратно. Это совсем накладно.**
А, тут ты прав. Надо эти старые размышления убрать под спойлер, пожалуй.
Итак, вот они, обещанные отфильтрованные (от scr_sound) экспортированные тексты Iji:
https://dl.dropboxusercontent.com/u/75034586/Translations/Iji/All%20strings%20-sounds.txt
Здесь, к недоумению переводчиков, есть ещё и строки, которые используются в коде в системных целях. Но ведь больше — не меньше, верно? Тут должны быть все тексты. Если вдруг кто-то найдёт недостачу — пишите. Я уверен, что извлёк совершенно всё, включая элементы Creation code, запрошенные 0int'ом.
Делаю вывод, что объём чистого текста в проекте — примерно 400КБ, в самом лучшем случае — 300.
Это здорово, но немалую часть содержимого этого файла я уже перевёл =/
было бы неплохо разделить его на части
Нужные элеметы криэйшн кода в файле отсутствуют. задал поиск по used materials disposal (название локаций), соответствий не обнаружено...
Ооо. Да это ж я забыл захватить последнюю секцию ресурсов. Ты прав, здесь не хватает именно и чётко этих текстов. Пойду заводить экстрактор ещё раз.
Успешно извлёк.
https://dl.dropboxusercontent.com/u/75034586/Translations/Iji/All%20strings%20from%20room%20instance%20creation%20code.txt
Вот они. Эти два файла (этот и тот что выше) должны содержать целиком весь текст в игре, хоть содержат и не только его, а ещё и идентификаторы всякие внутренние, используемые для диалогов и текстов.
Небольшой прогресс-репорт:
Первичный перевод диалогов (содержимое scr_chats, scr_chats2, scr_chats3) закончен.
Я добавил ссылку на программу автоматической проверки длин текстов диалогов в пост. Она, правда, не указывает textid, но она приводит само сообщение, которое легко можно найти WordPad'ом в файле всех скриптов.
Проект перевода приостановлен. Нужно работать с текстом, а для меня это слишком много и не интересно. Техническую часть я проработал, насколько это было нужно. Где 0int — не знаю.
https://www.dropbox.com/sh/yr4j585expi2rj4/AACV4-T6ZG0DvXq0Wzz3X0Qja?dl=0
Короче, вот мои шрифты. Нужно будет конвертнуть их в .пнг, указать зелёненький фон на русских буквах в качестве прозрачного и импортнуть в гамакоисходник как спрайтшит. Латинские буквы подразумевались автором иметь фон непрозрачный - т.е. задники, поверх которых они печатаются, изначально того же цвета. Буквы Ё и Й (заглавные) есть, но вкрячить поверх них точки и капы надстрочно, сохранив высоту букв, не вариант. Сами по себе они выглядят норм, но рекомендую избегать слов КАПСОМ с их применением т.к. по соседству с другими заглавными буквами они выглядят уже не алё. Использовалась кодировка CP-866 (досовская) как наименее ресурсоёмкая. Шрифты и так заметно увеличивают время загрузки игры, но саму игру не тормозят вроде.
Хотя если интересно их заново рисовать - вперёд.
Очень хорошо, спасибо. Думаю, перерисовывать их ни к чему, а кто будет жаловаться — того и отправим либо рисовать, либо искать того, кто нарисует.
https://www.dropbox.com/s/pwzx4sz0gydltl5/%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%B2.txt?dl=0
Собственно, обещанный словарик, который составлялся по ходу перевода. Содержит не 100% терминов, но те, которых там нет, либо настолько тривиальные, что вопросов с ними не должно возникнуть, либо я на них ещё не наткнулся.
У меня есть предыдущие две версии; эта, следовательно, третья, и последняя от тебя.