
До останньої версії було додано багато цікавих нововведень: програмна анімація персонажів замість кадрової анімації, можливість відривати частини тіла, режим виживання, стаціонарні гармати, місії для квестового режиму, нова зброя, переваги та бонуси. Також змінилася механіка отримання зброї.
Усі частини щоденника
- Частина 1: Ідея
- Частина 2: Дизайн
- Частина 3: Технічне демо (ця)
- Частина 4: Реліз
Програмна анімація персонажів
Раніше ми використовували кадрову анімацію для головного персонажа. В результаті у нас був великий набір спрайтів в одному файлі для ходьби та смерті. Аналогічно, окремі набори були визначені для кожного монстра. Деякі з них були досить великими, наприклад, для гнізда. У майбутньому зовнішність персонажів (емоції, одяг тощо) буде змінюватися, і ми вважаємо, що робити анімацію для кожного можливого вигляду занадто витратно. Тому ми вирішили перейти на програмну анімацію.
Наприклад, ходьба здійснюється шляхом почергового переміщення спрайтів ніг у вертикальній площині. Також торс і голова рухаються синхронно, імітуючи хитання. Усе це реалізовано за допомогою коду, що дозволяє нам заощадити багато пам'яті. Для цього нам довелося розділити всіх персонажів на їхні складові частини. Кожна з них отримала силуети різних кольорів. Ці кольорові заповнення використовуються, коли персонажі піддаються різним впливам. Наприклад, якщо головний персонаж отримав бонус, вся фігура на мить стає жовтою; а коли куля вражає монстра, він стає червоним.
Відрив частин тіла
Усі частини тіла є окремими сутностями, і ми можемо робити з ними все, що хочемо. Перша ідея — розбивати монстрів на шматки, коли вони отримують удари від гранат або дробовика. Ми пішли ще далі: відривати руки та голову випадковим чином, коли здоров'я наближається до нуля. Пізніше монстри почали вибухати, навіть головний персонаж. Додаючи до всього цього багато крові, ми отримали унікальну рису для цього типу 2D-шутера.
Режим виживання
Спочатку наша компанія з розробки програмного забезпечення планувала додати цю опцію якомога швидше, але ми не змогли реалізувати її протягом тривалого часу. Коли система хвиль нарешті була встановлена, і були додані кілька дійсно великих монстрів, ми почали реалізацію. Результатом став дуже динамічний ігровий процес.
З кожною хвилею ми збільшуємо кількість монстрів на 1. На четвертій хвилі після кожних двох хвиль ми додаємо босів та великих монстрів. Оскільки в режимі виживання немає доступу до магазину зброї, ми отримуємо її з мертвих монстрів як бонуси. Ми обмежили патрони до кількох магазинів. Коли в гравця закінчуються патрони, в руках героя з'являється пістолет. Режим виживання дозволяє гравцеві швидко випробувати всі види зброї. Ця механіка працювала добре, тому ми реалізували її в режимі квестів з кількома умовами (нові пістолети стають доступними після покупки). У майбутньому ми додамо статистику найкращих гравців.
Нові монстри та стаціонарна зброя
Окрім звичайних гнізд, ми додали дві величезні модифікації. Тепер гнізда виробляють зомбі, але плануємо замінити їх на маленьких павуків. Для порівняння:
Згідно з сюжетом, стаціонарні гармати представляють собою укріплення, побудовані високорозвиненою цивілізацією, яка захищається від вторгнення монстрів. Вони оснащені трьома типами зброї: кулеметами, лазерами та ракетницями. На початкових етапах гармати стріляють у нас, але в майбутньому стають нашими союзниками. Кулі, ракети та плазмові промені завдають шкоди не лише нам, але й монстрам, і, звичайно, гармати можуть завдати шкоди одна одній.
Завдання в режимі квестів
Щоб урізноманітнити ігровий процес, ми придумали різноманітні завдання та умови для проходження рівнів у режимі квестів:
- Убити всіх — знищити всі хвилі.
- Залишитися живим протягом певного часу — на цих рівнях буде особливо велика кількість монстрів.
- Захистити союзників — у міру прогресу гри ми будемо допомагати високорозвиненій расі позбутися монстрів.
- Переміщення вантажу з точки А в точку Б — наша допомога також буде виражатися в доставці різних вантажів.
- Дістатися до певної точки — у нас буде рівень з лабіринтом, з якого потрібно вибратися за певний час.
Нова зброя
Ми вже реалізували 6 видів зброї + планується ще 2 гармати:
- Пістолет — безлімітні патрони, найслабша зброя.
- Дробовик — дальня стрільба, 4 постріли за раз.
- Uzi (пістолет-кулемет) — дуже висока швидкість стрільби.
- Гранати — ефективні проти орд зомбі, гнізд та гармат.
- Гранатомет — лише трохи поступається гранатам.
- Лазерна зброя — пробиває монстрів, висока шкода.
- Вогнемет — підпалює монстрів; дуже ефективний проти павуків.
- BFG — найбільша зброя в грі і, можливо, найпотужніша.
Переваги та бонуси
Додано кілька цікавих бонусів:
- Бонус невидимості — монстри йдуть до точки, де вас бачили востаннє.
- Бонус замороження — монстри навколо заморожуються і стоять нерухомо.
- Бонус страху — монстри тікають від вас.
Назви переваг були упорядковані, випадіння покращено.
Нова механіка отримання зброї
Раніше зброю купували в магазині в режимі квесту. Після завершення рівня ви використовували лише один тип зброї, який був попередньо обраний. Подібний підхід, але з можливістю вибору між двома типами зброї, використовується в Monster Shooter.
Водночас у режимі виживання зброя випадає випадковим чином і має кілька магазинів патронів. Коли у гравця закінчуються патрони, він отримує пістолет. Це реалізовано в Age of Zombies. Під час одного з таких рівнів можна змінювати величезну кількість зброї. Гра стає динамічною, а стиль проходження змінюється з переходом на нову зброю.
Після гри в режимі виживання ми зрозуміли, що зброя має просто випадати, а не купуватися. Ігровий процес стає набагато цікавішим, коли гравець використовує різну зброю на одному рівні.
Тому в режимі квесту ми реалізували механіку отримання зброї, яка схожа на режим виживання. Після того, як гравець купує нову зброю в магазині, вона стає доступною на початку рівня, але з обмеженою кількістю патронів. Пізніше вона випадковим чином вибирається зі списку придбаної зброї.
Проблеми з продуктивністю
Зі збільшенням кількості монстрів у режимі виживання ми зіткнулися з проблемою різкого падіння FPS навіть на потужних смартфонах. Встановлення culling — setCulling (true) для кожного спрайта дозволило отримати приріст продуктивності. Але виникла серйозна проблема: монстри відображалися лише в тому випадку, якщо вони могли повністю поміститися в поле зору камери, інакше їх було неможливо побачити. Тому був написаний окремий метод для визначення необхідності відображення або приховування спрайта, якщо він не повністю вписується в межі камери.
private void optimize() { if (RectangularShapeCollisionChecker.isVisible(new Camera(ResourcesManager.getInstance().camera.getXMin() - mFullWidth, ResourcesManager.getInstance().camera.getYMin() - mFullHeight, ResourcesManager.getInstance().camera.getWidth() + mFullWidth, ResourcesManager.getInstance().camera.getHeight() + mFullHeight), this)) { setVisible(true); } else { setVisible(false); } }
Ця невелика оптимізація значно покращила продуктивність всієї гри.
Це все на даний момент. Слідкуйте за новинами про процес розробки програмного забезпечення! Слідкуйте за офіційною сторінкою студії у Facebook, я регулярно публікуватиму цікаві нотатки та зображення з гри.
UPD: Galaxy Recon вже на Google Play — перевірте!