Що: динамічне виявлення в Shadow Tactics
У Shadow Tactics гравці керують загоном персонажів, кожен з яких має свою спеціалізацію (в загоні може бути до п'яти персонажів). Їхнє завдання - прокрастися по величезному рівню, заповненому ворогами, і непомітно вбити жертву. Кожен рівень - це головоломка з безліччю рішень. Один з найважливіших інструментів гравця - здатність відображати область видимості ворога у формі конусів, які ми називаємо конусами видимості (Viewcones). У конусів видимості є області різного кольору, що визначають поведінку ворогів.
Малюнок 1: конус видимості Shadow Tactics.
Для тих, кому цікаво, як це реалізовано технічно, я процитую нашого провідного технічного інженера Фрідера Мільке (Frieder Mielke), людину, яка створила всю систему: "Основний принцип, що використовується в обчисленнях конусів видимості - це використання карт тіней. Спочатку ми рендеримо текстуру глибини з положення очей обраного персонажа. Потім при рендерингу основної камери ми на підставі раніше створеної текстури глибин генеруємо маску, що містить інформацію для різних областей видимості (наприклад, «повна видимість», «повністю прихована», «невидима, коли персонаж повзе» і «за межами видимості»). За допомогою цієї маски в останньому проході ми можемо розфарбувати конус видимості. У цьому проході використовується буфер шаблонів (stencil buffer) для виключення об'єктів, які не потрібно рендерити, і додавання інформації про джерела освітлення ".
З точки зору дизайну ми проаналізували, як ці конуси використовувалися в старих іграх, і побачили спосіб їх поліпшення. Це призвело нас до перегляду деяких аспектів виявлення персонажів у цьому жанрі.
Хто: Моріц Вагнер (Moritz Wagner), провідний дизайнер Mimimi Productions
Мене звати Моріц, я провідний дизайнер Mimimi Productions. Я працюю в компанії з самого початку, коли наша студія виникла при вивченні гейм-дизайну в мюнхенській Media Design Hochschule. У третьому семестрі ми почали розробляти ранні прототипи нашої першої великої гри The Last Tinker: City of Colors, яку випустили після заснування Mimimi в 2011 році. Крім неї, ми працювали над кількома мобільними іграми.
Зараз у студії працює 16 осіб, і наш останній проект - це Shadow Tactics: Blades of the Shogun, тактична стелс-гра в реальному часі (real time tactical stealth game, RTT) з ізометричним видом у стилі серій Commandos і Desperados.
Навіщо?
Як і багато розробників, ми визначилися з парою стовпів дизайну для Shadow Tactics. Обидва стовпи пов'язані з конусами видимості.
- Збереження базового ігрового циклу: геймплей Commandos сьогодні так само цікавий, як і 16 років тому. Критично важливо, щоб в не залежності від прийнятих рішень базовий ігровий цикл залишався незмінним. Shadow Tactics повинна приносити те ж задоволення (тобто неймовірні муки, що змінюються задоволенням), що і старі ігри.
- Підвищена зручність використання: хоча геймплей старих ігор все ще цікавий, інтерфейс з точки зору зручності вже застарів (сюрприз!). Управління неповоротке, часто недостатньо зворотного зв'язку, а важлива інформація доноситься до гравця нечітко. Shadow Tactics повинна бути схожою на сучасну версію старих RTT-ігор.
Базові принципи конусів видимості
Оскільки конус видимості відображає зір ворога, він використовується для визначення простору рівня, в якому гравець може переміщатися і здійснювати взаємодії. Розстановка ворогів створює такі типи простору:
- Немає конусів видимості: як неважко здогадатися, в таких областях гравці можуть робити практично все що завгодно. Зазвичай саме тут охоронці зустрічають свою передчасну смерть. Гравці можуть або створювати такі області самі, відволікаючи ворогів, або заманювати в них супротивників. Особливо нерозсудливі охоронці навіть можуть проходити по них самостійно.
- Темно-зелений конус видимості: щоб персонажів не тут виявили, вони повинні повзати. Будь-яка дія, за якої персонажі повинні встати, призведе до проблем. Такі області легко минути, але вбивство охоронців зазвичай неможливо без відволікання інших охоронців.
- Яскраво-зелений конус видимості: у такі області вхід заборонено. При низькій складності гри гравці можуть швидко пробігти через них, залишившись непоміченими, але в них майже неможливо виконувати будь-які дії, не потрапивши в біду.
- Пунктирний конус видимості: використовується для кущів або високої трави. Тут лежать або повзучі персонажі гравця завжди невидимі, якщо вороги не увійдуть в кущі (вони завжди заздалегідь попереджають про це голосом і роблять це тільки, коли їх заманюють, або коли вони шукають персонажа). Ми вирішили, що такі типи укриттів ніколи не розкривали всього свого потенціалу в старих іграх. Тому ми додали їх для створення контрасту між відчуттями безпеки всередині кущів і ризику при знаходженні в інших областях.
Конус видимості - найважливіший фактор створення взаємодій з ворогами в Shadow Tactics. Деякі охоронці рухаються патрульними маршрутами, тобто простори постійно змінюють свій стан. Це досить просто, але я хотів розповісти про це в першу чергу.
Як виглядають конуси видимості
Немає жодних градієнтів або іншого оформлення, найважливіше - контрастні краї і чітко позначені області.
Розмір конуса видимості впливає на занурення в гру, складність і дизайн рівнів.
Сама по собі ця функція може створювати ситуації, що руйнують відчуття зануреності в гру. Вони часто зустрічаються в стелс-іграх, і тому гравці частково змиряються з ними. Але все одно важливо не перегинати палицю. Хоча дивлячись на конус видимості і зрозуміло, чому ворог не помічає персонажа, повзучого в трьох метрах від нього, все одно така ситуація виглядає неприродною і дурною. Всі ми зустрічалися з цим в іграх.
Частково вирішити проблему можна збільшенням конусів видимості. Чим ближче гравець може підібратися до ворога непомітно, тим більше це схоже на геймплейну механіку, що може перешкодити зануреності в ігровий процес. Однак занадто великі конуси видимості сильно впливають на складність гри, дизайн рівнів і розмір карт, тому для пошуку компромісу потрібен час.
Малюнок 2: на нічних рівнях параметри конуса видимості змінюються. Конуси стають меншими, темно-зелена область дуже велика, але освітлення завжди створює яскраво-зелену область видимості.
Важливим фактором також є цілісність. Ми вирішили, що всі ворожі охоронці повинні мати однаковий розмір конуса, кути руху і швидкість. Конуси видимості нерухомі тільки в деяких ситуаціях (наприклад, коли охоронці розмовляють один з одним). Тому гравці можуть передбачати поведінку конусів і будувати на цьому свою тактику, не побоюючись раптової зміни поведінки. Поступово вони краще освоюють цю функцію, що викликає почуття задоволеності грою. Ми також вирішили зберегти параметри незмінними для різних рівнів складності, щоб гравці, які почали на низькій складності, не повинні були перевчатися при переході на більш високу.
Тут уважний читач може запитати: "Але Моріц, ти ж сказав, що ніякого оформлення в конусах видимості немає. Що ж це за дивний візерунок на темно-зеленій частині? " Я поясню: його додали тому, що чіткий контраст між яскравою і темною областю не був помітний, тому складно було визначити, що ж це за колір. Таке буває на височинах і у випадках, коли частини конуса видимості перекриваються великими об'єктами або укриттями.
Малюнок 3: на лівій картинці я відключив візерунок. На ньому видно, як складно визначити яскравість конуса видимості. Коли візерунок увімкнено (на зображенні праворуч), все стає очевидним.
Один конус, щоб правити всіма
Ми вирішили, що можна відображати одночасно тільки один конус, як і в старих RTT-іграх.
З точки зору дизайну на це є дві основні причини:
- Інформація: Shadow Tactics надає майже повну інформацію. У грі немає туману війни, вороги ніколи не створюються випадково і їх поведінка завжди передбачувана (поки вони не починають активно шукати гравця). Гравці можуть повністю аналізувати ситуацію, якщо у них є на цей час. Обмеження в один конус видимості - це єдина напівскрита інформація при вирішенні головоломки. Змушуючи гравців запам'ятовувати область видимості охоронців, ми створюємо напруженість і робимо геймплей уникнення конусів видимості більш інтригуючим.
- Наочність: єдиний конус видимості дозволяє не заплутатися в інтерфейсі і підвищити наочність. Хоча для деяких гравців величезні обсяги інформації звичні, для більшості вони будуть занадто складні. Крім того, це виглядає неприємно на скріншотах і у відеороликах.
Навіть ніндзя можна виявити
Малюнок 4: персонажа Хайято (Hayato) виявив один з перших охоронців на першому рівні. Нуб.
Обробка моменту виявлення ворогом персонажа гравця дуже важлива в будь-якій стелс-грі. Ми багато разів поверталися до цієї частини геймплея, я розповім про цей процес і про те, до чого ми прийшли в кінці. Ця частина присвячена не тільки самому конусу видимості, але і різним механікам і системам, які використовувалися... а потім були вирізані.
Спочатку давайте подивимося, що ж відбувається, коли персонаж гравця потрапляє в конус видимості і близький до виявлення:
- Звук: відтворюється унікальний звуковий ефект. Він повідомляє гравцеві, що його виявили.
- Фокус: конус видимості ворога фокусується на персонажі і автоматично вмикається, навіть якщо обраний інший конус. Це відразу говорить гравцеві, хто його виявив.
- Уповільнена зйомка: гра переходить в режим уповільненої зйомки, щоб дозволити гравцеві краще зреагувати. Пізніше я розповім про еволюцію цієї функції. Це був болісний, повний помилок процес.
- Жовтий колір: якщо конус видимості був зеленим, він починає заповнюватися жовтим, починаючи від очей ворога. Як тільки жовта частина торкнеться персонажа гравця, ворог насправді виявляє його, починає стріляти і включає тривогу. Якщо персонаж заходить у жовту частину, охоронці виявляють його негайно. Це схоже з функцією в Desperados, де конуси видимості поступово ставали жовтими, але переміщення жовтої частини до гравця дозволило створити більш чіткий зворотний зв'язок моменту виявлення загрози. Це дозволяє гравцеві краще освоїти роботу функції і використовувати її на свою користь.
Повільний шлях до уповільненої зйомки
Проби і помилки - невід'ємна частина цього жанру, підтримувана можливістю швидкого збереження і завантаження в будь-який момент часу. Хоч і очевидно, що ми хотіли зберегти цей аспект, ми побоювалися того, як відреагують на нього сучасні геймери. Зрозуміло, ті, хто грав у старі ігри, не зазнають проблем, але чи не злякає це нове покоління? Чи не вважатимуть критики це застарілим?
Ми багато роздумували на цю тему і прийшли до висновку, що залишимо функції швидкого збереження і завантаження частиною гри. Але нам все-таки варто дати гравцям більше можливостей уникати виявлення. Жовта частина конуса видимості теж відповідала цій філософії і нам сподобалося, як вона працює.
Примітка: додавання цікавої функції перемотки часу не тільки стало величезною складністю з технічної точки зору, але змінило ті аспекти, які ми, як новачки в жанрі, боялися міняти. Ми обговорювали функцію, але швидко від неї відмовилися. Вона зайняла б занадто багато часу і була б занадто ризикованою для прибутків.
Враховуючи ці передумови, ми почали думати над різними функціями. Так почалася одіссея в світ ідей: у кожної з них були проблеми і через безліч ітерацій ми їх відсікали. Це був болісний процес, особливо для нашого програміста Філіпа Віттерсхагена (Philipp Wittershagen), якому доводилося їх реалізовувати. Думаю, у нього все ще бувають кошмари.
Режим заморожування
Це пекельне породження повинно було використовувати сили ніндзя і запобігати виявленню, щоб гравцям доводилося рідше використовувати швидке завантаження. Ось як він працював: як тільки персонажа гравця досягала жовта частина конуса видимості, гра припинялася і переміщувала фокус на персонажа. Це вже було великою проблемою: припинення гри в стресовий момент вбиває потоковий стан і відчувається кепсько. Пауза завжди включається несподівано і збиває гравців з пантелику. Крім того, якщо після паузи гра очікувала команд гравця, то він віддавав їх випадково, тому що більшість гарячково починала клацати мишкою, намагаючись втекти. (За цю звичку гарячкового клікання я звинувачую в основному Diablo і MOBA. Велике вам спасибі.)
У режиму заморозки були і більш дивні особливості. Я хронологічно розгляну основні ітерації і коротко розповім, що в них не працювало:
Виконати одну дію: у цій ітерації гравець міг виконати лише одну дію після призупинення гри. Це було призначено для того, щоб, наприклад, персонаж міг нахилитися, якщо знаходився в темній області, або просто зняти охоронця дистанційною атакою, якщо його бачив тільки один ворог.
Однак виникли проблеми. З'ясувалося, що така можливість занадто потужна для деяких персонажів (у яких були хороші дистанційні атаки) і майже марна для інших. До того ж дуже часто не було ніяких варіантів врятувати персонаж. Вас помітили в яскравій області та охоронців кілька? Отже, не пощастило, ви можете зробити одну дію і все одно потім померти. Коли спрацьовує така механіка страховки, гравець очікує, що вона буде корисна завжди, але у неї були слабкості. Тому ми відмовилися від неї і вирішили спробувати щось інше...
Телепортація в межах кіл: виникла ідея, що круті персонажі-ніндзя можуть телепортуватися за допомогою димових гранат, щоб уникнути виявлення. Тут вже виникли питання зі стилем: навіщо самурай Муген буде використовувати димові гранати і телепортацію? І чому всі ці персонажі застосовують димові гранати ТІЛЬКИ при виявленні і гравець не може використовувати їх в інших випадках?
Звичайно, ми вирішили на час проігнорувати ці питання і сфокусуватися на механіці:
При виявленні навколо персонажа з'являється коло, і гравець може натиснути в будь-якому місці кола, щоб телепортуватися в цю точку. Так він може або потрапити в темну область конуса видимості, де можна пригнутися, або навіть переміститися в укриття. І, зрозуміло, гравці почали використовувати цю функцію, щоб телепортуватися прямо до охоронців і вбивати їх.
Тому ми замінили коло на конус, що дозволяє гравцям телепортуватися тільки ВІД ворога. І знову виникли проблеми. Він був марним навіть частіше, ніж попередня концепція (не знайшлося безпечної точки для телепортації? Бум, хедшот.), а гравці бездумним кліканням телепортували персонажів у випадкові місця. Крім того, відображення конуса заплутувало інтерфейс.
Малюнок 5: режим заморозки: при виявленні гравець може телепортувати персонажа в будь-яку точку конуса (скріншот зроблений у версії pre-alpha).
Фальшива перемотка
З якихось причин ми все ще вважали, що телепортація - це хороша ідея. Оскільки переміщення персонажа було занадто дивним і складним, ми хотіли спростити цей момент. При виявленні за персонажем виникала лінія, що показує, де він був раніше. Гравці могли телепортуватися в будь-яку точку лінії, як би «перемотуючи час» для цього персонажа.
І знову з'явилися проблеми. Зворотний зв'язок працював не дуже добре, і гравці не розуміли, що їм потрібно зробити. Але я все-таки думаю, що через кілька ітерацій ми могли б удосконалити цю функцію. На жаль, була одна величезна проблема: якщо гравець вибирав персонажа, яким він не керував вже давно, то ця функція виглядала дуже потворно. Звичайно ж гравці не пам'ятали, де персонаж перебував до цього, і дивувалися, за яким принципом створена ця дивна лінія. Крім того, нею можна було шахраювати на снігових рівнях. Тут охоронці йдуть за вами, бачачи ваші відбитки... Думаю, подальше легко уявити. Покажи свої відбитки ворогові, змусиш рухатися за собою і телепортуйся за його спину. Все чесно.
Малюнок 6: фальшива перемотка: гравці можуть телепортуватися в будь-яку точку, в якій персонаж був раніше (скріншот alpha-версії).
І я ще не згадав про ті брудні трюки, які доводилося застосовувати, коли виявленими виявлялися кілька персонажів, або, гірше того, вони знаходилися на різних точках карти. Я досі згадую з неприязню цей темний для нас час.
Новий підхід
Нарешті ми усвідомили, що це не спрацює. Коли спускаєшся вниз по спіралі, найкраще відійти на крок убік, і подивитися на те, чого ж дійсно хочеш досягти. Ми почали з хороших ідей, і поступово опустилися вглиб. Ми постійно ґрунтувалися на попередній невдалій спробі, але не робили з неї висновків. Це не дозволяло нам підійти до проблеми зі свіжим поглядом, щоб придумати що-небудь просте і ясне. Не повторюйте наших помилок. Іноді варто зробити крок вбік. У теорії всі ми це знали, але з якихось причин ми робили це недостатньо рано, і, мені здається, таке траплялося занадто часто.
Подивившись на проблему під іншим кутом, наш креативний директор Домінік Абе (Dominik Abé) запропонував просту функцію уповільненої зйомки, яка включається, коли персонаж потрапляє в конус видимості і той починає заповнюватися жовтим.
Знову виникли деякі проблеми. Спочатку для тестування функції ми просто уповільнювали всю гру. Це давало гравцям більше часу відреагувати. Проблема полягала в тому, що вони сприймали функцію як покарання і перешкоду. Їм здавалося, що їх уповільнюють, коли вони намагаються втекти від наближення жовтої лінії, і це було нечесно. Ми спробували виправити ситуацію, зробивши персонажів гравця більш швидкими, ніж інша частина гри, але проблема збереглася. До того ж з'явилися проблеми з анімаціями та відеоефектами.
Тому ми вирішили дотримуватися уповільненої зйомки, тому що проблеми такого типу певно можна було вирішити. Крім того, такий підхід здавався нам найбільш простим і елегантним рішенням з усіх. Ще одним фактором був бюджет - настав момент, коли нам довелося на чомусь зупинитися.
Наприкінці вирішення цих проблем здалося дуже простим. В основному воно стосувалося тонкого налаштування параметрів уповільнення гри і зміни балансу швидкості заповнення конусів видимості жовтим, щоб спроба втекти від них в уповільненій зйомці приносила задоволення. Щоб все спрацювало, нам навіть не довелося змушувати персонажів рухатися з різними швидкостями. Деяких гравців все ще розчаровує уповільнена зйомка, тому я думаю, що коли-небудь нам знову потрібно буде повернутися до її налаштування.
Ув'язнення
Конуси видимості - базова частина гри, тому в цій статті ми не могли детально розглянути інші. Я вирішив зосередитися на моменті виявлення, тому що це одна з областей, в якій ми зазнали найбільших труднощів, і мені здалося, що цей специфічний процес допоможе іншим розробникам, які зустрілися зі схожими проблемами.
Ми намагалися знайти для Shadow Tactics єдине потужне рішення, яке забезпечить миттєве спрацьовування при виявленні персонажа і дозволить йому чарівним чином врятуватися. В результаті замість цього ми створили функцію, що уповільнює процес виявлення і дає гравцям більше часу зреагувати і вирішити проблему творчо. Вона чудово поєднується з суттю гри, і надалі ми хочемо послідовно покращувати її.
Я впевнений, що конусах видимості і моменті виявлення ще багато чого можна вдосконалити.
Для нових ігор я б із задоволенням поекспериментував над тим, щоб інтервал перед виявленням мав більш різноманітні наслідки (наприклад, включення тривоги), а не розглядав би тільки сам момент виявлення. Для цього є безліч можливостей, особливо при вивченні поведінки охоронців. Такі експерименти додадуть в гру новий вимір, що дозволяє гравцеві активно заважати наступу катастрофічних наслідків.