Пять Лет Рабства

Вы когда-нибудь задумывались о своей собственной игре? А как насчет вашей собственной многопользовательской игры? Я думаю да! Многие из вас хотели бы присоединиться к разработке собственного шедевра, где сливаются ваша многогранная фантазия и исключительный перфекционизм.

Я вас понимаю и хочу рассказать свою историю этого увлекательного путешествия.



Пять лет рабства



Фон

Все началось еще в 2007 году, когда появилась уникальная онлайн-игра j2me по произведению Сергея Лукьяненко.

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

Я втянулся и, несмотря на отсутствие каких-либо обучающих материалов, быстро разобрался, что к чему.

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

Желание узнать, как это работает, и случайность подтолкнули к использованию багов с последующими банами.

Затем окончание школы и выбор профессии «программист» дали толчок к разработке моего первого программного обеспечения для получения прибыли в онлайн-мире.

Как только мои познания в области ООП окрепли, мы с моим другом-геймером и художником решили разработать свою собственную ММО, которая была бы в сто раз круче!

О чем наша игра?

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



Пять лет рабства

Родная планета фракции Осеон Планеты фракций защищены системой из 12 врат. Захватив все врата, игроки получают доступ на вражескую планету.

Недостаточно просто телепортироваться по открывшемуся пути; после этого вам нужно захватить цитадель – главное здание планеты.

Оказавшись в сложной ситуации, игроки на оккупированной стороне получают резервные войска с параметрами в 1,4 раза превышающими свои собственные.

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

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

Пять лет рабства

Борьба с врагом Однако жестокий мир PvP-игр имеет и другие интересные механики, начиная от обычной разработки богатых месторождений и заканчивая охотой на кладоискателей.



Опытный образец

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

В нашем комплекте были: Anthill, Netty, MySQL. Это были не совсем одинаковые технологии.

После большой работы мы столкнулись с массой проблем: отсутствие редактора интерфейса, микролаги карты при движении, вводе текста и многое другое.

В полноэкранном режиме игра выглядела отвратительно.



Пять лет рабства

Прототип игры.

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



Пять лет рабства

Прототип игры.

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

Мы добавили игру в ВК (без каталога) и анонсировали запуск в нашей группе, где было 100 человек.

На этот раз в игре было непонятное клавиатурное управление, оставалось множество ошибок, а также слишком простые карты, имевшие всего два слоя (трава и деревья).

А за три дня игры в ВК зарегистрировалось всего 15 человек — люди не понимали, как играть.

И мы решили переделать все с нуля.

Скриншоты старой версии

Пять лет рабства

Большой онлайн

Пять лет рабства

Меню взаимодействия с игроком

Пять лет рабства

Битва

Леха, не все в порядке, начнем сначала!

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

Но глупо сдаваться, когда пройден такой длинный путь.

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

Мы решили обязательно сделать новую версию клиента с отрисовкой графики через видеокарту.

Из множества фреймворков Starling казалась наиболее привлекательной; у него был API, аналогичный стандартному Flash, он поддерживался Adobe, и вы могли без особых усилий использовать существующую графику.

Наконец-то новая версия заработала гладко.

Чтобы растрировать вектор на лету, я взял Динамический генератор текстурного атласа .

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



Карты

После того, как мы разобрались с технологиями на клиенте, решили поработать над карт-сервером.

Каждая планета может состоять из одной или нескольких локаций, между которыми вы можете перемещаться вправо или влево.

Для каждой локации создавался фрагмент карты, изначально состоящий из двух слоев.

Позже мы решили добавить еще один слой, потом еще и в итоге остановились на четырех:

  • трава\земля;
  • камни\вода;
  • украшения размером с клетку;
  • большие украшения.

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

Это хороший подход, когда вместо трех слоев фона рисуется один.

Но возникли некоторые проблемы: при переключении MovieClipa на следующий кадр для растеризации все предыдущие кадры должны быть отрендерены.

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

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

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

Здесь здесь Вы можете прочитать больше о том, как это сделать.

Все карточки имели одинаковый размер: 20х16 квадратных плиток размером 64 пикселя.

Данные карты записывались в файл в двоичном формате, где границы слоя были определены заранее и оставалось записать только номер кадра MovieClip. Таким образом, вес файла карты составил 1280 байт. Но позже формат был преобразован в JSON, чтобы было проще работать с данными.

В результате работа над картами заняла значительную часть разработки клиента.

Чтобы появилась возможность создавать красивые карты, был написан редактор на Flex.

Пять лет рабства

Редактор карт На каждой из 14 планет была своя флора и фауна, так что можно было визуально понять, на какой планете вы находитесь.



Пять лет рабства

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

Это было сделано для выступающих интерактивных элементов, таких как кнопки меню.

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

Игра стала выглядеть намного лучше в полноэкранном режиме.



Пять лет рабства

Карта с туманом войны по бокам

Сервер

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

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

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

С серверной архитектурой нам помог местный умелец.

решатель .

Он, можно сказать, направил нас на правильный путь: показал, как собрать сервер, и позаимствовал архитектуру из учебного курса Mail.ru. Solver не стал исключением и через некоторое время покинул нас.

Еще через год усилий мне удалось написать всю основную логику игры.

Сейчас, оглядываясь назад, недоумеваю, почему мы не написали сервер на Акке? Про архитектуру можно почитать здесь - Архитектура сервера онлайн-игр на примере Skyforge , вы также можете найти лекции на Intuite. Конечно, у нас на сервере не 2 миллиона строк, но это тоже немало.

Никакие волокна (как в Skyforge) не используются, и наш сервер, скорее всего, оказался менее читабельным.

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

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



Поездка туда и обратно.

Родная игровая механика

Я хотел бы рассказать вам еще об одной необычной вещи в игре.

Как бы вы назвали игрока, который сознательно собирает неполную армию и проигрывает другим игрокам/ботам? Мы называем их «сливами».

Они специально выкачивают опыт и понижают свой уровень, чтобы стать сильнее на своем уровне.

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

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

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

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

Вы можете повышать и понижать уровень до бесконечности.

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

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

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

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



Не получилось, не получилось

В каталог игр ВК мы вошли 4 февраля 2018 года, и уже не первый раз.

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

Несмотря на длительный период разработки игры, мы не смогли охватить все детали; мы совершили много ошибок.

Прежде всего, ошиблись с платформой: не каждый игрок готов проводить в браузерной 2D игре столько времени, сколько требует механика.

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

Наша подготовка в игре была, мягко говоря, неудачной.

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



48 недель спустя.

Примерно через год после запуска альфа-версии стало ясно, что Flash скоро перестанет работать в браузерах.

С этого момента я решил, что надо портировать клиент на что-то более долговечное.

Конечно, писать на знакомом языке приятнее, поэтому я выбрал LibGDX. Этот Java-фреймворк позволил не переписывать часть логики, а просто скопировать ее с сервера.

В нем есть хорошие абстракции для тайловых карт и реализация Tiled, что позволило нам быстро писать код для наших карт. Но есть и слабые стороны: рендеринг шрифтов, отсутствие живых редакторов визуального интерфейса и т. д. На данный момент написан альфа-клиент для Android, в котором реализовано 50% всех возможностей игры.



Пять лет рабства

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

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

Отдельно хотелось бы выразить благодарность звукорежиссеру Пересвету Муханову и композитору Артему Давыдову, они написали все, что можно услышать в игре, в короткие сроки и очень качественно.

Теги: #Разработка игр #Игры и игровые консоли #gamedev #java #Adobe Flash #mmorpg #история разработки #телепорты

Вместе с данным постом часто просматривают: