Yakuza 5. Часть 11: Ору на код как на кота. Рестораны переведены, а со шрифтами найден компромисс
Всем привет! С момента выхода 10-й части девлога работа над проектом перевалила за очередной экватор. После глобального рефакторинга инструментов я наконец-то плотно занялся контентом, который встречается буквально на каждом шагу: меню баров, описания блюд и, конечно, шрифты. В этой части я покажу, как обстоят дела с переводом «общепита», честно признаюсь в «поражении» перед некоторыми особенностями движка в плане шрифтов и задам несколько вопросов по поводу грядущего релиза демо-версии.
Глава 35: Ресторанный марафон и возвращение к истокам
Когда я говорил о подготовке к версии 0.1, я не до конца осознавал, какой объем «мелочевки» придется разгребать. Главным фронтом работ на этой неделе стал общепит и системные строки.
Во-первых, это 178 бинарных файлов из папки wdr.par.unpack/shop/. Здесь лежат все магазины (shop0000.bin–shop0097.bin), бары и рестораны. Раньше они были «черным ящиком», но теперь все 178 файлов переведены. Это тысячи строк: от состава суши в Нагасугае до элитного алкоголя в Камурочо. Навигатор Сузуки теперь видит структуру этих файлов корректно, сохраняя переменные стоимости и теги, благодаря чему Кирю наконец-то может заказывать еду, понимая, что именно он покупает.
Во-вторых, я плотно занялся «сердцем» интерфейса — файлом string_tbl.bin из boot_en_unpacked. Это очень капризный файл, в котором зашиты названия предметов, действия в мини-играх и кнопки меню. Здесь я столкнулся с интересным парадоксом: мои новые универсальные сканеры в некоторых местах читали данные некорректно, и мне пришлось вернуться к старому Редактору Меню (плагин 30_menu_editor.py). Оказалось, что узкоспециализированный «старичок» справляется с этим конкретным бинарником гораздо надежнее. Я не пожалел, что оставил его в системе — именно через него удалось пересобрать основной файл без вылетов и потерь.
Однако борьба с движком продолжается. Редактор Дракона (.msg) всё еще периодически «радует» обрезкой строк. Несмотря на все технические ухищрения и пересчет длин в метаданных, в некоторых диалогах текст упорно не хочет расширяться. В итоге мне пришлось провести еще одну масштабную ревизию и вручную сократить целую пачку строк, подгоняя их под «железные» лимиты движка. Это рутинная и обидная часть работы — когда красивый, живой перевод приходится кромсать ради того, чтобы он просто влез в экран, но без этого стабильной демки не видать.
Параллельно начата работа над меню паузы: профили персонажей и кабаре в caba_profile.bin уже на русском. Впереди еще сотни файлов в папке pac, которые пока не поддаются автоматическому чтению указателей, но английский текст там найден, а значит, это лишь вопрос времени и правильного «ключа».
Глава 36: Код «Ёжик», шрифтовое отчаяние и хак с «Воспоминаниями»
Если Глава 35 была про массовость, то эта — про время. Куча времени на этой неделе ушло на шрифты, и я не буду лукавить — идеального результата достичь не удалось.
Движок Yakuza 5 в плане работы с буквами оказался на редкость упрямым. Я перепробовал всё: автоматическое определение границ через OpenCV, микро-масштабирование, принудительное сжатие широких букв вроде «п» или «о». Но в определенных комбинациях они всё равно слипаются. В итоге я пришел к «золотой середине»: немного изменил масштаб заглавных и строчных букв, чтобы они выглядели ровнее, и полностью убрал контур (обводку). Без контура наложения букв друг на друга стали почти незаметны, а текст стал читаться мягче. Это не тот перфекционизм, к которому я стремился, но это лучший вариант, который можно выжать из моноширинной сетки движка без полной переделки системы вывода текста.
Зато в другом месте произошел настоящий прорыв. Мой плагин для субтитров («Сценарист») обзавелся новым кодом, который я прозвал «Ёжик».
Почему «Ёжик»? Потому что он очень колючий в плане математики, но теперь его не прошибить. Раньше у меня была серьезная проблема: в некоторых катсценах субтитры просто исчезали или отображались некорректно. Оказалось, проблема была в неправильном расчете таймингов при разделении строк и отсутствии нормального экранирования кавычек. «Ёжик» решил это раз и навсегда. Теперь код правильно считает миллисекунды для каждого чанка текста и корректно обрабатывает кавычки (то самое \", о котором мы говорили). Катсцены больше не «немеют», а текст идет ровно по таймингу.
И напоследок — о том, как я всё это проверял. Раньше тесты превращались в пытку: чтобы увидеть одну правку в шрифте или субтитрах, нужно было заново проходить куски игры, слушать долгие диалоги и надеяться, что ты ничего не пропустил.
Я нашел способ лучше — раздел «Воспоминания» в главном меню. Это идеальный полигон для тестов по нескольким причинам:
- Масштаб: В катсценах из «Воспоминаний» используется самый крупный шрифт. Все косяки кернинга и слипшиеся буквы там видны как под микроскопом. Если там выглядит сносно — в обычном диалоге будет идеально.
- Скорость: Можно мгновенно прыгнуть в любую важную сцену, проверить «Ёжика» в деле и убедиться, что кавычки на месте, а текст не обрезается.
- Обход ограничений: В игре многие диалоги нельзя пропустить, а в «Воспоминаниях» можно быстро переключаться между сценами.
Этот хак со сценами сэкономил мне кучу нервов. Теперь я могу уверенно сказать: хоть шрифты и остались моей «головной болью», технически субтитры и системные тексты теперь работают на порядок стабильнее.
Глава 37: Файлы взаимодействия и вопросы к релизу
Пока одни участки игры уже полностью на русском, другие остаются «крепкими орешками». Сейчас я пытаюсь подобрать ключи к папке wdr.par.unpack/pac/. В ней лежат сотни файлов pac_STID_*.bin. Аббревиатура STID (Stage Interaction Data) говорит сама за себя — это данные о взаимодействии персонажей с миром. Именно здесь зашиты те самые ситуативные реплики, которые Харука или Кирю произносят, когда проходят мимо магазинов, аттракционов или игровых центров. Без них город кажется немым, но файлы сопротивляются: текст там разбросан кусками между логикой анимаций, а стандартный поиск указателей их не видит. Я продолжаю искать способ вскрыть их без вреда для стабильности игры.
Тем не менее, демка приближается, и мне нужен ваш совет:
- Формат выпуска. Я планирую выложить обычный ZIP-архив с папкой data. Вам нужно будет просто закинуть её в директорию игры с заменой файлов. Это надежнее любого инсталлятора. Что думаете?
- Где качать? Релиз точно будет на PlayGround и в моем Telegram-канале. В качестве «зеркал» — Mega.nz или MediaFire. С ZoG связываться не очень хочется — сайт технически и визуально неудобен.
- Поддержка и Boosty. На следующей неделе займусь верификацией на Boosty и начну переносить туда архив всех постов с DTF. Это будет резервная площадка на случай, если с Telegram или аккаунтом на DTF что-то случится. Там же можно будет поддержать проект рублем. Как вы смотрите на то, чтобы подписчики на Бусти получали доступ к демке и билдам на 2-3 дня раньше публичного релиза?
Глава 38: «Те самые проценты» и список завершения
Меня часто спрашивают в комментариях: «Ну сколько там процентов готово?». Я долго уходил от этого вопроса, потому что в таком огромном проекте считать прогресс — дело неблагодарное. Но раз просите, вот вам цифры «от балды», максимально приближенные к моим ощущениям. Сразу оговорюсь: всё это очень примерно. Я делаю этот перевод в своё удовольствие и не обещаю, что дотяну каждый пункт до 100%. Если какой-то кусок окажется слишком скучным, запрятанным слишком глубоко или просто неинтересным — он может остаться как есть.
- Техническая часть (Инструментарий): ~85%. База готова, но впереди еще много правок. Навигатор Сузуки, Студия Сайджо, Камуро-Дизайн — все они постоянно дорабатываются под конкретные капризные файлы. Сейчас, например, нужно научить софт правильно паковать данные мини-игр (караоке и прочее), где в каждом архиве свои нюансы.
- Интерфейс и текстуры: ~30%. Тут работы больше всего, и я это знал заранее. Главы и подписи врагов сделаны, но туториалы и тысячи мелких текстур всё еще ждут своего часа. Сейчас интерфейс готов в основном для части Кирю, для остальных героев текстуры нужно еще найти, перенести и адаптировать.
- Текст (Сюжет и доп. контент): ~70%. Сюжетные катсцены, основные диалоги, бары, рестораны, профили в кабаре и большинство сабстори уже на русском. В это уже можно полноценно играть и понимать всё происходящее.
Что сделано на текущий момент:
✅ Перевод и сборка 178 файлов магазинов и ресторанов.
✅ Массовый перевод профилей персонажей и хостес.
✅ Полный фикс системы субтитров (код «Ёжик»).
✅ Оптимизация шрифта (удаление контуров, калибровка).
✅ Рефакторинг основных инструментов под версию V2.0.
Ближайшие планы:
- Демка 0.1: Сборка первого стабильного билда для тестов.
- Настройка Boosty: Верификация и создание резервного архива всех постов.
- Интерфейс: Попробую автоматизировать перенос текстур между персонажами в Студии Сайджо, чтобы не перерисовывать всё вручную.
- Папка PAC: Продолжение поиска «отмычки» для файлов взаимодействия.
На этом 11-я часть девлога подходит к концу. Если у кого-то есть желание помочь с переводом или тестированием — пишите. Главное сейчас — дожать демку и не перегореть.🐉🔥