Автор Тема: Игра Snake от geeks3d  (Прочитано 1772 раз)

Оффлайн Kirill Borisenko

  • Постоялец
  • ***
  • Сообщений: 178
    • http://
Игра Snake от geeks3d
« : 25 Января 2025, 22:14:34 »
Добрый день, коллеги.

Решил тут перевести игрушку Snake (да-да - ту самую "Змейку") для ПК.
https://geeks3d.com/geexlab/games/snake/

Опытным путём нашёл файлы локализации.
В игрушку "вшита" поддержка только двух файлов языков.

Перевести их несложно.

Вопрос в другом - игра не понимает русских символов. При том, что файл английского языка кодируется в ASCII.
Нашёл и заменил все шрифты на шрифты с поддержкой русского языка. Всё-равно не хочет нормально отображать.
Решил найти, где в игре находится путь к файлу языка, чтобы посмотреть, какую кодировку программа хочет увидеть.
Total Commander находит имя файла в бинарнике, но ни один HEX-редактор не хочет находить тоже самое в тех же самых файлах.
Подсобите, что можно сделать?

Оффлайн leserg73

  • Постоялец
  • ***
  • Сообщений: 106
    • Wylek.ru
Re: Игра Snake от geeks3d
« Ответ #1 : 17 Февраля 2025, 15:49:15 »
Приветствую!
Есть ли у вас какие-либо подвижки в решении проблемы?
С разработчиком связывались?

Основная проблема: использование языка Lua - она поддерживает строки только в кодировке ASCII.
Вторая проблема: использование библиотеки Dear ImGui (https://github.com/ocornut/imgui). По умолчанию она использует набор символов Latin1.

Проблему Lua можно решить, если использовать шрифт в котором вторая половина таблицы ASCII заменена на символы кириллицы.
Вторую проблему может исправить разработчик. Но и здесь есть нюансы. Кроме набора символов, для библиотеки Dear ImGui нужно указывать кодировку UTF-8. Для этого в код игрушки нужно добавить дополнительный код на языке Lua, который будет конвертировать строки ANSI в кодировку UTF-8.

Главная страница игрушки - меню - использует интерфейс Dear ImGui. Для неё строки должны быть в кодировке UTF-8 и указан набор символов - кириллица.
Страница с самой игрой - использует Lua. Строки должны быть в кодировке ANSI (CP-1251).

Как видите, языковой файл должен быть:
 - для интерфейса Dear ImGui - в кодировке UTF-8;
 - для интерфейса Lua - в кодировке ANSI.

Сделать это в одном файле - просто невозможно. Необходимо вносить изменения в исходный код игрушки.

Можно ли сделать это без участия разработчика? Можно. Но работы очень много.

Что нужно сделать?
1) Пропатчить библиотеку gxc_x64.dll на чтение символов кириллицы вместо символов Latin1.
2) Дешифровать и распаковать исходники программы из файла "_" (файл без расширения).
3) Написать (найти в инете) на языке Lua функцию преобразования строк ANSI в UTF-8.
4) В исходниках для строк интерфейса Dear ImGui добавить конвертер ANSI в UTF-8.
5) В исходниках заменить шрифты собственными, где вторая половина таблицы ASCII заменена на символы кириллицы (можно сделать самому при помощи редакторов шрифтов).
6) Запаковать и зашифровать исходники обратно в файл ресурса "_" (может и не получится, но тогда игру можно будет запускать через модуль GeeXLab).