Курс йены

По ходу повествования есть эпизод, когда Мейя в свойственной ей манере покупает билет на городскую электричку, оплатив его купюрой в 10000 йен. В этом месте я решил добавить всплывающую подсказку с переводом в рубли. Однако когда я начинал перевод, там выскакивало «3100 рублей». Нынче же курс поменялся настолько, что решил обновить примечание до 4000 и, судя по всему, это далеко не предел. Хотя я, помню, рассчитывал на то, что йена довольно волатильная валюта и, даже если рубль упадёт, йена его догонит. Однако поди ж ты, рубль её таки переволатилил. Хоть переводи всё в приснопамятные «у.е.»

Текущее

На перевод нескольких сот строчек в концовке Мейи ушло не меньше двух недель. И не то чтобы там были какие-то особые языковые сложности, просто фразы типа «I steal her lips and suck hard» (в оригинале 「唇を奪い、強く吸い上げる」) вызывают у меня приступы идиосинкразии. Происки гомеостатического мироздания, не иначе. Как бы то ни было, дело всё-таки движется, хоть и медленнее, чем я рассчитывал.

Хентай в визуальных новеллах

Те самые сцены, из-за которых большинство новелл имеют возрастное ограничение 18+… У меня к ним двоякое отношение. С одной стороны, сексуальная близость — это физическое проявление любви, поэтому в произведении с романтическими отношениями между героями сцены секса вполне уместны. С другой стороны, то, как эти сцены изображаются в японских новеллах… Если ты видел одну, ты видел их все. «Ах, мне неловко, а-а-ах, у меня это первый раз, о-о-о, у тебя такой большой, а-а-ах, я чувствую тебя внутри, о-о-о, да, да, кончим вместе, вместе, А-А-А-А-А» (в этом месте сэйю истошно вопит, изображая оргазм). После этого герой извергает примерно литр спермы (в особо запущенных случаях на это уходит около минуты). Лично у меня ничего кроме кривой улыбки подобные сцены не вызывают. Особого упоминания заслуживают знания женской анатомии в среде японских сценаристов. Например, по их мнению, девственная плева находится глубоко, буквально «где-то на полпути» (клянусь, видел такие слова в какой-то новелле). Либо у японок анатомия немного отличается от остальных женщин планеты, либо японские сценаристы черпают свои знания исключительно из произведений своих коллег по цеху. Почему-то последнее мне представляется более вероятным. Возникающая при этом рекурсия берёт своё начало, по-видимому, в начале 90-х, когда зарождался сам жанр визуального романа.

Самые правдоподобные и уместные постельные сцены, которые я встречал, были в «Katawa Shoujo», однако ирония заключается в том, что она написана западными энтузиастами и только стилизована под обычные японские новеллы. Благодаря этому «Х-сцены» в ней свежи, оригинальны и лишены избитых клише.

Что касается «Muv-Luv» — она типичный представитель жанра, так что и её не миновала чаша сия. В «Extra» и «Unlimited» на каждую героиню приходится по одной сцене, причём по японским меркам они довольно «софткорны». Сцена Сумики при внимательном прочтении оказалась даже несколько трогательной (в первый раз, признаться, пробежал её мельком). В «Alternative» же всего две такие сцены, и они в некотором роде органично вплетены в сюжет, хотя на этот счёт существуют разные мнения.

Отмечу в заключение, что в 30-часовой новелле (если это, конечно, не «нукигэ») Х-сцены в сумме редко занимают больше 10-15 минут, т.е. составляют менее 1% экранного времени, так что не стоит уделять им слишком много внимания, в конце концов, в клинических случаях всегда поможет кнопка CTRL.

На всякий случай примечание: картинка шуточная.

Shikata ga nai

«Щката га най» (仕方がない) — японский фразеологизм, означающий отсутствие альтернатив, покорность судьбе и готовность безропотно преодолевать жизненные невзгоды. Примерный русский перевод — «ничего не поделаешь».

В Muv-Luv Extra есть сцена диалога Такеру с Мейей, в котором Мейя объясняет, что готова стать главой концерна Мицуруги, хоть это и потребует отказа от всех личных желаний и амбиций. Такеру не верит в её искренность, и делает ей замечание, когда она медлит с ответом. Мейя говорит, что «просто долго не могла подобрать нужные слова. Щката га най.» Такеру в ответ на эту реплику взрывается, «Как щката га най?!» Мейя начинает лихорадочно оправдываться, мол, он её всё-таки неправильно понял и она вовсе не это имела в виду (в переводе, естественно, звучит «ничего не поделаешь»).

Тут довольно тонкий момент — «щката га най» Мейи подразумевал, что она ничего не может поделать с тем, что ей не хватает слов. Такеру же воспринял это так, словно Мейя смирилась со своей судьбой, с тем, что ей придётся отказаться от личной жизни в пользу семейного бизнеса. Мне кажется, в переводе этот нюанс немного ускользает.

Ничего не поделаешь.

Ресурсы перевода

Выложу тут свои программные наработки. Для начала, модули запуска новелл Muv-Luv, не требующие японской локали. Работают только с DVD-версиями с наложенным английским патчем от Amaterasu Translations. Взять их можно, например, на fuwanovel.

Теперь, если кому-то захочется попробовать свои силы в переводе Alternative:

xAMI — утилита для извлечения/упаковки текстов и картинок в игровой файл данных («data.ami»).

Тексты Muv-Luv Alternative — отличаются от того, что извлекает предыдущая утилита, добавленным японским текстом. В скриптах строчки с тегом «jp» — японский текст, «en» — английский, «ru» — шаблон для русского перевода. Для одной главы японский текст отсутствует — тексты извлекались из игровых архивов «Alternative.rio», извлечь удалось не всё. Кодировка текстов — Shift-JIS.

Обратно тексты «подцепляются» утилитой xAMI:

  1. В «Source archive» указывается исходный файл data.ami — оттуда будут браться картинки.
  2. В «Source directory» указывается папка с текстами.
  3. В «Save to archive» указывается файл «data.amr» в папке с игрой.
  4. Ставится галочка «Borrow missing files from source archive».
  5. Кнопкой «Create» создаётся файл данных.
  6. При запуске игры вышеприведённой «запускалкой», переведённый текст будет браться из файла «data.amr».

На этом пока всё.

Status: 20%

Загрузчик и эмуляция японской «локали»

За последнюю неделю перевёл всего несколько сот строчек: нелегко, однако, дался кулинарный поединок. А ведь дальше будет лакросс… Бр-р-р-р… Чтобы развеяться, написал загрузчик, который позволяет загружать игру без необходимости переключения системы в японскую «локаль» и без костылей вроде AppLocale. А то для русского перевода требование японского языка в системе выглядит как-то нелогично. По ходу дела так увлёкся, что попутно русифицировал менюшки и конфиги, хотя сначала вообще не планировал этого делать. Чего только не сделаешь из любви к искусству ^_^

Загрузчик эмулирует для rUGP (это «движок» игры) японскую «локаль» методом заката солнца вручную, перехватывая некоторые WinAPI вызовы и перекодируя данные из японской кодировки Shift-JIS в юникод и обратно. Далее немного энтомологических наблюдений «из жизни ёжиков», простым смертным это неинтересно, пишу здесь для себя, так сказать на будущее, чтобы не забыть.

Если создать процесс через CreateProcess с флагом CREATE_SUSPENDED, а потом внедрить в него DLL с помощью CreateRemoteThread, то перед выполнением внедрённого потока процесс будет инициализирован, в частности, будут загружены все импортируемые DLL-ки и выполнены их DllMain. В случае C++, на котором написан rUGP, это означает, что будут вызваны конструкторы глобальных объектов, объявленных в DLL. Фишка в том, что всё это произойдёт во «внедрённом» потоке, а не в основном. Learned it, что называется, the hard way. rUGP за каким-то хером запоминает идентификатор потока (GetCurrentThreadId) в одном из таких объектов, и потом, сильно позже, уже во время непосредственного выполнения процесса, обламывается, потому что думает, что объект был инициализирован в том же потоке, в котором теперь используется. Конечно, после живительной DLL-инъекции для неё уже нет ничего невозможного и всё это успешно фиксится. Впрочем, на самом деле это была уже вторая проблема, с которой пришлось столкнуться. Первое, что потребовало фикса — перехват рантайм-вызова _setmbcp и насильственная установка японской кодовой страницы, без этого почти ничего не работало. После этого осталось сделать перехват обращений к реестру и файловой системе, ну а дальше уже косметика.

И все эти пляски с бубном нужны только из-за того, что невозможно программно сменить кодовую страницу в отдельном приложении. Вызов GetACP есть, а вот SetACP — нету, и я в общем-то понимаю, почему. У меня была сначала мысль «хакнуть» память процесса, чтобы API-функции ядра думали, что работают в японской кодовой странице, но всё-таки это слишком системно-зависимо: поменяется после очередного виндового сервис-пака что-нибудь в kernel32.dll, и привет. Способ с перехватом API надёжнее и предоставляет дополнительные возможности для перевода интерфейса, тех самых менюшек и диалогов. И, кстати, диалога сохранения/загрузки, в котором благодаря этому получилось перевести отдельные ячейки.

Ладно, теперь свидание в парке аттракционов, и вперёд, тренировки по лакроссу…

Status: 10.5%

Перевод «Alternative»

Я прекрасно отдаю себе отчёт в том, что перевод японской новеллы с английского — это паллиатив. Но факт остаётся фактом: «Muv-Luv Extra» — примитивная романтическая комедия, и переводом её испортить трудно просто потому, что ляпы перевода будут незаметны на общем дебильном фоне.  И отчасти из-за этого я не планирую браться за «Alternative», замысловатый сюжет которой легко загубить переводом.  Ну и ещё из-за объема. В Extra и Unlimited многие сцены в сценарии механически дублируются в разных ветках (скажем, один и тот же текст сцены первой встречи с Аяминэ на крыше вписан 3-4 раза в разные дни), таким образом число строк в скрипте больше, но фактически текста меньше, чем в «Alternative», сюжет которой в общем линеен.  С другой стороны, читать «Muv-Luv» без «Alternative» особого смысла нет…

Хотя на этот счёт существует и точка зрения, высказанная в своё время «широко известной в узких кругах» Aaeru с fuwanovel, что плохой перевод лучше, чем вообще никакого. Поживём — увидим.

Image

Status: 9.8%

Хэпберн vs Поливанов

Честно говоря, мне по большому счёту всегда было плевать, как транскрибируются японские имена собственные в переводах, которые я читаю.  Разве что, иногда режет глаз тупая транслитерация ромадзи («tsu» → «тсу» вместо «цу»).  Основной камень преткновения — шипящие звуки вроде «し». Звучит он как что-то среднее между «щи» и «си», в ромадзи записывается как «shi», а у Поливанова — как «си».  Поскольку 90% аниме у нас переводится с английского, а в школе учат, что «sh» читается как «ш» (хотя на самом деле даже в английском этот звук всё-таки ближе к «щ»), имеем то, что имеем. Короче говоря, при чтении японских имён собственных надо просто это понимать и сильно на эту тему не заморачиваться.

В общем, не то чтобы я фанат Поливанова, но «Широгане» мне как-то не по душе, так что не обессудьте.

Image

Слышится так, как читается!

Status: 8.6%

Muv-Luv, первый блин

Разобравшись с хаком для подмены шрифта в rugp, приступил к переводу. Примерный объём текста — 60000 строк (35000 extra и 25000 unlimited). Ориентировочные сроки работ — 3‐4 месяца. Перевод, в основном, с английского (Amaterasu Translations), но в спорных местах смотрю японский оригинал через google translate и honyaku (знаю, знаю). Текст, за редкими исключениями, несложный (во всяком случае, пока Козуки не начала задвигать свои мозговыносящие теории). Основная сложность при редактировании — движок не умеет переносить текст по словам (что, в общем-то, неудивительно) и приходится расставлять переносы в предложениях вручную. На написание и отладку хака для переноса слов в самом движке уйдёт 50-60 человекочасов. Порасставляю лучше вручную.

Image

Сумика, это не самое плохое, что с тобой может случиться!

Я до этого читал Muv-Luv всего один раз, по диагонали, только для того, чтобы побыстрее добраться до Alternative. Теперь, когда приходится внимательно изучать каждую строчку, периодически натыкаешься на милые сердцу отсылки к будущим событиям в MLA.

Status: 7.8%