GameMaker: Исправление «кракозябр» при импорте старых проектов

Итак, вы открыли старый (Game Maker 8 или ниже) проект в Game Maker 8.1 / GameMaker: Studio / GameMaker Studio 2 / ..., и заметили, что вся ваша кириллица превратилась в �.

Эта запись о том, как сконвертировать проект, не убив весь текст.

В чем вообще проблема

Версии GameMaker до 8.0 включительно сохраняли текст внутри файлов в одно-байтовой системной кодировке.

Обывателю эффекты данного решения были преимущественно незаметны, но это могло изрядно насолить, если вы хотели добавить локализацию в игру (скажем, какой-нибудь Ñ в кириллической кодировке Windows-1251 просто нет), или пытались открыть проект, что писался человеком с другой системной кодировкой.

Поэтому с времен Game Maker 8.1 весь текст хранится в кодировке UTF-8, с помощью которой можно представить немыслимое множество символов от латиницы и кириллицы до иероглифов, арабских лигатур, и смайликов.

Но есть подвох: поскольку теперь и сам Game Maker работает в UTF-8 режиме, программа не знает, как интерпретировать несуществующие в UTF-8 символы из однобайтовой кодировки. Ну и, в общем-то, не интерпретирует.

К счастью, GameMaker — не единственный способ открыть проект на GameMaker.

Как решать

Для данного фокуса нам понадобится несколько малоизвестных инструментов и немного смекалки.

  1. Устанавливаем Java, если она у вас ещё не установлена.
    Проверить можно, открыв Командную Строку / PowerShell (в текущих версиях Windows можно открыть меню Пуск и начать вводить название), и написав java -version. Если показывает "java version 1.6.x" или выше, всё хорошо.
  2. Скачиваем gmk-splitter и распаковываем куда-нибудь.
    gmk-splitter позволяет "распаковывать" файлы проектов на старых версиях GameMaker в более простой формат в виде папки с ресурсами, и запаковывать их обратно.
    В своё время это преимущественно использовалось с системами управления версиями.
  3. Копируем ваш .gmk/.gm6/.gmd файл в ту же папку, чтобы он был рядом с gmksplit.jar.
  4. Открываем Командную Строку или PowerShell из меню по нажатию правой кнопки мыши на пустом месте в папке с зажатым Shift.
  5. Распаковываем файл проекта в под-папку:

    java -jar gmksplit.jar вашфайл.gmk orig
    

    Если никаких ошибок не возникло, должна появится папка orig с грудой папок (Backgrounds, Fonts) и .xml файликов внутри.
    Если заглянуть в .xml или .gml файлы в этой папке (в Scripts или Objects), можно заметить, что кириллица всё ещё нечитаема, но теперь превратилась в разные символы.
    Окно можно не закрывать, оно ещё понадобится.

  6. Добавляем все файлы из под-папки в новый ZIP-архив.
  7. Открываем мою программу для преобразований символов.
    Нажимаем на "Load a rule preset?", выбираем "Fix Windows-1251 saved as UTF-8 codepoints".
    Нажимаем на кнопку загрузки файлов в секции Convert File(s).
    Выбираем только что созданный ZIP-архив.
    Нажимаем на "Click here to save!", сохраняем новый ZIP-архив в папку с gmk-splitter (или копируем его туда, если ваш браузер любезно сохранил его в папку загрузок, не спросив вас).
  8. Распаковываем скачанный архив в под-папку converted, чтобы Constants.xml был в converted\Constants.xml (без дополнительной вложенности).
    Если заглянуть в .xml или .gml файлы из папки converted, в них уже "настоящая" кириллица.
  9. Возвращаемся в окно Командной Строки / PowerShell и запаковываем папку обратно в файл-проект:

    java -jar gmksplit.jar converted вашфайл.gm81
    

    (важно: .gm81).

Теперь мы можем открыть этот файл в Game Maker 8.1, или импортировать его в GameMaker: Studio, или сделать иные нужные манипуляции для открытия в нужной версии.

Как-то так.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.