Pull to refresh

Браузерная игра глазами гейм-дизайнера

Reading time8 min
Views6.5K
Это мой первый проект по созданию игр, я никогда до этого не работал в подобной сфере. Многие задачи были для меня новыми – что-то несложное, а некоторые трудновыполнимые. Бывает, приходят в голову идеи, но их очень сложно перенести на бумагу. С чего начинается и где заканчивается…

Идея


Всё, как и в любом проекте, начинается с идеи. Была идея создать онлайн браузерную игру про фанатов футбола. Концепция игры: фанаты футбола собираются перед матчем и защищают интересы своей команды. У нас уже есть целевая аудитория, на которую мы поставили ставки (фанаты футбола), но игра также должна быть увлекательная и для обычных геймеров. Моя задача заключается в том, чтобы игра была как можно занимательнее.

Идей, как правило, много. Каждый день появлялось минимум 2-3 конструктивные идеи. Я полагался не только на себя, мне помогали друзья и даже мама, хотя она никогда не играла ни во что кроме пасьянса и зума делюкс. Иногда идея приходит из самого неожиданного источника. Важно вовремя остановиться, проанализировать и отсеять ненужное. Иногда приходилось отказываться от замечательных идей только потому, что они не вписываются в общий концепт. Грустнее, когда отказываться приходилось из-за нехватки средств или вероятности не уложиться в сроки.

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


Игра


В игре есть 3 класса: «Instigator»(Зачинщик) (мало жизни, мало урона, много шанса к увороту и увеличенный шанс к криту), «Fighter»(Боец) (средняя жизнь, много урона, маленький шанс уворота и маленький шанс к криту) и «Ringleader»(Защитник) (много жизни, средний урон, маленький шанс к увороту и маленький шанс к криту).



У каждого класса есть свой антипод: У Зачинщика это Боец, у Бойца это Защитник, у Защитника это Зачинщик. Принцип работы заключается в следующем: одному классу я дал сильные и слабые стороны, антиподу я дал качества, которые игнорирует сильную сторону и пользуется слабыми качествами своего оппонента. К примеру: у Защитника много брони, много здоровье, 3 блока (урон, наносимый в блок равен нулю, крит делиться на два) и средний урон. У Зачинщика мало жизнь, небольшой урон, большой шанс к криту и увороту, и про. броня. Из а того что у защитника мало шанса попасть, его урон не представляет угрозы зачинщику, в то время как у зачинщик увеличенный шанс к криту, что пробивает блок, и про. броня. По такой методике работают и остальные антиподы.

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

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

Капы


Четыре атрибута, которые характеризирует каждого персонажа: сила, ловкость, интуиция и выносливость. В игре есть максимальные значения для каждого из атрибутов (кроме силы) который игрок может достичь. Если игрок достигает максимального значения, то у него будет 100% шанс к увороту, к криту, а также максимальная броня. Само собой вещей, которые в сумме дают столько статов, чтобы достичь этот максимум, нет. Этот максимум и есть кап.

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

Подсчёт Урона


Как считается урон: Урон Оружия + Сила*(1,3)(1,4) (1,5). Цифры в скобках это число соответствующая каждому классу. Это не окончательный урон, который будет нанесён, так как это зависит по кому внесён этот урон. Первая формула, которую я применил, выглядела так:

Нанесенный Урон = Урон * Зашита от Урона
Защита от Урона= 1 – Броня/Кап Брони

Дадим значения, чтобы всё было яснее:

Защита от урона = 1- 500/1000
Нанесенный Урон = 100*0,5= 50
500 это текущий уровень защиты персонажа, кап на его текущем уровне равен 1000, в итоге нанесённый урон, будет сокращён вдвое.

Но у нас ещё есть про. Броня, которую надо куда-то запихнуть. После разных попыток и тестов я пришёл к оптимальной формуле.

Защита от Урона = 1 – (Броня*Про. Брони)/(Кап Брони*Кап Про. Брони)
Дадим те же значения что и в прошлом примере:
Защита от Урона =1 – (500*500)/(1000*1000) = 0,75
Нанесенный Урон = 100*0,75 = 75



В итоге броня была понижена на 50% а сам изначальный урон был увеличен на 25. При этом урон может повышаться если про. броня будет больше чем кап на данном уровне.

В случае если у одного из нашего игрока сработал шанс нанести критический удар, то нанесенный урон умножиться вдвое. В случая блока нанесенный урон умножается на ноль. В случае блока и крита одновременно, нанесенный урон остаётся неизменным, а в случае уворота нанесенный урон умножается на ноль, вне зависимости был ли это критический удар или же обычный.

Система Боёв


У игрока есть 5 точек, по которым он может ударить и 5 точек, которые он может заблокировать. Одновременно он может заблокировать 2 части тела сразу (в случае танка с двух ручкой, он может заблокировать сразу 3), ударить он может только одну (в случае двух одноручных, он может атаковать 2 точки одновременно). Игрок может использовать приёмы сразу, после чего они уходят в откат на определённое время.
Размен происходит по раундам, игрок не обязан обмениваться с каждым из игроков. При этом его могут бить неограниченное число персонажей одновременно. Компьютер случайным образом выберет вам оппонента. К примеру, происходит бой 2х2, в одной команде есть Защитник и Зачинщик, а в другой два Бойца. Задача танка на протяжения боя как можно дольше удержать на себе этих двух дпс-еров, так как у Бойца мало про. брони. Защитник будет изображать из себя танка который прикрывает пехоту, в то время как Зачинщик сможет вносить урон без каких либо препятствий. В это же время Бойцы должны как-то обхитрить, Защитника и найти окно, чтобы добраться до главной угрозы: Зачинщика.



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

По окончанию боя, выигрышная сторона будет вознаграждена опытом и другими фичами. Все игроки приносят вклад в победу (кроме афк), поэтому вся выигрышная сторона получает одни и те же бонусы.

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

Приёмы


Начиная с первого уровня у каждого персонажа появиться первый приём. Некоторые приёмы есть у всех классов, а некоторые предназначены только для одного класса. Для того чтобы использовать приёмы игроку требуется наличия энергий/агрессий/стойкости. У приёмов есть откат. Чем приём сильнее, тем у него откат и стоимость увеличивается.

Некоторые приёмы доставляли массу хлопот: то они работали не так, как изначально планировалось, то вообще не работали. Некоторые приходилось убирать только потому, что не было возможность сделать, а некоторые не подходили одному классу и приходилось менять.

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

У Зачинщика был один прием, который пополнял жизнь в течения 6 раундов. Я не хотел менять свойства приёма, но из-за того что у него мало максимальной жизни, он не получает достаточно жизни и приём становится бесполезным. Два дня я пытался найти этот баланс, так и не получилось, в итоге я отдал этот приём Защитнику и придумал новое для Зачинщика, которое повышало его шанс на уклонения.

Одна фича которую недавно имплементировали это регенерация энергий. Один программист, играя за Защитника, сказал, что у него слишком быстро тратится уровень стойкости и приёмы, которые восстанавливают это, не помогают в достаточной мере. Я не хотел давать ещё больше энергий за использование того или иного приёма и не мог решить, что же делать.

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

Восстановление энергии
Успешный Удар = 2энергии
Успешный Крит = 3 энергии

Восстановление агрессии
Успешный Удар = 2 агрессии
Успешный Крит = 4 агрессии

Восстановление стойкости
Успешный Удар = 3 стойкости
Успешный Блок = 1 стойкости

В расчёт я брал сильные, не забыв и про слабые качества каждого из классов (кто больше блокирует, тот и получает бонус и у кого реже происходят удары тот и получает больше бонусов). Участвуя в поединках где много соперников, танк будет получать больше стойкости, так как у него 3 блока, тем самым шанс блокирования атак увеличен.

Бои «Ранкед»


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

Я наткнулся на очень интересную формулу, которая на данный момент используется в шахматах. Называется она «Формула ЕЛО». Эта формула находит шахматисту соперника, который равен по опыту и мастерству. Примерно такую же формулу я использовал в данной игре.

Принцип работы схож. Вычисляется уровень мастерства игрока. Если игрок только начал, то тогда это цифра равна нулю. После чего система ищет соперника примерно с таким же рейтингом что и у него. Предположим, что система нашла соперника с рейтингом равным 10. В этот момент высчитываются шансы выигрыша игрока А у игрока Б.

Вероятность выигрыша игрока А = 1/1+10^[(eloB-eloA)/400]
Вероятность выигрыша игрока Б = 1/1+10^[(eloА-eloB)/400]
*elo A= текущий рейтинг игрока А
*elo B= текущий рейтинг игрока Б

То есть вероятность выигрыша игрока А ≈0,48, а вероятность выигрыша игрока Б ≈0,52. Потом надо высчитать какой рейтинг получит игрок А в случае выигрыша или сколько потеряет в случае проигрыша. То же самое надо высчитать и для игрока Б.

В случае победы Игрока А
Новый Рейтинг Игрока А = elo A + k(1-exA)
В случае поражения Игрока А
Новый Рейтинг Игрока А = elo A – k(1-exB)
В случае победы Игрока Б
Новый Рейтинг Игрока А = elo A + k(1-exB)
В случае поражения Игрока Б
Новый Рейтинг Игрока А = elo A – k(1-exA)

*exA – вероятность выигрыша игрока А
*exB – вероятность выигрыша игрока Б
*k – Это число будет уменьшаться по истечении первых 30 боев, после чего остановится на 25 (50 25). Это делается для того, чтобы новые игроки быстрее могли определить свой рейтинг.

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

Заключение


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

Сама игра расположена по адресу: www.fbgates.com
Tags:
Hubs:
+9
Comments15

Articles

Change theme settings