Як я в поодинці зробив гру і висновки

Історія створення однієї фанатської комп'ютерної гри Fallout: The X-Project і спроби зробити з неї «цукерочку»
Попереджу відразу, ви не побачите в цій статті якихось актуальних та сучасних знань, так і в цілому, я не стану нею приділяти багато уваги технічним аспектам.

Поясню чому: сама по собі гра розроблялася в період з 1998 по 2008 рік, а найбільш активно — десь з 2004 по 2007. Якщо чесно, то я і в 2005-му розумів, що майбутнього у гри немає. Але хотів просто її закінчити. Інакше навіщо стільки часу і зусиль витратив на проект? До того ж, я був не один, і не можна допускати, щоб чужі зусилля були витрачені даремно. Відповідальність.

Але не будемо відходити в бік. Кому буде корисна стаття? В першу чергу таким же хлопцям, яким я був сам, навчаючись в інституті. Мрійникам, що бажають створити свою гру мрії.

Почнемо благословясь
Хоча ні, ця гра не була тією самою «мрією», звичайно ж. Але на момент рішення про її розробку, я думав, що зможу швидко закінчити проект (ага-ага!) і привернути увагу таких же, як і я. «Надії юнаки живлять...»

Звичайно, я грав в Fallout. Той самий, від Black Isle і Interplay, тепер залишилися лише в анналах історії. Двовимірний, ізометричний. З отвратным російським перекладом. Але це був вибух. Крышеснос.

Тому при виборі проекту, я вирішив використовувати саме цю тему. Другий Fallout вже вийшов, а про 3-й поки ніхто навіть не заїкався (на момент задумки). Іграшка передбачалася фанатської, розрахованої тільки на російськомовних гравців, і не припускала отримання прибутку. Тільки досвіду. Яким я тут і ділюся.

До речі, пізніше вийшла ще Fallout Tactics, з якої було запозичене не мало графіки для гри. І звуків. Втім, тягалось все і з обох оригінальних фоллаутов.

Чому текстовий квест? Знову ж таки, тому що графіки потрібно по мінімуму. Художників не було, ніяких бірж фріланса ще не існувало (а то, підозрюю, я б ще і вклався), і тільки один 3D-моделлер був знайдений на gamedev.ru якимось дивом. Він зробив коротенький intro при початку нової гри. За що йому окреме спасибі!

І так, деякий бекграунд створення гри я позначив. Поїхали далі!

Вибір мови і платформи
На момент початку вивчення мною GameDev'а, стандартом в ньому C++. А для C++ IDE — MS Visual Studio. Його я і став вивчати і використовувати. Для роботи з графікою і медіа — MS DirectX, і його частини DirectDraw і DirectSound. З 3D у мене з самого початку не склалося, та й у даному проекті він був зовсім не до місця.

Але і сам по собі DirectX не настільки зручна штука, бо я знайшов бібліотечку NukeDX, яка дозволяла працювати з DX набагато зручніше (читайте, це як libGDX зараз для Java). Правда, NukeDX вже на момент початку роботи з ним наказав довго жити. Але все, що я хотів — в ньому вже було і працювало.

Те, що гра буде для настільного ПК на Windows – на той момент не викликало жодних сумнівів. Ноутбуки коштували набагато дорожче ПК, а про планшетах можна було тільки почитати в заумних оглядах. Android смартфони були тільки в зародку, в секретних підвалах лабораторій. А Linux сприймався виключно як консольне серверне рішення.

Хоча не приховую, році так в 2010-му з'явилася думка «а не запхнути під Windows Pocket все це справа»? З назвою операційки можу набрехати, але суть зрозуміла, думаю.

Ідея як з'явилася, так і пропала, — довелося б переписувати весь код і переробляти графіком.

про скриптах замовимо слово
Оскільки я робив текстову Role-Playing Game, яка спочатку передбачає нелінійність проходження (о, це була модна штука тоді!), то треба було закласти можливість маніпуляції ігровими даними без перекомпіляції проекту кожен раз. Та й у цілому, було вкрай цікаво спробувати самому прикрутити скриптова движок до гри.

Скриптова движок повинен був вирішувати наступні завдання:

  • взаємодія з змінними ігри (отримання / модифікація) і функціями;
  • не вимагати попередньої компіляції коду;
  • не навантажувати гру.
З усіх задовольняють даним вимогам вибір припав на Lua. Чому конкретно він зараз вже не згадаю. Мова точно використовувався вже у великих проектах. Та й зараз використовується (наскільки я в курсі, в тому ж WoW, наприклад).

Бібліотека вільно поширювана, приклади були. І я Lua прикрутив.

Набираємо повітря в легені і затримуємо подих перед стрибком
Все чудово, з платформою та інструментарієм я визначився. Тепер треба подумати, як ідею перетворити в щось відчутне.

Оскільки на той момент я вже робив якісь простенькі програмки з допомогою Microsoft Foundation Classes, то з їх же допомогою вирішив написати і сценарний редактор для ігри.

Розсудивши, що гра складається з послідовності сцен (в нашому випадку описуваних текстом), а перехід на наступну сцену залежить від вибору варіанту відповіді, то я створив таку структуру сценарію:

редактор сценарію гри

Як видно на скріншоті, в сцені присутній, крім тексту опису та варіантів вибору, ще й багато інших даних. Наприклад, поточна дата (по ігровому часу). І дивлячись на це зараз, я вже бачу, що слід виправити.

Крім часу, ми ще відображаємо картинку сцени. В редакторі вона задається номером. А в грі відображається в лівому верхньому кутку. І спрайт, як ви вже здогадалися, відповідає даним номером.

Так само є назва сцени (Location). Відтворений для сцени музичний файл. І варіанти дій з посиланнями на відповідну сцену.

І ось тут трохи поговоримо про інтерактивності. Думаю, уважні читачі помітили поле Event, в якому щось написано. Все вірно, це скрипт, що виконується при переході на даний екран. На першому екрані це всього лише додавання в журнал гравця нових завдань:

AddQuest(1, "Згадати власне ім'я, або, хоча б прізвисько");
AddQuest(1, "Знайти доктора");

З точки зору програми ми викликаємо у Lua доступні їй функції програми з тими параметрами, які нам потрібні.

А тепер ще два моменти:

1) У кожного варіанту відповіді є поле Condition. Через той же Lua ми можемо перевірити якісь ігрові змінні, і на основі цієї перевірки або виводити варіант відповіді, або його приховати.
2) Кожен варіант відповіді може мати свій виконуваний скрипт. Тобто, якщо ми вибираємо якийсь варіант, то він може спричинити за собою певну дію. Наприклад, виклик екрану бою. Або програвання звуку. Або перехід на якийсь конкретний екран, якщо виконується умова. І тощо

Ось такими нехитрими способами я вирішувала питання інтерактивності і взаємодії користувача з світом гри.

А зберігається все у файлі scenario.dat, у структурі даних. Зберігається на диск за допомогою механізму серіалізації того ж MFC. Ну і заради приколу, під час збереження кодується.

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

І ось тут… як би не так! Тут було багато неприємної роботи в Photoshop з выцепленной графікою. Але з точки зору програмування нічого особливо складного не було. На перший погляд.

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

екран бою

Звичайно, великий рандом тут рулить. Але треба було зробити хоч якусь подобу осмисленості боротьби з боку комп'ютера. А ось сама по собі модель бою була запозичена від колись дуже популярного «Бійцівського клубу», або просто БК. І адаптована під Fallout. Вибираєш, куди бити, наносиш удар і отримуєш аналогічний відповідь.

Але це добре. А для проходження деяких завдань (квестів) потрібно інвентар. І ось тут я реально устряв на месяцок — другий.



Ні, сам по собі інвентар — штука не складна. Навіть навпаки. Устряв я на написанні drug&drop для нього. Правда, зараз я пам'ятаю тільки, що він викликав багато непристойних слів!



Коли поборов проблему з перетягуванням предметів, то залишалися лише дрібні деталі, на зразок перегляду голодисків (holodisk), відображення журналу завдань і т.п. дрібниці.



Треба перевіряти дно, щоб не зустрітися з каменем
Але… вже був 2008 рік. Вийшов і пройшов з аншлагом Fallout 3 – такий The Elder Scrolls в світі Пустки. Покоління геймерів давно змінилося, і ті, на кого був розрахований текстовий квест Fallout: The X-Project вже або перестали грати зовсім, або втратили всякий інтерес до подібного роду ігор.

Але я анітрохи не шкодую про здобутий досвід, адже я довів собі, так і всім іншим, наступні речі:

  1. Можна написати програму не маючи спочатку ніякими знаннями в області програмування, і не навчаючись за даною спеціальністю де-небудь.
  2. Навіть поодинці можна створити комп'ютерну гру, за яку не буде соромно (привіт GameMaker'у і іже з ним).
  3. Розробляючи ігри, отримуєш масу задоволення!
А ще на власному досвіді з'ясував, що:

  1. проекту зобов'язаний бути deadline!
  2. Перед тим, як щось починати робити, треба дуже уважно вивчити, чи знадобиться це комусь, окрім тебе самого. Банальність, але це граблі, на які все продовжують і продовжують наступати.
  3. Система контролю версій — це просто супер-річ!
  4. ООП — це ще крутіше, ніж система контролю версій.
  5. Читати великі тексти мало хто любить.
  6. Але вже якщо доведеться читати тексти, то треба робити читання ЗРУЧНИМ! В моєму випадку стиль переміг зручність, що виявилося великою помилкою.
  7. Необхідно продумувати канали поширення ще початку роботи над проектом.
  8. Знайти соратників, які будуть не тільки тріпатися мовою, але й щось робити цілком реально. Але не просто.
  9. Поєднувати кілька позицій команди в одній людині — не продуктивно. Постійне перемикання між завданнями негативно позначається на швидкості роботи.
  10. Створювати гру в рамках готового сеттінга (всесвіту) простіше, ніж робити з 0.
  11. На етапі проектування вже варто прибирати зайве. Все одно не увійде у фінальний реліз, але час з'їсть. Так, наприклад, у грі відсутній переміщення між містами (карта світу), хоча спочатку вона передбачалася.
  12. Комп'ютерна гра — це сплав різних інгредієнтів. Тому тут або потрібні всі фахівці, яких ти повинен вміти все це робити сам.
  13. Рано чи пізно завзятість винагороджується. Але щоб це не було пізно, див. п. 1
А ще цей чарівний момент, коли твоя гра компілюється без помилок, запускається, і в ній все саме так, як ти і задумував. Це диво, заради якого варто витрачати свої зусилля!

Господині на замітку
Приводити список літератури не стану, оскільки він вже давно не актуальне.

→ А ось поколупати вихідні коди, при бажанні, можна на Гітхабі
Сама гра, якщо цікаво
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.