LINUX.ORG.RU

Процесс портирования инди-игры на Android OS

 , , , ,


3

2

В далёком 2011 году был такой малоизвестный конкурс для гиков, который назывался RIOT Tag-Team Coding Competition. Целью мероприятия было увеличение количества Homebrew-игр на различных карманных игровых устройствах на базе ядра Linux: Caanoo, GP2X Wiz, Pandora и Dingoo A320. Отличительной особенностью этого конкурса являлось то, что игру необходимо было разрабатывать командой, а игры от «одиночек» не принимались. Именно поэтому двое российских программистов «старой школы»: Don Miguel и Quasist решили объединить свои усилия и начали работать над эксклюзивным игровым проектом для актуальных на тот момент времени консолей от фирмы GPH: GP2X Wiz и Caanoo.

На мероприятии авторы представили 3D-игру под названием Adamant Armor Affection Adventure, которая была выполнена в популярной тогда стилистике Minecraft'а, но имела кучу отличий от него. Всего за три месяца (sic!) ребятам удалось сделать очень многое: разработать достаточно производительный и отлаженный 3D-движок для embedded-устройств, создать десяток разнообразных карт и монстров, записать звуки и музыку, сделать несколько режимов игры, собрать всё это воедино и достойно выступить на упомянутом выше конкурсе, заняв почётное и призовое второе место.

Вдохновившись как самой игрой, так и успехом и самоотверженным трудом её авторов, я решил «воздать славу» нашей отечественной Linux-тусовке и, в свободное от работы время, попивая чаёк, начал портировать её на Android OS.

На скриншоте я представил окружение, в котором выполнил эту работу. На старом ноутбуке, который удобно везде с собой таскать и не страшно потерять, стоит Arch Linux c KDE Plasma 5. Я люблю дефолт, поэтому ничего особо не кастомизировал. Разве что в KWin добавил сокрытие декораций у максимизированного окна. На втором скриншоте Eclipse IDE и портируемая игрушка, которая запущена в эмуляторе устройства. Основная работа проводилась именно в Eclipse. К сожалению, в Android Studio поддержка NDK-проектов до сих пор оставляет желать лучшего. Кроме того, для внесения правок в код движка я использовал Qt Creator IDE: [Скриншот]. На переднем плане окно игры, которая собрана нативно под GNU/Linux. Если кому интересно, то в комментариях к этому посту я выложу все свои наработки.

>>> Просмотр (1366x1536, 1835 Kb)

★★★★★

Проверено: JB ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от koshmar

У владельцев Linux-девайсов и в те времена не было особого выбора. Именитые разработчики обходили стороной такие устройства и AAA-игры были только для Sony PSP. Так что ничего не оставалось, как делать под эти корейские и китайские «вещи в себе» Homebrew-игры, делать порты старых игр с компьютеров, разрабатывать эмуляторы и т. д.

Ну и если брать 2011 год, то Minecraft ещё не был тогда так заезжен, так как только вышел и не являлся символом школоты, как сейчас.

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)

Удивительно, как у тебя плазма настроена в соответствии с моими представлениями об оптимальности. Обычно все делают по-другому, но так реально удобнее.

curufinwe ★★★★★
()

Мне нравится, выглядит интересно. Жду релиза в сторе или апк.

А что в случае с NDK даёт Эклипс? Каких фич в студии не хватает? Насколько геморройно портировать? Будет текст по типу этого? Я бы почитал. И да, вести разработку в Qt Creatore целиком тоже не получается?

Weres ★★★
()
Ответ на: комментарий от koshmar

Почему игру хейтят за большинство ее аудитории?! В 2010-2012 годах что-то я не слышал такого количества хейта.

Майнкрафт — уникальный проект в плане популяризации, ибо бум случился без единого цента на рекламу. Но после продажи Некрософту стало понятно, что он сдох. Обновы сейчас выходят, но они никчемные и майки не собираются с ним что-то делать.

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от curufinwe

Спасибо. Мне нравится подход из BeOS/Haiku OS. Там в дефолтном WM можно сделать табы для окошек:

https://www.haiku-os.org/docs/userguide/en/images/gui-images/gui-s t.gif

Нечто «подобное» и у меня. В панели задач запущены развёрнутые на весь экран окна программ, между которыми я переключаюсь так, как будто это вкладки.

EXL ★★★★★
() автор топика
Ответ на: комментарий от Weres

Жду релиза в сторе или апк.

В Play Store пока выкладывать не планирую. Возможно, во F-Droid выложу в будущем. Файлы:

Android: [APK-пакет], [OBB-кеш] | [Зеркало APK], [Зеркало OBB]
GNU/Linux: [TAR.GZ-пакет] | [Зеркало TAR.GZ]
Исходники: https://github.com/EXL/AdamantArmorAffectionAdventure

Установка на Android:
Качаете APK и OBB файлы, устанавливаете APK, запускаете приложение, жмёте «Browse OBB», выбираете скачанный OBB, запускаете игру.
Установка на GNU/Linux:
Устанавливаете библиотеки SDL2, SDL2_mixer и OpenGL, распаковываете архив и запускаете файл «AAAA-Engine».

Насколько геморройно портировать? Будет текст по типу этого? Я бы почитал.

Да, все свои костыли, подпорки и велосипеды описал в огромной статье с картинками в своём бложике. Предупреждаю сразу, TL;DR: http://exlmoto.ru/adamant-armor-affection-adventure-droid/

Геймплей на реальном Android-устройстве: https://www.youtube.com/watch?v=8UfZP2pbrOg

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Это охрененно, респект

Да, все свои костыли, подпорки и велосипеды описал в огромной статье с картинками в своём бложике. Предупреждаю сразу, TL;DR: http://exlmoto.ru/adamant-armor-affection-adventure-droid/

Очень круто! Долго писал (статью)?

Поэтому пришлось взяться за более тяжёлую артиллерию и установить инструменты из набора clang: clang-format и clang-tidy.

М? А нафига tidy? Этож линтер.

EGL под десктопным линуксом и десктопным OpenGL нормально взлетел? Я, емнип, с ним какие-то волшебные глюки ловил (там где GLX «просто работал»)

Изначально использовалась 16-битная глубина цветности формата RGB565, но немного поэкспериментировав, я выбрал 24-битную глубину формата RGB888.

Ставлю на аппаратное ограничение или «памяти не завезли». // Зернистость на левой картинке ламповее, имхо

Stil ★★★★★
()
Ответ на: Это охрененно, респект от Stil

Долго писал (статью)?

За вечера три написал, потом день ещё проверял.

М? А нафига tidy? Этож линтер.

Для добавления скобок и приведения кода к стилю 1TBS. В clang-format, на момент его версии 3.9, такой фичи не было: http://stackoverflow.com/a/28437960/2467443. Как я понимаю, нет и сейчас.

В astyle такая фича есть, но она не работала должным образом. Это обсуждалось, кстати в чатике ЛОРа в Telegram: http://esxi.z-lab.me:666/~exl_lab/screens/astyle_lor_chat.png Я думаю, сказывается упрощённость парсера в astyle. В коде движка есть достаточно странные конструкции.

EGL под десктопным линуксом и десктопным OpenGL нормально взлетел? Я, емнип, с ним какие-то волшебные глюки ловил (там где GLX «просто работал»)

Да вроде норм, проблем особых не замечал. Разве что KWin при запуске некоторых OpenGL-приложений крешился. Но тут не в EGL дело было. А вот с OpenGL ES на десктопе в другом проекте были траблы, поскольку функция glDrawTexiOES() в Mesa3D либо была просто заглушкой, либо я что-то неправильно делал.

EXL ★★★★★
() автор топика

Retroguru

увеличение количества Homebrew-игр на различных карманных игровых устройствах на базе ядра Linux: Caanoo, GP2X Wiz, Pandora и Dingoo A320

Есть отличные ребята помешанные на этой теме - http://retroguru.com

У них все игрушки бесплатны и портированы на множество платформ, в том числе и на Android

atsym ★★★★★
()
Ответ на: комментарий от Weres

Прости, меня немного отвлекли, не успел ответить на всё.

А что в случае с NDK даёт Эклипс?

Там без проблем можно работать со стандартной сборочной системой из модифицированных Makefile'ов — Android.mk. в Android Studio => Gradle возможность работы с ndk-build тоже есть, но она помечена как «deprecated» и всех перегоняют на CMake. А с CMake там тоже куча проблем, например, я никак не мог выбрать версию NDK-тулкита, которым мне нужно было компилировать код. В общем, классическое: сделали два решения, но ни одно из них нормально не работает.

Вот ещё парочка претензий:
eclipse IDE - обновления (комментарий)
KDevelop 5.1.0 (комментарий)
junit куда положить? (комментарий)

И ещё библиотеки, которые я использовал: SDL2 и SDL2_mixer, заточены именно под ndk-build и про новомодную связку gradle+cmake ничего не знают. А переносить их сборку с одной сборочной системы на другую — ну его нафиг.

Ещё парсер у Eclipse CDT показался более адекватным и шустрым, чем у AS. Тем не менее, деваться некуда и следующий NDK-проект буду уже делать в Android Studio. Eclipse уж очень наводнён багами в ADT-плагине.

Насколько геморройно портировать?

Стоит помнить о фрагментации и куче различий в железе у Android-девайсов. Приведу пример. У меня, как видишь в видеоролике, девайс с физической клавиатурой, поэтому я затачивал кнопочное управление именно под него, думая что остальные аппараты с подобными элементами управления будут работать нормально. Так оно и оказалось, да вот только есть ещё такое, такое и даже такое. И там эти кнопки сделаны по-разному. Где-то X это KEYCODE_BUTTON_X, где-то KEYCODE_X и т. д.

А поскольку я изначально поленился и не реализовал возможность назначения аппаратных кнопок, то теперь страдаю на соседнем форуме и делаю страждущим APK-шки под их «Sony Xperia Play». Как видишь, это чудовищно неправильный подход. И если у меня появится свободное время, постараюсь добавить назначение кнопок.

И да, вести разработку в Qt Creatore целиком тоже не получается?

В Qt Creator поддержка Java на уровне блокнота с подсветкой. В Eclipse куча инструментов, которые экономят время, например, редактор XML-формочек, всякие специальные редакторы AndroidManifest.xml, strings.xml и прочего такого. Qt Creator я использовал только правок движка игры, который на C. Нравится шустрая работа этой IDE.

EXL ★★★★★
() автор топика

Попробовал на Lenovo s960.

На тачсрине нереально играть, даже тренировку не могу пройти.

И почему у меня в тренировке перс бегал как-бы замедленно?

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: Попробовал на Lenovo s960. от BceM_IIpuBeT

И почему у меня в тренировке перс бегал как-бы замедленно?

В лаунчере игры есть параметр Framskip, по-умолчанию там 2. Поставь 3 или 4 (подбери оптимальное значение). Это избавит игру от «замедленности».

На тачсрине нереально играть, даже тренировку не могу пройти.

Да, сенсорному управлению я уделял мало внимания и оно получилось кривоватым. Есть вариант «Simple», возможно тебе он будет больше удобен.

Друг недавно посоветовал посмотреть на такую библиотеку, как:

https://github.com/emileb/MobileTouchControls
https://github.com/emileb/TouchControls

Возможно прикручу её для адекватного сенсорного управления потом.

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Спасибо за развернутый ответ. Игра забавная но, как уже заметили выше, на таче играть очень тяжело. Симпл мод помогает, но всё равно как-то неудобно, многое себе закрываешь пальцами. Всё-таки, для такого геймплея наэкранные контроллы плохо подходят. То, что камерой можно управлять с помощью гироскопа прикольная идея, жаль у меня получается не очень хорошо. Возможно, проблема в руках и надо приноровиться.

Weres ★★★
()

Спасибо, интересно.

Поделюсь информацией. В эклипсе можно получить больше вертикального места, уменьшив размер заголовков окошек (ту гигантскую полосу над окнами исходых текстов). Вот что я записал себе в блокнотик на эту тему:

1. Чтобы убрать строку статуса, надо добавить в файл

/opt/eclipse/plugins/org.eclipse.ui.themes_1.1.1.v20151026-1355/css/e4_classic_winxp.css

строки:

#org-eclipse-ui-trim-status {
   visibility: hidden;
}
(Это для классического вида).

2. Уменьшить высоту табов можно, добавив в этот же файл строки

CTabFolder {
   tab-height: 22px;
}

3. Убрать крестик закрытия таба (так больше помещается табов по горизонтали):

CTabItem {
    swt-show-close: false !important;
}

После этих изменений Eclipse у меня выглядит вот так: http://storage1.static.itmages.ru/i/17/0429/h_1493454281_3616747_483e8313a4.png

Beewek ★★
()
Ответ на: Retroguru от atsym

Есть отличные ребята помешанные на этой теме - http://retroguru.com

Да, я с ними сотрудничал.

Палю ещё один интересный немецкий сайт (на английском языке), который является агрегатором Homebrew-игр для самых разных платформ: http://pdroms.de/

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Палю ещё один интересный немецкий сайт (на английском языке), который является агрегатором Homebrew-игр для самых разных платформ: http://pdroms.de/

Тогда уж надо было эту ссылку давать в тему по Android:

http://pdroms.de/news/android/

atsym ★★★★★
()
Последнее исправление: atsym (всего исправлений: 1)

Всё бы ничо, только андроид - не линукс нифига. Ждем ебилдов-дебов-рпмов, а апк закапывай сразу.

TooPar
()
Ответ на: комментарий от TooPar

В комментариях я выложил TAR.GZ «под все дистры». Если хочешь, можешь упаковать DEB или RPM.

EXL ★★★★★
() автор топика

Чертовски здОрово, снимаю шляпу, однако.

al_exquemelin ★★★
()
Ответ на: комментарий от Weres

Каких фич в студии не хватает?

Отпишусь сюда, возможно кому-нибудь будет интересно тоже. andreyu должно быть интересно.

Google в последнем обновлении Android SDK полностью депрекейтнул такую консольную утилиту, как android, попутно сломав сборку проектов на Unity3D, react-native, cocos2d-x и на куче других библиотек, которые юзали эту программу. На форумах всем советуют понижать версию Android SDK, разве это дело?

Самое забавное то, что их Command-Line tools, скачанные с официального сайта Android SDK, при попытке использовании этой утилиты просят установить Android Studio IDE. Непонятно, какой тогда смысл КОНСОЛЬНЫХ утилит по мнению Google?

http://esxi.z-lab.me:666/~exl_lab/screens/Android_command_deprecated.jpg

В баг-трекере Android SDK по поводу удаления рабочего инструмента КУЧА гневных комментариев от разработчиков. Но сотрудники Google предпочитают не отвечать, а тупо удаляют гневные посты с критикой своих действий:

http://esxi.z-lab.me:666/~exl_lab/screens/Android_SDK_bugtracker_flame.jpg

Суть утилиты android была в том, что она генерировала файл build.xml, который использовал ant для сборки проекта. От последнего полностью отказываются и переходят на Gradle.

Вот и я вчера попытался пару своих проектов перекинуть с Eclipse ADT, ant, ndk-build, GCC на Android Studio, Gradle, CMake, Clang/LLVM. Java-only проекты перекинулись на Gradle & AS без проблем. В процессе переноса NDK-проектов я столкнулся со множеством проблем.

1. В Android Studio, хоть он базе IDEA и CLion, нету поддержки CMake, даже на уровне подсветки файлов. Плагинов поддержки тоже нет.

http://esxi.z-lab.me:666/~exl_lab/screens/Android_Studio_CMake_unsupport.jpg

Непонятно почему они всех гонят на CMake, но сами ещё ничего для его поддержки не сделали.

2. С проектами из одной SO-библиотеки особых проблем нет. Модульные проекты из нескольких либ по типу CMakeLists.txt в одной директории, CMakeLists.txt в другой директории и т. д. — работают костыльно. Для них нужно создавать общую директорию, в неё складывать скомпилированные либы и потом с помощью Gradle тянуть их в APK. В этом примере от Google'вцев (которые сложили бинари so-шки в репу, лол): https://github.com/googlesamples/android-ndk/tree/master/hello-libs видно, насколько всё убого и хреново это сделано. Есть и другой способ: написать мегаогромный CMakeLists.txt на все модули разом. Тогда проблем с директориями не будет. Собственно я такой подпоркой и воспользовался.

3. Невозможно скомпилировать отдельные исходные файлы как thumb или arm, хотя в ndk-build такая возможность была и она используется в куче библиотек.

4. При компиляции библиотеки SDL2 на armeabi-архитектуру падает компилятор Clang/LLVM, пофиксили этот баг только сегодня: https://github.com/android-ndk/ndk/issues/259, когда он попадёт в релиз NDK — хрен его знает.

http://esxi.z-lab.me:666/~exl_lab/screens/Android_Clang_LLVM_Crash.jpg

5. В документации сказано, что файлы Application.mk читаются, если они находятся рядом с Android.mk. На деле это не так и документация либо устарела, либо врёт. Нужно делать вот такие трюки в Gradle, чтобы задать архитектуры, выбрать платформу и компилятор:

ndk {
    abiFilters "armeabi", "armeabi-v7a", "x86"
}

externalNativeBuild {
    cmake {
        arguments "-DANDROID_PLATFORM_LEVEL=9", "-DANDROID=ON"
        cFlags "-O3", "-ffast-math", "-fomit-frame-pointer"
        cppFlags "-O3", "-frtti", "-ffast-math", "-fomit-frame-pointer"
    }

    ndkBuild {
        // arguments "V=1" /* Verbose ndk-build */
        arguments "NDK_TOOLCHAIN_VERSION=4.9", "APP_PLATFORM=android-9"
        arguments "-j" + Runtime.runtime.availableProcessors()
    }
}

В общем, я обратно на ndk-build и GCC ухожу. Там всё как часы работало. То есть у меня будет проект Gradle, с которым будет работать Android Studio. Gradle умеет вызывать как CMake, так и ndk-build. Связка CMake + Clang/LLVM до сих пор очень сыра.

Качество работы Android Studio с кодом на C/C++ ещё не успел оценить, но по тому, что я уже наблюдаю, будет ожидаемо хуже, чем в Eclipse ADT + CDT.

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Google в последнем обновлении Android SDK полностью депрекейтнул такую консольную утилиту, как android

Теперь есть консольный sdkmanager.

andreyu ★★★★★
()
Ответ на: комментарий от EXL

От последнего полностью отказываются и переходят на Gradle.

И правильно делают. Еще бы gradle мог не только с jar работать, но и с aar нативно, без костылей.

Непонятно почему они всех гонят на CMake, но сами ещё ничего для его поддержки не сделали.

Гугель медленно, но уверенно катится в сраное говно :(

При компиляции библиотеки SDL2 на armeabi-архитектуру падает компилятор Clang/LLVM

Прикольно. Хорошо что я не использую sdl.

В общем, я обратно на ndk-build и GCC ухожу.

У меня сейчас gradle + ndk-build, поскольку поддержка ndk в gradle все еще в стадии альфа_хрен_что_работает.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

gradle налету генерирует Application.mk. Зачем они это сделали — я не знаю.

А вообще, котлеты отдельно, мухи отдельно. Так и в билдсистемах невзаимодействующих явно между собой частей должно быть.

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

gradle налету генерирует Application.mk. Зачем они это сделали — я не знаю.

У меня не генерирует, а использует уже сгереренный. А вот androidmanifest.xml он действительно патчит.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Теперь есть консольный sdkmanager.

Да это всё понятно, но утилита android генерировала файл build.xml, необходимый для сборки некоторым приложениям, использующим ant.

То есть часть функционала из неё выпилили и сделали обёртку.

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Скорее всего в отдел разработки SDK и NDK приняли совершенно безграмотных людей. И все разом неосилили: gmake, Ant, gcc и прочее и даже линковку собственного кода с libm_hard.a.

И поэтому удобный шорткат для включения полноценного hard-float(armeabi-v7a-hard) был попросту убит.

a1batross ★★★★★
()
Ответ на: комментарий от EXL

Да это всё понятно, но утилита android генерировала файл build.xml, необходимый для сборки некоторым приложениям, использующим ant.

Давно отказался, пока с проблемами не сталкивался.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Признаюсь, я попросту не осилил заставить этот комбайн работать уже с существующими файлами. Однако, у меня есть старые версии и я с ними счастлив. Где есть GCC, где есть удобный ndk-build, где есть Ant. Только вот начали они паковать свои библиотеки в какой-то странный aar, который Ant-ом судя по всему не воспринимается или я может это просто не нашёл.

a1batross ★★★★★
()
Ответ на: комментарий от EXL

То есть часть функционала из неё выпилили и сделали обёртку.

Да, так я и узнал, что есть sdkmanager. Тоже был удивлен тогда.

В sdkmanager меня напрягает его молчаливость. Запустил установку и апгрейд и гадай, что он в это время делает.

andreyu ★★★★★
()
Ответ на: комментарий от a1batross

Только вот начали они паковать свои библиотеки в какой-то странный aar, который Ant-ом судя по всему не воспринимается или я может это просто не нашёл.

Это тот же zip. В него и gradle нативно не очень умеет.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

У меня сейчас gradle + ndk-build, поскольку поддержка ndk в gradle все еще в стадии альфа_хрен_что_работает.

Да, тоже самое.

У меня не генерирует, а использует уже сгереренный.

А ты уверен в этом? Речь не про Android.mk, а про Application.mk, попробуй в последний добавить что-то вроде:

APP_ABI := mips mips64
APP_PLATFORM=android-9

Будут ли изменения? У меня Gradle всё это игнорирует и собирает на все архитектуры и под android-23.

Соль ещё в том, что раньше этот файл читался.

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

А ты уверен в этом?

Уверен.

Речь не про Android.mk, а про Application.mk, попробуй в последний добавить что-то вроде:

Вот мой (для релиза раскомменчиваю):

APP_ABI := armeabi-v7a
# APP_ABI := x86 x86_64 armeabi-v7a armeabi
APP_STL := gnustl_static
APP_PLATFORM := android-10
APP_CPPFLAGS += -std=c++11
NDK_TOOLCHAIN_VERSION := 4.9

andreyu ★★★★★
()
Ответ на: комментарий от EXL

У меня Gradle всё это игнорирует и собирает на все архитектуры и под android-23.

Платформу он берет в build.gradle из переменной compileSdkVersion.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Ничего тогда не понимаю, у меня всё это игнорируется.

Gradle у тебя новый или старый? Может android.useDeprecatedNdk=true активирован?

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Да, нужно посмотреть, можно ли полностью отказаться от Application.mk в пользу build.gradle, что бы можно было для разных целей разные параметры задавать.

andreyu ★★★★★
()
Ответ на: комментарий от EXL

Конкретно в этом случае (тот, что выше скопипастил) используется com.android.tools.build:gradle:1.5.0 и distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-bin.zip. В другом проекте сегодня поменял на версию 3.x и проект собрался без проблем.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

У меня:

classpath 'com.android.tools.build:gradle:2.3.1'
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

В другом проекте сегодня поменял на версию 3.x и проект собрался без проблем.

Он может собраться без проблем. Я увидел вообще, что используется Clang/LLVM и APP_PLATFORM := android-23 только на четвёртом NDK-проекте, который я переносил. Когда внезапно Clang/LLVM упал.

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Он может собраться без проблем.

Он не только собирается, но даже работает. Завтра планируется даже сделать релиз (да мы такие, релиз перед праздниками). И в том проекте используется clang.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.