Как стать автором
Обновить

Пошаговая стратегия как хобби

Разработка игр *


Привет, хабралюди! Кто из вас не мечтал создать свою игру? А возможно ли написать браузерную стратегию, не имея при этом опыта и денег? Возможно, если очень этого хотеть.

Под катом моя история создания бесплатной пошаговой стратегии.



Что из себя представляет игра? В двух словах — сетевой аналог старого доброго «Panzer General».

Но обо всем по порядку.

Предыстория


Некоторое время назад я играл и модифицировал серию игр «В тылу врага». Серия отличная, а тамошние танковые бои считаю прародителями World of Tanks. Но за несколько лет сетевая игра жутко надоела, даже с модами. Причиной тому был однообразный геймплей: одни и те же карты, один и тот же поток юнитов,
все игроки всегда копили кредиты на более мощный танк или отряд пехоты, а юнит-лист каждого был строго фиксированным.
Таким образом некоторая техника полностью исчезла из боев, а последние были однообразны и предсказуемы. Искались способы в модах кастомизировать меню покупки, дабы игрок хотя бы рандомно получал свой юнит лист и им сражался, не говоря уже о специализациях. Но увы движок этого не позволял.

Тогда же в форумных дискуссиях и родилась идея — «а что, если к игре прикрутить глобальную карту с экономикой?».
Стратегия на глобальной карте, тактические бои в ВТВ. Юниты доступные сторонам диктует фронт. Не успел прислать подкрепления? — сражайся тем что есть! Круто! Конец однообразию!

Осталось только уговорить разработчиков. Но результат разговора с ними, я думаю, всем очевиден — неизвестно окупится ли.

Я немного знаком с коллективом BestWay, и мы пришли к выводу, что стратегию то можно и в браузере реализовать, тогда «В тылу врага» придется минимально дорабатывать, всего лишь дописав API.

Браузерную часть, без раздумий, гордо взял на себя. Договорились после каких-то моих наработок обсудить дальнейшую жизнь проекта, ведь «поболтать» все мастера.

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

Разработка


В качестве фреймворка был выбран Сodeigniter, на нем я правил несколько чужих проектов, и был некий опыт. Клиентскую часть было решено писать на JS, точнее на jQuery, ведь flash я еще больше не знал.

Далее нужно было понять как это все должно выглядеть. Из игр подобного жанра я видел лишь «Total war» и «Карибский кризис», но все они были standalone. Продолжительное гугление дало свой результат — weewar.com. Вот оно, то что нужно!

За основу была выбрана карта Европы и начал анализировать html. На виваре было несколько слоев. Нижний — картинки территорий, средний — юниты, самый верхний — теги area с точным контуром гексы. При этом, весь html код весил больше 500 кб.

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


Как я решил эту проблему? Никак. Практика показала, что она совершенно несущественная. Все клики в 99% случая производятся в центр гексы или выше. Если в будущем будут жалобы, сделаю проверку координат клика.
Карта отрисована, в глазах счастье. Движемся дальше.

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

Как обычно, сначала строился велосипед, затем внезапно обнаружен «волновой алгоритм», и на его основе все хорошо собралось до работоспособного состояния. Далее его нужно было портировать на php, т.к. любые расчеты js легко подделываются. Переписал, выбросил все лишнее, ведь на сервере необходимо всего-лишь проверить валидность движения из точки А в точку Б. Работает.

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

Очередное «ноу хау» по сравнению с weewar — отображения лога действий и возможность просматривать повтор. Ну кому будет удобно читать player1 move unit 23,5 -> 24,6?
Пару десятков строк кода, и юзер, кликнув на глаз в логе, видит повтор анимации.
image

Когда данный прототип был показан, никакого внятного ответа от BestWay я не получил. Но совершенно не расстроился. За плечами был отличный опыт программирования и стремительное решение доделать игру как независимую. Как weewar, но лучше.

То что было дальше, помимо программирования, можно смело считать геймдизайнерской работой.
Сеттинг был оставлен — Вторая Мировая.
Придумывались формулы для расчета атаки, характеристики юнитов… Очередная моя гордость — разные бонусы территорий, для взаимодействия разных типов войск. Например, танк в лесу получал +2 к обороне от вражеской техники, но -2 от пехоты, что было вполне логично и имело важное значение для геймплея. На виваре лес просто давал танку -2 к обороне.

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

Жизнь проекта


В первые недели количество зарегистрированных пользователей было очень мало. Никто не понимал, куда он попал и что нужно делать. Нужен был хороший мануал, и я начал смотреть онлайн проекты на их наличие, дабы хоть примерно понять как они пишутся. Пролистав несколько, мне стало нудно. Если ты уже немного знаком с игрой, тогда документация читается легко. Но для новичка — это «лес». Пришел к выводу, что нужно интерактивное обучение. Минимум текста, максимум действий. После его реализации жизнь стала налаживаться.

День за днем игрались партии на затертой до дыр карте Европы, еще той, с weewar. Это быстро надоело. Было ясно, что без редактора карт не обойтись.
Примерно за месяц написал такой редактор, которому игроки были очень рады. В первые сутки его существования в проекте появились 5 новых карт. На сегодняшний день карт около 40.

Очень хотелось сделать красивую отрисовку возможный путей.
Но уперся в производительность браузеров. Для реализации необходимо JS-ом накладывать третий слой с полупрозрачной белой гексой. А на средней карте это около 1000 новых div. Файрфокс, опера — довольно быстро справлялись с задачей. Хрому нужно было несколько секунд. Ну а виновник «торжества» — IE. Даже девятая версия добавляла дивы секунд 5. Пришлось отказаться. Думаю над более производительной схемой.

Вот так, в течении нескольких месяцев, почти каждый день в проекте что-то делалось. Фиксились баги, прикручивались новые фичи. Добавлялись юниты. Буквально на днях был кардинально обновлен интерфейс, и добавлена новая нация — США. Полная история изменений доступна в разделе «Что нового?».

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

Что дальше?


Кто-то клеит модельки, кто-то играет в страйкбол, мое хобби — моя стратегия.

В данный момент собираю «кровные» на хорошего художника, ведь многие юниты и объекты в игре из других игр.

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

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

Проект пока крутится на обычном хостинге, поэтому даю ссылку сразу на обучение. Оно полностью на JS, не насилует MySql. Надеюсь, хабраэффект будет милостив.

Wargex

Спасибо за внимание и удачи на виртуальных фронтах!

P.S. Огромное спасибо alexDark и Armin за помощь со статьей.
Теги:
Хабы:
Всего голосов 167: ↑159 и ↓8 +151
Просмотры 35K
Комментарии Комментарии 56