Як самому створити гру

kak samomu sozdat igru25 Як самому створити гру

З кожним днем ігри стають все складніше і наворочені. Щорічно в Steam вони публікуються тисячами. Вони розподіляються по різних платформ та категорій. Аудиторія гравців стрімко зростає. Число розробників так само стрімко збільшується. Бути інді, а точніше соло-розробником ігор стало важко. Але романтика незалежності змушує знову і знову починати розробку інді-ігри. У статті ми поговоримо про те, як вижити на цьому шляху і як розробляти класні ігри в жорстких умовах конкуренції.

Ще по темі: Безкоштовні програми для розробки ігор

Хоча з’являються нові технології для створення ігор, з кожним роком їх розробка стає все складніше і складніше. Є трійка топових движків: Unity, Unreal Engine 4, CryEngine 5. Про них постійно говорять, і їх використовують для розробки різних проектів різні розробники. Тим не менш складність цих інструментів перевалила мислимий кордон. Вони величезні, їх функціональність досягла вселенських масштабів. Всі ці можливості можуть бути використані великими студіями, але для соло-розробника це надмірна стафф, він йому не потрібен, оскільки для його реалізації потрібні додаткові ресурси, яких у інді і так немає (для розробки гри мрії він заклав свій будинок). І якщо це не AAA-гра, то реалізація цих функцій марна.

Приступаючи до створення інді-ігри, треба розрахувати бюджет приблизно на рік вперед і накопичити достатню суму для розробки гри своєї мрії. Починати краще, ще працюючи на звичайній офісній роботі. Вибравши тему для гри, написати диздок. Необхідно навіть створювати прототипи, показуючи GIF-анімації інтернет-спільноті. І тільки коли черговий прототип отримає суспільне схвалення, можна починати повноцінну розробку.

Зміст

  • Альтернативні движки
  • Де взяти арт та інший стафф?
  • Розробка гри з допомогою AGK
  • Visual Editor
  • Класичні танки
  • Основи AGK
  • Приступаємо до кодування
  • Підготовка білду та поширення
  • Тестування на мобільних девайсах
  • Експорт білду
  • Альтернативні стори
  • Висновок
  • Альтернативні движки

    Я розумію, що в даний час існують інді-ігри всіх жанрів на будь-який смак (і це насправді добре), але ми під інді-іграми в даному контексті маємо на увазі маленькі, двовимірні, орієнтовані на мобільні пристрої, створені соло-розробником творіння (яких переважна більшість), тому використовувати Unity, UE4 для створення прототипів буде невиправдано складно. Існує широкий вибір альтернативних движків, вони простіше у використанні та дозволяють досягати вражаючих результатів за менший термін, мінус спецефекти, які інді б все одно не став поміщати в свою гру. Деколи для створення повноцінної гри під всі платформи ці движки не вимагають написання коду. Особливо мене просунуло на тему альтернативних движків після участі в московській конференції розробників відеоігор White Nights 2017, що пройшла в жовтні. Я підходив до інді-розробників, демонструє свої проекти, і розпитував про використовуваний інструментарій. У багатьох випадках вони називали зовсім не Unity, а Construct 2 або GameMaker Studio.

    Обидва продукти являють собою конструктори двовимірних ігор, які не потребують вміння програмувати (!). У Construct 2 створюєш гру, визначаючи ігрові події та реакцію на них. Підсумкові гри портируются під всі популярні платформи. Прога йде з докладною документацією, великою кількістю прикладів і теймплейтов, так що освоїти її нескладно. Купувати раджу в Steam, там її вартість за персональну версію становить 6399 рублів.

    kak samomu sozdat igru26 Як самому створити груЯк самому створити гру. Construct 2 з відкритим проектом

    GameMaker Studio являє собою популярний конструктор ігор з двома можливостями побудови гри (подібно UE4): перша — методом drag and drop, друга — писати код на власному мовою системи. Залежно від цільової платформи гри, створені з допомогою GameMaker Studio, візуалізуються за допомогою OpenGL або DirectX з використанням відповідних шейдерних технологій. Для обробки фізики є підтримка движка Box2D. Підтримується широкий ряд пристроїв введення. Десктопна версія Steam варто 1599 рублів, експортери для інших платформ треба докуповувати: так, експортер для web варто 2579 рублів, для UWP — 6396 і стільки ж для мобільних систем.

    kak samomu sozdat igru27 Як самому створити груЯк створити гру самому. GameMaker Studio

    Третій заслуговує уваги альтернативний движок — AppGameKit. На відміну від двох попередніх, розробляючи з його допомогою гри, треба писати код на скриптовом мовою. Багато в чому завдяки цьому він мене зацікавив більше за інших. Вартість цього движка в Steam становить 2059 рублів, включаючи експортери під всі підтримувані платформи. Гарне вкладення. За більш детальним описом архітектурної складової движка відсилаю тебе до згаданої статті.

    Раніше я гордовито дивився на ці тулзы, але тепер бачу в них силу, яка може зрівнятися з топовими движками. Настав час звернути на них увагу і взяти в комплект игродела.

    Де взяти арт та інший стафф?

    У разі якщо ти програміст і поганенько малюєш/моделишь самостійно, весь необхідний для прототипу стафф можна купити в сторах топових та альтернативних движків (наприклад). Арт, звуки, шейдери та іншої стафф також можна знайти в Steam. Вони коштують не так дорого. Зображень в одному комплекті може бути кілька тисяч, але всі вони для різних ігор, тому на прототип тобі їх, може бути, і вистачить, а от для повноцінного релізу — навряд чи. І тоді, можливо, ти знайдеш вільних художників, на яких справить враження твоя гра. І це правильно, адже, працюючи з купівельними артом, ти змушений підганяти свій сюжет під наявний арт, а не навпаки.

    Розробка гри з допомогою AGK

    Мій вибір припав на AGK з трьох причин:

    • розробка ігор ґрунтується на написанні коду двох рівнів (Tier 1, 2); мені, як програмісту, легше освоїтися в новому API, ніж в новому інтерфейсі редактора;
    • ціна демократична;
    • купив я цей движок ще два роки тому, всі оновлення приходять відразу ж, як з’являються.

    Додаткові фішки: AGK підтримує безліч типів контролерів, так, крім геймпадів, він підтримує контролер безконтактного управління Leap Motion. Плюс в AGK включена підтримка VR.

    Visual Editor

    Після запуску AGK ми бачимо тільки редактор коду без будь-яких візуальних засобів, якими багаті інші движки. Однак у серпні компанія The Games Creator випустила додаток, свого роду аддон для AGK — тулзу Visual Editor. Він купується окремо варто 899 рублів). Цей редактор дозволяє візуально настроювати наповнення сцени і рівня твоєї гри, імпортувати зображення та 3D-моделі, поміщати їх у сцену як ігрові об’єкти, налаштовувати положення, розмір, кут повороту, колір та інші властивості з допомогою інспектора об’єктів. Як виглядають сцени на пристроях з екраном різного розширення, можна побачити, прямо не виходячи з редактора. Зрештою, сцену можна зберегти і підключити до AGK. Той спокійно виконає код, ніби цей файл створений тут же. Visual Editor дає можливість будувати ігри методом drag & drop (не повністю, але частково), подібно іншим конструкторам, розглянутим вище. Але, зізнатися, це не наш вибір.

    Гра може складатися з декількох сцен (наприклад, головне меню, ігрове поле, екран перемоги, екран поразки), і всі вони можуть налаштовуватися в редакторі. Можуть бути використані текстові поля, точки прив’язки, створення анімації та інше.

    kak samomu sozdat igru28 Як самому створити груЯк створити гру. Visual Editor

    Класичні танки

    Движок AGK однаково добре підходить для створення 2D – і 3D-ігор. Ми зупинимося на 2D зі зрозумілих причин: популярність на мобільних — цільових платформах — одна з них.

    Ми випробуємо AGK на танках, спробуємо відтворити «класичні танки» з ігрової консолі NES від 1985 року з новою графікою. Хто не в темі, та гра називається Battle City, в чому саме вона стала прототипом для сучасних ігор про танкові війни (World of Tanks, «Танки Онлайн»). Тому наш світ також буде двовимірним з оглядом зверху.

    Основи AGK

    Розроблення ми будемо вести на ярусі №1 (Tier 1) — скриптовом мовою, схожому на модернізований для потреб игродела BASIC. Перше, що необхідно пам’ятати про BASIC, — це те, що в кінці інструкції не треба ставити крапку з комою. Розслабся і отримуй задоволення: ніяких покажчиків і низькорівневих приблуд, класів теж немає. Їх ролі виконують структури. Можна створити екземпляр структури, який закріплюється за числовою константою. В майбутньому для звернення до цього примірника використовується закріплене за ним число. При виконанні функції, щоб вказати, над яким об’єктом проводиться операція, треба передати відповідне число в першому параметрі. По суті, в AGK є тільки три типи даних: integer, real, string. За великим рахунком, це все, що необхідно знати перед початком кодування ігор на AGK.

    Приступаємо до кодування

    Ми не будемо використовувати Visual Editor, напишемо весь код самостійно (див. приклад в матеріалах до статті). Я не буду приводити у статті лістинги гри, оскільки ти завжди можеш їх знайти в матеріалах. Я лише напишу короткі інструкції по виконуваного коду.
    Створимо в AGK новий проект і почнемо кодувати. Спочатку ініціалізуємо вікно виводу: задамо заголовок вікна, встановимо його розмір, вкажемо здатність змінювати розмір. Потім встановимо дозвіл, можливу орієнтацію пристрою, частоту перемальовування, задамо використання всієї області екрану, останньою дією ініціалізації включимо використання просунутих векторних шрифтів замість растрових. Цей код входить в шаблон проекту. Нижче знаходиться основний цикл гри: do … loop. У ньому виводиться FPS і відбувається перемальовування екрану.

    Після ініціалізації гри визначається тип даних для танка, неважливо, ворожий він наш, всі поля однакові. Оголошення типу починається з ключового слова Type, за ним слід ідентифікатор типу, в нашому випадку TTank. В першу чергу кожному танку потрібні координати. У AGK оголошення відбувається таким чином: x as float. Зауваж, на кінці крапка з комою не ставиться. Другий спосіб оголошення змінних — це просто описати їх. Наприклад, змінна типу Integer можна оголосити так:

    1 x = 4, real: x# = 4.4, string: x$ = “four”

    Тобто додається символ після ідентифікатора. У типу string для завдання рядка рівноцінно можна використовувати одинарні або подвійні лапки, головне, щоб закриває була парною для відкриває. Далі задаємо ідентифікатори для спрайту, колізій, для прапора визначення, чиїй стороні належить танк: гравця або ІІ. Швидкість, частота стрільби, кількість життів, прапор поверженности, таймер, що вимірює кількість секунд, коли танк став переможеним, прапор, встановлюється, коли танк досяг перешкоди (потрібен для ІІ), в поворотах танка беруть участь дві змінні: прапор, встановлений на початку повороту, і номер боку повороту (потрібні для ІІ). Закінчується визначення типу ключовим словом EndType.

    Потім оголосимо тип об’єкта снаряда. Йому потрібні: координати місця розташування, координати місця призначення, ідентифікатор для спрайту, прапор активності, прапор приналежності і швидкість.

    Створимо два масиви: один — для танків, другий — для снарядів. Приблизно так: Dim tanks[6] as player. Аналогічно і з другим.

    Тепер нам треба завантажити текстури. Це робиться за допомогою функції LoadImage, першим параметром передається номер, за яким буде закріплено зображення, а другим — шлях і ім’я файлу. Всі ігрові ресурси завантажуються з підпапки media папки з грою. Папка media створюється за першою вдалою компіляції. Таким же чином завантажуємо зображення снаряда. У циклі створимо всі снаряди. Опис циклу починається з For makebullets = 1 to 20, а закінчується інкрементом циклічної змінної: Next makebullets. У тілі циклу відбувається створення спрайту (CreateSprite з параметрами: ідентифікатор спрайту, номер натягиваемой на спрайт текстури), установка його позиції (SetSpritePosition), установка глибини шару (SetSpriteDepth), зсув початку координат для спрайту (SetSpriteOffset).

    Після цього ми скидаємо значення всіх параметрів танків до значень за замовчуванням, це робиться нашою функцією resetplayers. З неї викликається функція CreateTank. В якості параметрів вона отримує: номер танка (індекс у масиві танків), координати, коефіцієнти кольорів, кут повороту, приналежність до гравця або ІІ. CreateTank займається створенням танка, визначає положення, швидкість переміщення, частоту стрільби, кут повороту. Також вона створює для танка спрайт, налаштовує їх кольору, номери шарів. Далі завантажимо текстуру фону і створимо для нього спрайт, плюс нам знадобиться текстура перешкоди. Задамо тип для перешкоди — bricks. Він буде містити тільки два поля: номер спрайту і активність. Положення задається при створенні в розташованому нижче циклі.

    Для гри нам треба завантажити два звуку: постріл і попадання. Це виконується функцією LoadSound, вона приймає цифровий ідентифікатор і ім’я файлу. На десктопі AGK може працювати з трьома форматами аудіо: WAV, MP3, Ogg, а на мобільних з двома, крім MP3, із-за того, що цей формат не вільний. Створюємо кілька глобальних змінних: поточний час, номер поточного рівня. Викликаємо функцію для створення рівня. Весь код знаходиться в глобальному просторі і буде виконаний при запуску гри.

    Далі ми занурюємося у центральний цикл нашої гри, тіло якого виконується 30 разів на секунду (залежить від частоти зміни кадрів, на PC може бути 60). Тут насамперед нам треба отримати кількість мілісекунд (GetMilliseconds), що минули з моменту запуску гри. Потім запускаємо цикл по всіх ігрових об’єктів — танкам. Якщо танк не обертається, він не підбитий і їм можна управляти (для цього викликаємо функцію controlplayer), з іншого боку, збільшуємо його кут повороту. Повертаємо певний танк в напрямку вектора його руху. Якщо танк обертається більше двох секунд і у нього закінчилися життя, скидаємо його стан (resetplayers). Далі оновлюються позиції всіх снарядів у функції movefire і йде перевірка на підрив будь-якого танка — у tankhit. Вона повертає номер підбитого танка, який починає обертатися навколо своєї осі, до того ж відтворюється звук попадання снаряда. Останній викликається функція оновлення екрану.

    В іншому коді програми описані використовувані функції. Вони являють найцікавішу частину — «живі» алгоритми поведінки гри.

    Функція controlplayer, в яку передається номер певного танка, реагує на введення юзера, виробляючи відповідні дії. Кожній клавіші відповідає свій номер в системі ASCII, тому спочатку нам треба оголосити відповідають клавішам константи:

    1234 #constant KEY_LEFT 37#constant KEY_UP 38#constant KEY_RIGHT 39#constant KEY_SPACE 32

    Коли гравець натискає клавішу «Вгору», змінна Forward приймає значення 1, коли «Вправо» — мінлива turn приймає 1, «Вліво» — вона ж -1. При натискання пробілу, якщо танк не обертається, відбувається постріл (виклик функції makefire з передачею номери танка), з урахуванням того, що танк може вистрілити з інтервалом в 500 мілісекунд.

    Далі займемося управлінням танками ІІ. Якщо танк противника знаходиться на найближчому відстані, наш нехитрий ШІ просто переслідує танк гравця. Наближаючись до мети, він стріляє. Тому насамперед треба знайти кут між танками. Це виконується за допомогою функції FindAngle. Їй передаються координати першого та другого об’єктів. Якщо другий танк нижче першого, тоді змінна turn приймає значення -2, якщо вище, то 2. Наступним дією знаходимо різницю кутів. Потім треба дізнатися відстань між танками. Якщо воно більше 100 віртуальних пікселів, тоді ворожий танк рухається до мети. До речі, в AGK вимірювання ведуться у віртуальних одиницях; якщо після запуску гри їх залишити за замовчуванням, розмір ігрового поля складе 100 на 100. Розмір можна довільно змінювати, в цьому випадку він буде впливати тільки на розташування і розмір об’єктів. Ворожий танк веде стрілянину при наступних умовах: постріл раз на дві секунди, відносний кут між танками менше 20 градусів, дистанція менше 500 одиниць. Крім того, у цій функції треба заборонити танку виїзд за межі ігрової області.

    Остання перевірка, поміщена в цю функцію, — це зіткнення з перешкодами. У циклі перебираємо всі перешкоди, перевіряємо, щоб вони були активні, і тоді дивимося, чи була з танком колізія. Якщо ці умови виконуються, намагаємося знайти кращий шлях для обходу перешкоди. Коли в зіткненні з перешкодою бере участь танк юзера, просто відключаємо тягу вперед. При русі або повороті танка, керованого ІІ, додаємо значення змінної turn до поточного куту повороту. Поворот танка: положення по X обчислюємо, додаючи до поточної координати X синус кута повороту, помноженого на 32, положення Y знаходимо через віднімання з поточного Y косинуса кута повороту танка, також помноженого на 32. Тобто, коли ми застосовуємо косинуса або синуса до куті, поворот виконується в початку координат, і, щоб змістити його в заданому напрямок, треба зробити множення. За допомогою функції SetSpritePositionByOffset виробляємо позиціонування танка. Остання дія виконується тільки під час руху: в ньому відбувається інкремент координат X і Y на синус
    і мінус косинус кута повороту, помноженого на швидкість танка.

    Також функція resetPlayers зупиняє і робить неактивними всі снаряди, випущені танками, скидає параметри танків до початкових значень.

    Потім у функції makefire відбувається активація, позиціонування, завдання вектора руху і швидкості снаряда. На початку виконання гри ми створили 20 снарядів і сховали їх за межі екрану, зробивши їх неактивними, щоб у потрібний момент не витрачати час на створення і ініціалізацію снаряда, а, спозиционировав його, відразу запустити. Тому в цій функції в циклі від 1 до 20 ми перевіряємо наявність неактивного вільного снаряда. Знайдений, він стає активним, як батька йому присвоюється номер, який вистрілив танка, снаряд повертається так само, як материнський танк, призначається відповідна танку позиція. З допомогою операцій з синусом і косинусом йому призначається вектор польоту, потім у функції settankfiredest, вдаючись до тонкого математичного виразу, ми обчислюємо точку приземлення снаряда.

    У циклі функції moveFire перебираємо всі снаряди і для тих з них, які активні, інкрементуємо положення в відповідності з вектором і швидкістю. Якщо снаряд виходить за межі ігрової області, просто робимо його неактивним, іншими словами — поміщаємо в список готових до використання.

    Функція checkHit перевіряє попадання снаряда в будь-який танк. Зовнішній цикл перебирає танки, внутрішній — снаряди. Першим ділом всередині перевіряються можливі зіткнення снаряда з осередком підлоги, всього їх 192, а їх нумерація починається з 200. Якщо сталося зіткнення з осередком підлоги (ракета досягла свого пункту призначення), подальші перевірки виконувати не треба, робимо снаряд неактивним. Наступна перевірка дивиться, щоб випущена ракета не належала выстрелившему нею танку. Якщо вона проходить, ми робимо перевірку зіткнення снаряда з ворожим танком. Якщо зіткнення зафіксовано, зменшуємо кількість життів у підбитого танка, зупиняємо ракету, поміщаємо її в список доступних для чергового пострілу. Дана функція повертає номер підбитого танка.

    Функція makeLevel, судячи по назві, формує карту рівня. Спочатку подвійним циклом проходимо по всіх 192 «цеглин», роблячи їх невидимими і неактивними. Далі робимо видимими тільки деякі перешкоди.

    Останні три функції носять допоміжний характер. Функція wrapAngle на основі отриманого значення кута повертає еквівалентне йому значення, яке не виходить з діапазону 0-360. GetDistance отримує чотири параметра — координати двох точок і повертає витягнутий корінь з виразу, обчисленого за теоремою Піфагора; таким чином, функція повертає відстань між двома точками. І нарешті, findAngle, отримуючи координати двох точок, повертає різницю між двома кутами.

    Гра готова, код написаний, можна запускати на виконання. Але не забудь копіювання матеріалів до статті необхідний арт (з підпапки media каталогу з грою). Арт для гри складається з семи файлів.

    Підготовка білду та поширення

    Тестування на мобільних девайсах

    У цю гру ми не зможемо грати на смартфоні, оскільки тут реалізовано управління з клавіатури, а на телефоні, природно, її нема, але все одно ми зможемо запустити додаток на девайсі, щоб протестувати його.

    Розробляючи гри з допомогою AGK, їх можна не тільки миттєво тестувати на десктопі, але і точно так само, не заморочуючись з установкою SDK і підготовкою білду, тестувати на мобільному пристрої. Для цього треба скачати і встановити на свій девайс утиліту AGK Player.

    kak samomu sozdat igru29 Як самому створити груЯк створити гру. AGK Player

    Я тестував на планшеті з ОС Android, проте є рівнозначна версія плеєра для iOS. Коли утиліта буде встановлено, треба підключити девайс до компу (через USB-кабель або Wi-Fi), запустити AGK Player, а на десктопі в IDE AGK натиснути піктограму Broadcast. AGK підключається до пристрою, передасть дані, а в плеєрі запуститься твоя гра.

    Експорт білду

    Коли гра буде протестована і налагоджена, для її публікації в сторе треба створити білд. Для цього за допомогою команди меню File ? Export Project «Tanki» ? As Android Apk відкриємо вікно Export Android APK, в якому пропонується встановити властивості створюваного пакета.

    kak samomu sozdat igru30 Як самому створити груЯк самому створити гру. Export Android APK

    В області АПК Settings, в спадаючому списку APK Type пропонується вибрати цільову платформу Google, Amazon, Ouya. App Name — ім’я програми в операційній системі, Package Name — ім’я пакета, наприклад com.yazevsoft.Tanki. App Icon — іконка програми, Notification Icon — іконка повідомлення, Oaya Large Icon — іконка в версії Android для ігрової консолі Oaya. Нижче задається орієнтація і мінімально підтримувана версія Android. В області Permission задаються дозволу — доступ до компонентів системи, на якій буде виконуватися наша гра: запис на зовнішні носії, доступ до камери, запис аудіо, вібрація та інше. Область Game Google Services/GameCircle Integration дозволяє задати ідентифікатор для використання сервісів Google. В області Output задається шлях, по якому буде збережений підсумковий пакет. Область Signing дозволяє настроїти властивості для підписання пакету для розміщення його в сторах: задати версію, файл підпису.

    Альтернативні стори

    Під кінець статті додам ще, що не варто впиратися і поширювати свої програми/ігри тільки в топових сторах — App Store, Google Play. Там всі місця зайняли великі видавці, і покупці в першу чергу дивляться на їхні продукти.

    Зверни увагу на альтернативні стори: Amazon AppStore, Opera Mobile Store, Яндекс.Стор і багато інших. На них менше користувачів, менше трафіку, разом з тим менше конкуренції. Я не закликаю обмежуватися трьома перерахованими, дивись ширше. Лідирує платформа Android, між тим, крім Apple AppStore, є майданчики для поширення iOS-додатків.

    Поява альтернативних сторів пов’язано не тільки з бажанням їх ініціаторів заробити, справа тут і в національних уподобаннях. Розмова йде про країни третього світу і східних товаришів — це Індія, Китай, В’єтнам і так далі. Там превалюють застарілі Android-девайси, і користувачі цих пристроїв готові досить часто здійснювати невеликі платежі за цифрові розваги. Треба тільки правильно зрозуміти цей ринок. Тому випускати там програми/гри має сенс у співпраці з місцевими дистриб’юторами. Тонка східна душа, сам розумієш. На перше місце виходить необхідність локалізації своїх ігор для місцевих користувачів. Крім того, в цих країнах можуть бути популярні ігри інших жанрів: так само, як скрізь, казуалки, різні пазли, екшни, гонки. Поглянь на наступну картинку про дослідження ринку. Вона наочно проілюструє описане вище.

    Висновок

    Підведемо підсумки. Стаття почалася з опису причин появи альтернативних движків і огляду найбільш популярних з них. Потім ми обговорили джерела арту та іншого стаффа для ігор. Потім, вибравши один з движків, ми розглянули його основи і почали кодувати з його допомогою просту двовимірну гру — класичні танки. Ми розробили простеньку аркаду з перешкодами, мінімальним штучним інтелектом, двома ворогами і зброєю. Після цього ми налагодили свою гру прямо на девайсі під управлінням Android і, коли все було готове, зібрали пакет для установки гри під будь Android. І все це в рамках однієї статті.

    Ігрова індустрія в цілому і тим більше інді-сцена постійно в русі, постійно розвиваються. Це ж відноситься до інструментарію інді-розробників. Він прогресує: з’являються нові тулзы, поліпшуються старі. Якщо раніше на засоби розробки ігор дивився з іронічною посмішкою, то зараз якісь тулзы досягли дуже вражаючого стану. І, застосовуючи їх, можна створювати цілком захоплюючі і сучасно виглядають гри.

    Інді-сцена розширила ігрову індустрію. Вона показала, що не тільки 3А-проекти з просунутою графікою можуть бути цікавими. Вона дуже розбавила цей стереотип. Зараз ми граємо і в ігри з піксель-артом, і в ігри з оформленням в темних тонах, і в ігри, де весь процес полягає в читанні документів і винесення вироків на їх основі, ми дивимося в монітор, ведучи допит передбачуваного злочинця, з метою зрозуміти: винен він чи ні. Тому що всі ці ігри мають глибокий сенс. Ми граємо в старі класичні ігри з покращеною графікою, з новими режимами і на сучасних пристроях. Все це стало можливим завдяки інді. Інді-ігри несуть у собі глибокі ідеї, це ігри для душі, які по-справжньому хочеться грати.

    Сподобалася стаття? Поділитися з друзями:
    Всезнайко - Корисні поради