Angry Birds. В поисках встроенного редактора уровней


    Часть 0. С которой всё началось


    Захотелось мне однажды покопаться в скриптах Angry Birds с одному мне известными целями. Я, конечно, ожидал наткнуться внутри на какие-нибудь интересности, но даже и подумать не мог, что среди них будет вполне рабочий редактор уровней. Сначала я объясню, как я получил такой результат, а в конце статьи приведу описание и скриншоты редактора, опишу простой путь включения редактора.


    Часть 1. Процесс


    Приготовления

    Для последующей работы нам понадобятся следующие инструменты:
    • LUA Compiler
    • OpenSSL
    • HEX-редактор

    Работать будем с Angry Birds Rio или Angry Birds Space, т.к. в них присутствуют почти все необходимые для редактора файлы.

    Если всё это в наличии, тогда в путь. Если вам будет скучно читать первую часть статьи, пролистайте до второй, она вам понравится больше.

    Своей целью мы выберем файл data\scripts\options.lua, т.к. его содержимое представляет из себя просто список переменных, которые мы сможем беспрепятственно поменять. Заглянем в файлик и ничего не поймём. Вероятно, файл зашифрован.

    Расшифровать

    С определённой версии игры все файлы шифруются 256-битным алгоритмом AES CBC с пустым initial vector и вшитыми в код ключами. Если кто хочет повозиться с дебагером, подробное описание процесса есть по этой ссылке.

    Для расшифрования я использовал OpenSSL.

    Примеры batch-файлов для расшифрования
    Angry Birds Rio:
    openssl enc -K 55534361505170413454534E56784D49317639534B39554330795A75416E6232 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua

    Angry Birds Space:
    openssl enc -K 526D67645A304A656E4C466757776B5976434C326C5361684662456846656334 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua

    Angry Birds Seasons:
    openssl enc -K 7A65506865737435666151755832533241707265403472654368417445765574 -iv 00 -d -aes-256-cbc -in %1 -out %1dec.lua


    Для зашифрования, соответственно, убираем ключик -d.

    После этой процедуры у нас получится вполне читаемый lua-скрипт, жаль, что скомпилированный. Заглянем в заголовок, видим LuaQ, следовательно, это Lua 5.1.

    Декомпилировать

    Казалось бы, что проще. Скачать один из декомпиляторов и натравить его на получившийся файл. Ан-нет. Попробуем получить листинг скомпилированного options.lua с помощью luac -l.

    luac: options.luadec.lua: bad header in precompiled chunk

    Как видим, заголовок повреждён. Возможно, требуется другая версия компилятора, возможно ещё что-то, чего я не учёл, т.к. под lua почти не кодил. Факт остаётся фактом. Сравниваем заголовок нашего файла с заголовком любого другого скомпилированного lua:



    Не вдаваясь в детали, что значит эта 08, меняем её на 04 и пробуем получить листинг. Вуаля:

    main <?:0,0> (31 instructions, 124 bytes at 00346070)
    0+ params, 2 slots, 0 upvalues, 0 locals, 22 constants, 0 functions
            1       [-]     GETGLOBAL       0 -1    ; gamelua
            2       [-]     SETTABLE        0 -2 -3 ; "releaseBuild" true
            3       [-]     GETGLOBAL       0 -1    ; gamelua
            4       [-]     SETTABLE        0 -4 -5 ; "showEditor" false
    ...
    


    Привожу тот же самый файл в более читаемом виде:

    gamelua.releaseBuild = true
    gamelua.showEditor = false
    gamelua.cheatsEnabled = false
    gamelua.useDynamicAssets = false
    gamelua.isPremium = false
    gamelua.isKorea = false
    gamelua.applyChinaRestictions = false
    gamelua.gameVersionNumber = "1.4.4"
    gamelua.customerString = "rovio"
    gamelua.svnRevisionNumber = "93049"
    gamelua.isSeasonsAvailable = true
    gamelua.g_registrationEnabled = true
    gamelua.g_updateCheckEnabled = true
    gamelua.loadMightyEagle = true
    filename = "options.lua"
    

    Здесь мы уже видим несколько интересных переменных, а именно: releaseBuild, showEditor и cheatsEnabled. Меняем их и собираем всё обратно.

    Собрать как было

    Первоначально я хотел просто скомпилировать свой собственный скрипт с таким содержанием, подправить заголовок и зашифровать. Но как-то это не заладилось, игра ни в какую не хотела принимать мой файлик за options.lua. Решение было найдено простое — исправить оригинальный файлик hex-редактором. Не ахти какой метод, но для наших целей сгодится. Итак, исправляем, проверяем листинг, возвращаем заголовок, шифруем, закидываем назад в игру.

    Часть 2. Результат


    Заходим в игру и сразу видим некоторые изменения в главном меню:


    Кликаем по «Editor» и видим список уровней, которые можно изменять. Стрелки снизу пролистывают пакеты уровней, так что вы вполне можете создавать свои уровни в одном из незанятых пакетов:


    Теперь кликнем на один из уровней и попадём непосредственно в редактор:




    Негусто, надо сказать. Из интерфейса лишь несколько надписей и обозначений. Основная работа производится с помощью горячих клавиш. Потыкав всевозможные клавиши с полчасика, я составил их краткое описание:
    Работа с объектами
    12 разместить каменные конструкции
    QW разместить деревянные конструкции
    AS разместить стеклянные конструкции
    NM разместить песчаные блоки
    ZX,JK разместить декорации
    34 разместить птичек
    TY разместить врагов и запертых птиц (для игровой механики одно и то же)
    UI разместить активные объекты
    OP разместить награды
    delete удалить объект
    shift+r повернуть объект
    Камера
    ctrl+shift+c центрировать камеру
    ctrl+shift+b показать весь уровень
    Другое
    tab включить/отключить физику
    shift+t сменить фон
    shift+s заморозка (???)
    ctrl+s сохранить уровень
    end quick end (???)
    Скорее всего это не все горячие клавиши, можете поискать другие.

    Подводные камни

    Редактор работает далеко не идеально. Часть ресурсов редактора отсутствует, поэтому при нажатии определённых клавиш работа игры может внезапно завершиться. Как минимум в версии Rio редактор сохраняет уровни в нескомпилированном виде, поэтому, чтобы увидеть уровень в игре, необходимо его предварительно скомпилировать нужной версией компилятора и зашифровать. При должном усердии можно попробовать подправить игру так, чтобы она использовала уровни в нескомпилированном виде, но это выходит далеко за рамки данной статьи. Также я не нашёл способа передвинуть рогатку внутри редактора. Вероятно, сделать это можно только прямым редактированием файла уровня.

    Angry Birds Space


    В этой версии редактор значительно доработан, теперь работает меню свойств объектов, появились сенсоры, работать с редактором стало удобнее, появился специальный редактор объектов. Тем не менее, редакторы регулярно подглючивают. Я не проверял, починили ли сохранение уровней в этой версии, оставляю это читателю.

    Несколько скриншотов версии Space:




    Бархатный путь


    Я не предлагаю читателю самостоятельно повторять мою работу. Для включения редактора достаточно скачать этот архив и заменить файл options.lua соответствующим файлом из архива. Версии игры, на которых проверены эти файлы: Angry Birds Space 1.2.0 и Angry Birds Rio 1.4.4

    ВНИМАНИЕ
    Перед проведением любых операций настоятельно рекомендуется сохранить резервные копии файлов игры, включая сохранения. Во-первых вы можете испортить оригинальные уровни игры, а во-вторых данная замена также включает читы. Для использования читов нажимайте цифровые клавиши. Среди читов есть, например, такие, которые сразу проходят всю игру или дают все награды. Если вы не хотите потерять всё своё прохождение, делайте резервные копии.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 18
    • 0
      Нет слов…
      • 0
        Круто!
        Сначала не совсем понял для какой платформы, потому уже по скринам и курсуро стало ясно, что для PC и наверное для Windows.
        Интересно, можно ли как-то в Android версии такое сделать, или добавить туда свой левел пак?
        • +1
          Для андроида ключи шифрования аналогичные, так что особых проблем не вижу. Единственное, я не уверен, что с версией для андроида поставляется сам редактор, поэтому, вероятно, рисовать-таки придётся на PC.
        • 0
          Интересно зачем оставлен редактор? В каком либо из апдейтов могут разрешить пользователям делать свои уровни?
          Было бы круто, если бы дали возможность делать свои уровни и делиться ими с другими игроками аля X-moto
          • 0
            Более того, они активно допиливают этот редактор, насколько я вижу. Я видел вот такую новость: www.3dnews.ru/software-news/632996/. Вероятно, они действительно хотят открыть редактор карт в будущем.
            • 0
              Возможно, его движок оставлен для новой части, где можно будет играть за зеленых свиней (ссылка на новость). Один из вариантов игры — имея ограниченное число блоков, выстроить вокруг свиней играждения так, чтобы птицы не смогли их пробить. А для подобного нужен какой-то облегченный вариант редактора…
          • 0
            А Вы не пробовали gamelua.isPremium сменить на true?
            Интересно, заработает премиум или нет.
            • 0
              Пробовал. Только не понял, что это даёт.
              • 0
                Может баннеры отключает?
                • 0
                  На PC сложно проверить. Это надо, чтобы кто-нибудь с андроида попробовал. Возможно, файл даже подойдёт к андроидовой версии.
            • +8
              ctrl+shift+c центрировать камеру ctrl+shift+b показать весь уровень

              Ума не приложу, как можно было подобрать такие сочетания клавиш? Вы что подряд перебирали всю клавиатуру на все возможные сочетания с alt, ctrl, shift и их сочетаниями?
              • +61
                Да, именно так я и делал =)
              • 0
                Интерестно какие сhinaRestictions есть в игре.
                • +1
                  Вот файлик со включенными chinaRestrictions и isPremium для Rio: rghost.ru/39835944. Найдёте чего интересного — скажите.
                  • +1
                    В Eve online, например, в Китае игра следит за тем, чтобы игрок не играл слишком много времени подряд. Возможно, там что-то аналогичное.
                    • 0
                      Интересно по чьей инициативе эти restrictions — постановление китайского правительства какое-нибудь или сами игродела о китайцах заботятся?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое