Нещодавно, вивчаючи роботу з мультимедійною бібліотекою SDL 2.0 засобами мови програмування Object Pascal, я вишукував приклади готових прости ігор, реалізованих за допомогою цієї бібліотеки. Аналізуючи вихідні коди готових робочих ігор, краще зрозуміти як це працює. Проте більшість прикладів наводились на мові C++ і використовували додаткові сторонні компоненти, що значно ускладнювало перенос таких проектів на Object Pascal.
Проте, переглядаючи результати пошуку на Github, я натрапив на один цікавий проект, який називається "Let`s make Dangerous Dave". Цікавість його в тому, що засобами мови C (не C++!), лише з використанням стандартних засобів мови та бібліотеки SDL2.0, за два дні, приблизно біля 4 годин кожен (за словами автора) було максимально близько до оригіналу відтворено цю всесвітньо відому ретро гру. Хоча й відтворено не на 100%, відсутній початковий екран, переходи між рівнями та звуковий супровід, але геймплей відтворено навіть дуже близько! І до всього цього навіть створено 10 відео на Youtube та коротка стаття на сайті автора як і чому це все робилось та що для цього потрібно.
Автор займався реверс-інженирінгом оригінальної гри, щоб витягнути необхідні дані - графіку, структуру рівнів тощо, а після цього повністю з "нуля" відтворює геймплей оригіналу, поступово додаючи функціонал.
Посидівши декілька вечорів, по цих відео в мене вийшло майже повністю відтворити цю гру на Object Pascal + SDL2.0 (лишилось декілька невеличких "косяків", які мені просто ліньки було виловлювати). Це дозволило мені краще зрозуміти як спланувати процес розробки і внутрішню структуру гри. До цього в мене ще не було досвіду розробки ігор за допомогою SDL 2.0, тому цей проект значно допоміг мені підготуватись до реалізації більш масштабного та серйозного проекту, до якого я вже досить давно готувався. І його реалізація починається саме сьогодні, з цього вступного епізоду, де ми розглянемо концепцію гри та спробуємо скласти "дорожню карту" розробки.
Що я використовував:
- Оригінальна гра "Dangerous Dave" для MS-DOS (я взяв на сайті cowboyua.clan.su, де є зібрано, напевно, найбільше в Мережі матеріалів по усіх частинах цієї гри, як оригінальних так і від сторонніх розробників). Використовувалась лише для того, щоб поринути в атмосферу спогадів тих років, коли я ще вчився в школі та вперше грав цю гру на комп'ютері "Поиск-ІІ"
- Емулятор Dosbox (для багатьох операційних систем) для запуску оригінальної гри в ОС Linux, якою я користуюсь.
- Середовище розробки Lazarus IDE з компілятором FPC
- Мультимедійна бібліотека SDL2.0
- Офіційні розширення для SDL2: SDL_Image, SDL_Mixer - у відповідних каталогах на сервері (також там є багато цікавих проектів на SDL)
- Редактор рівнів Tiled
- Графіка, шрифти та звуки, які можна знайти у вільному доступі в мережі Інтернет на спеціалізованих сайтах.
- Книга, яка вчить використовувати можливості SDL 2.0 для розробки ігор мовою C++ SDL Game Development by Shaun Mitchell - цю книгу я взяв за основу для фреймворка при розробці ігор.
- Beginning Game Programming v2.0 by Lazy Foo - напевно, найкращий підручник по використанню усіх можливостей SDL 2.0 та офіційних розширень на мові програмування C++. Допомагає мені реалізувати дійсно класні речі в моєму фреймворку.
- Free Pascal Meets SDL - сайт, на якому розміщено ряд уроків по використанню SDL 2.0 з компілятором Free Pascal. До речі, я зв'язувався з автором цих матеріалів і з його офіційного дозволу зробив переклад на ураїнську мову, який опублікував у відповідному розділі свого блоґу.
Взагалі, погляд на розробку гри з нуля для новачків геймдеву приблизно наступний: "Це ж дуже складно, як я зможу це зробити? З чого мені почати?". Це дійсно так, якщо поглянути на те, що ми хочимо отримати в кінцевому результаті і в загальному намагатись все обдумати одночасно. В такому контексті навіть досить проста гра буде виглядати складною в реалізації. Проте, не все так складно, як здається. Давайте поглянемо на це трошки інакше і спробуємо скласти дорожню карту для розробки. Я трохи посидів, подумав, і в мене вийшло приблизно наступне (в процесі розробки цілком ймовірно, що дорожня карта неодноразово буде коригуватись та розширюватись):
Поетапна розробка гри з використанням SDL2 з механікою аналогічною “Dangerous Dave In The Desert Pirates Hideout”. Попутно розібрати формат рівнів Tiled, сформувати фреймворк з можливістю повторного використання напрацювань і записати відео робочого процесу.
*****************
*Roadmap*
*****************
☐ Базовий ігровий цикл і відображення вікна
☐ Базова обробка подій і реакція на закриття вікна
☐ Завантаження та відображення графіки:
☐ винесення в окремий клас роботи з текстурами, тести
☐ менеджер текстур з розширеним управлінням текстурами, тести
☐ Базові ігрові структури:
☐ структура ігрового стану (режими гри):
☐ меню
☐ гра
☐ перехід між рівнями
☐ структури ігрових об'єктів
☐ структура рівня
☐ завантаження рівня з файла (формат JSON Tiled):
☐ завантаження тайлсетів
☐ завантаження тайлового прошарку
☐ завантаження прошарку об'єктів, які можна взяти
☐ завантаження інших об'єктів (точка входу, двері виходу, вороги...)
☐ відображення даних рівня в вікні
3. Реалізація ігрової логіки
☐ рухомі об'єкти і шляхи руху
☐ анімація об'єктів
☐ рух ГГ:
☐ обробка вводу користувача
☐ обробка колізій
☐ взаємодія між різними ігровими об'єктами
☐ реалізація камери та прокрутка рівня
☐ звуковий супровід гри
5. Розширені ігрові події:
☐ перевірка умови завершення рівня
☐ реалізація динамічної анімації об'єктів
6. Стани гри:
☐ режими меню/паузи/гри/перехід між рівнями
☐ збереження та завантаження стану гри - система сейвів (JSON)
З задачами ми визначились, тепер потрібно визначитись чим будемо користуватись. Найперше, що потрібно зробити, це підготувати систему для розробки. Я користуюсь розширеним дистрибутивом Lazarus: Code Typhon - The Pascal Visual Programming Studio. Операційна система, під якою постійно працюю - Linux Mint x64 (хоча все те ж саме можна виконатиі в ОС Windows), гра буде крос-платформною завдячуючи бібліотеці SDL 2.0 та компілятору FPC. Про те, що, як і куди встановити, детально розібрано в перекладі підручнику по SDL 2.0 в моєму блозі, тому не буду повторюватись, а перейду відразу до налаштування.
Що ж, в мене вже все встановлено, налаштовано і протестовано, тому в наступному епізоді приступаємо до розробки з "розбором польотів" що, як і чому саме так.
Немає коментарів:
Дописати коментар