5

Об относительности и геймдизайне

Пару недель назад я закончил делать первый уровень своей первой игры и сегодня я хочу рассказать об идеях, лежащих в основе этого уровня. Ничего сенсационно нового, скорее наоборот ретро во всех его проявлениях. Если вы съели собак в создании игр, то можете смело закрывать статью, а если нет, то приглашаю вас к прочтению =)

Когда ты гуру геймдизайна (Знакомьтесь: Дэйв)

Когда ты гуру геймдизайна (Знакомьтесь: Дэйв)

Про уровень.

Идейно донельзя простой - главный герой падает вниз пещеры попутно уворачиваясь от летящих камней - кусков этой самой пещеры. Собирает монетки, чтобы пополнить счетчик сокровищ и кушает еду, чтобы пополнять счетчик здоровья.

Идейно донельзя простой уровень

Идейно донельзя простой уровень

Падение

Разделим слона это на игровые составляющие. Самая главная составляющая - само падение. У нас условный герой, условно бесконечно перемещается в пространстве.

С подобными уровнями/играми мир уже знаком. Это и Subway Surfers...

Subway Surfers

Subway Surfers

...и Jetpack Joyrid...

Jetpack Joyrid

Jetpack Joyrid

...и даже диназаврик гугла.

Dinosaur Game

Dinosaur Game

Игры с бесконечными уровнями обычно объединяет одно - они нам врут. В них никто никуда не бежит/летит. Главный герой буквально находится на месте и иногда подпрыгивает, а мир несется на него. Уверен, что перечисленные примеры именно такие =)

Спроецируем это на нашу игру.

Наш гном делает вид, что падает, но на самом деле он просто перемещаться по экрану в разные стороны, в пределах координат x [0:320] / y [0:240] . А вот весь мир вокруг него летит вверх. Отодвинем немного камеру.

Отодвинули немного камеру.

Отодвинули немного камеру.

Внутриигровые объекты появляются буквально чуть ниже экрана и летят наверх. Снизу генерируется рисунок задника, еда, монетки и прочее. Все летит наверх, пока наш герой загнан в тесный квадрат. Ах да, наверху эти объекты долетают до определенной координаты и удаляются. Наш герой не должен лететь бесконечно вниз, а объекты не должны лететь бесконечно вверх.

Кажется, что герой летит вниз, но нет - весь мир летит вверх. Это буквально магия кино - кругом обман, но красивый(ИМХО).

Логика появления объектов.

По умолчанию, условно бесконечные уровни проще всего создавать из паттернов. Паттерн - заранее подготовленный кусок уровня. Эти куски поставляются один за другим в определенном или псевдослучайном порядке. Еще можно создавать уровень через алгоритм появления объектов, но алгоритм жесток для написания. Если не учесть все аспекты, то уровень основанный на алгоритме будет периодически заводить игрока в тупик, а иногда становится слишком простым(Возможно это только для меня так).

В общем, пошел я по пути создания паттернов на основе алгоритма. Тут следует сделать важное уточнение - мой уровень конечный и длится 2 минуты, поэтому в финале я прописал уровень целиком. Т.е. создал паттерны и раскопировал их, поменяв некоторые элементы и в конце создал карту всего уровня. Но это в конце...

А с чего же начал? Разделил экран на условные линии с объектами. После чего прикинул условия на появления объектов в этих линиях.

Линии с объектами.

Линии с объектами.

Т.е. условно линии с объектами идут вверх(это не красные, а то, что разделено красными). 20 линий - 2 экрана -1 паттерн возникновения объектов. На первых двух экранах мы встречаем камни с сложностью 1/2, т.е камень на 2 линии. На третьем и четвертом экранах мы встречаем камни с периодичностью 1(один камень на линии). К 11 экрану выходим на сложность 2.5. Если посмотреть первые 16 экранов, то можно увидеть следующую сложность:

1- 2 экраны | сложность 0.5

3- 4 экраны | сложность 1.0

5- 6 экраны | сложность 2.0

7- 8 экраны | сложность 3.0 (усложнение)

9-10 экраны | сложность 2.0 (откат)

11-12 экраны | сложность 2.5 (выход на стандарт)

13-14 экраны | сложность 2.0 (смена направления камней)

15-16 экраны | сложность 2.5 (возвращение к стандарту)

и т.д.

Разнообразие вносится типом камней, они бывают маленькие и большие. Часть из них летит вверх, а часть летит вниз. Короче bullet hell адаптированный под сеттинг игры.

Подобные условия, как на камни, прописаны и на еду и на монетки. Полный список условий на экраны выглядит следующим образом:

1- 2 экраны | сложность 0.5 | монетки 0.5 | еда 0.0 (начало)

3- 4 экраны | сложность 1.0 | монетки 0.5 | еда 0.0 (начало)

5- 6 экраны | сложность 2.0 | монетки 0.5 | еда 0.0 (начало)

7- 8 экраны | сложность 3.0 | монетки x | еда 0.25 (крупные камни и упрощение едой)

9-10 экраны | сложность 2.0 | монетки 0.5 | еда 0.0 (отдых)

11-12 экраны | сложность 2.5 | монетки 0.5 | еда 0.0 (много мелких камней, выход на стандарт)

13-14 экраны | сложность 2.0 | монетки x | еда 0.0 (смена направления камней)

15-16 экраны | сложность 2.5 | монетки 0.5 | еда 0.0 (много мелких камней, стандарт)

17-18 экраны | сложность 3.0 | монетки x | еда 0.0 (усложнение)

19-20 экраны | сложность 3.0 | монетки x | еда 0.0 (крупные камни)

21-22 экраны | сложность 3.0 | монетки x | еда 0.25 (востановление)

и т.д.

Ах да, про монетки и еду.

Монетки

С монетками тоже не все так просто.

Не все так просто.

Не все так просто.

Мне тут пришла мысль. В геймдизайне часто желтый цвет - цвет сокровищ и одновременно цвет - указывающий на путь персонажа в игре. Возможно это пошло давно, именно из игр, где требовалось подбирать монетки и этим одновременно прокладывать себе путь к концу уровня. Таким образом первые разработчики игр могли убить двух зайцев одновременно...

Снизу примеры из более свежих игр.

Например первая миссия uncharted 2, по желтому цвету сразу можно догадаться о маршруте главного героя по поезду.

Uncharted 2: Among Thieves

Uncharted 2: Among Thieves

horizon zero dawn тоже не стал исключением, здесь по желтому можно определить путь на этого робота.

Horizon Zero Dawn

Horizon Zero Dawn

Т.е. в своей игре я не просто расставлю монетки на пути, я подскажу игроку маршрут. Этот принцип так же ляжет в основу построения уровня. Так же я добавлю возможности обхода - поощрение в виде кристаликов, которые дают большее количество очков сокровищ. маленький отход и цветовая поощряемая сложность.

маршрут построен

маршрут построен

И конечно же периодически, должно быть предательство игрока, чтобы маршрут по монеткам не воспринимался как само собой разумеющееся правило, даже если большую часть игры оно так и есть.

Почти каждый вариант с взятием монетки ведет к потере жизни, временное предательство

Почти каждый вариант с взятием монетки ведет к потере жизни, временное предательство

Второй ингредиент готов, теперь поговорим об очках здоровья и о еде.

Еда и очки здоровья

Еда это еще одна древняя игровая фишка. Она не только способ пополнить здоровье, но и способ разнообразить уровень. Интереснее собирать и еду и сокровища, а не только сокровища.

Вот только с едой тоже есть проблемы. Если еды сделать слишком мало, то весь уровень сведется к сбору монеток и как способ разнообразия - еда себя особо не проявит. Если еды сделать слишком много, то пропадет сложность, ведь на каждую ошибку мы сразу восстановим себе здоровье.

Как же сделать так, чтобы и еды было много и сложность осталась?

Надо уменьшить пользу от еды и вот, что я придумал...

У нас есть 5(выбрано экспериментальным путем) очков здоровья - крупных сердечек. За каждую ошибку я отнимаю у игрока полное, крупное сердечко(округляя в меньшую сторону). Но вот за каждую съеденную еду я восполняю не целое сердечко, а часть.

Пример, когда два полных сердечка и одно не полное

Пример, когда два полных сердечка и одно не полное

Углубимся в математику сердец =)

У игрока на самом деле 15 очков здоровья. Каждые три очка дают полноценное сердечко. Т.е. на рисунке сверху 8 очков - два сердечка по 3 и одно на 2. За каждую съеденную еду я даю игроку еще 1 очко. Т.е. у игрока станет 9 очков - три крупных сердечка.

Вот как-то так

Вот как-то так

Но вот отнимаю у игрока за ошибку я всегда до крупного сердечка.

Т.е. при трех крупных сердечках, сердец станет два. При двух крупных и одном маленьком сердец останется одно. Т.е. логика получения урона получается следующая:

15 очков здоровья >> 12 очков здоровья

14/13/12 очков здоровья >> 9 очков здоровья

11/10/9 очков здоровья >> 6 очков здоровья

8/7/6 очков здоровья >> 3 очков здоровья

5/4/3/2/1 очков здоровья >> 0 очков здоровья (смерть)

И вот тут немного поиграемся. Мы любим игроков, а значит должны пойти им на встречу и сделать более лояльным получение урона на малых очках здоровья.

5/4/3/2 очков здоровья >> 1 очков здоровья

1 очко здоровья >> 0 очков здоровья (смерть)

А за поедание еды всегда +1 очко.

И вот еще одна механика придумана.

Сложность и пасхалка

Те, кто чуть знаком с разрабатываемой мной игрой знает - я делаю графический стиль в 1bit/2bit/3bit/4bit/5bit графике. Переключение происходит по нажатию одной кнопки или через настройки.

пример в 1bit

пример в 1bit

Здесь тоже таится маленький нюанс. Для всего уровня есть единая карта, но вот вычитывание карты происходит чутка по разному для разных цветовых палитр. Чем более бедная палитра, тем больше сложность, тем больше вероятность появления дамажущего объекта:

1 bit - 100%

2 bit - 95%

3 bit - 90%

4 bit - 85%

4 bit - 80%

Это тоже некоторая отсылка - раньше игры меньше заботились о чувствах игрока, были чутка сложнее(ИМХО), а значит сложность в менее битных режимах пусть будет выше. К тому же такой подход дает немного разное прохождение на высокобитной графике.

Итого

Загоняем персонажа в рамки экрана. Разрезаем уровень на полоски, добавляем объекты с определенной периодичностью в определенные места. Добавляем монетки, как маршрут игроку. Добавляем алгоритм для очков здоровья и расставляем по уровню еду. И делаем это все в блокноте =) Вот пример того, что получается:

И читать удобно если привыкнуть... "Я уже даже не вижу код. Я вижу блондинку, брюнетку, рыжую." (с) Матрица

И читать удобно если привыкнуть... "Я уже даже не вижу код. Я вижу блондинку, брюнетку, рыжую." (с) Матрица

Игра потом вычитывает файл и построчно заполнит уровень.

А вот как получилось. Немного скриншотиков...

Ах да, говорят раньше жаловались на рандом в музыкальных плейлистах. Чтобы избавиться от жалоб, рандом сделали менее рандомным и людям сразу понравилось. Для построения своего уровня я использовал тот же метод. Почти все здесь сделано ручками, но по алгоритму. Выглядит как рандом но это абсолютно не так )

На самом деле это не все фишки геймдизайна, которые я использовал в этом уровне, но наверное основные =)

П.С. Статья была написана с целью поделиться, что даже маленькая игра, маленький ее фрагмент - целый мир с большим количеством задумок, законов, механик и т.д. Это по своему красиво =)

Как всегда, буду рад видеть Вас в моем ТГ канале. Там я чуть чаще выкладываю фрагменты из своей игры и другие материалы)

https://t.me/SSSDungeonGhost

Спасибо за внимание!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества