Привет всем, сделали недавно в качестве "проекта на выходных".
Играем за рыцаря, цель - построить замок и заработать как можно больше золота. Управление - мышка + WASD (или стрелки). Есть прокачка и можно ездить на свинье. Чтобы добывать ресурсы эффективнее - нужно строить крестьян.
Ботов нет, т.к. учить их человекоподобно строить проблематично.
Под капотом на клиенте Phaser, на сервере Node.js + ws + p2.js. Изначально использовали socket.io, но слишком большой оверхед при передаче бинарных данных. В качестве физики брали matter-js, но память текла как ненормальная, и gc фризил, с переездом на p2 прошло. Хостится все на микро-инстансах в Amazon. В планах попробовать переписать сервер на rust'e, должно раз в 5-10 больше пользователей держать навскидку.
Изначально обменивались сериализованным JSON, потом осознали свою ошибку, взяли protobuf-js. Сейчас захардкоженный вьюпорт 1920x1080, клиенту идут только измененные данные и только из вьюпорта (ну, помимо глобальных типа скора и миникарты), поэтому по трафику все достаточно компактно.
Крэши, баги, вот это все, присутствует.
Кто уже релизил .io игры, что посоветуете? Где выкладывали (я так понимаю iogames.space - самый крупный вариант из тех кто ссылку просит?) ? Какие подводные камни?
Ссылка на игру: http://glor.io/
UPD:
> Кто уже релизил .io игры, что посоветуете?
Раз никто не посоветовал, посоветую сам.
Пока тестировали на нагрузку ботами, рассчитывали на 100-400CCU глядя на другие выходящие игры, однако после того как iogames.space выложил игру, и начали появляться летсплеи, CCU вырос до 1500 к вечеру, мы смогли накинуть несколько серверов но уперлись в лимит, и все рухнуло.
Серверов не хватает, Amazon очень медленно обрабатывает запрос на повышение лимитов - вышел эпичный провал в самый пик.
Полезные выводы:
- Надо было изначально запрашивать повышение лимитов у Amazon'а
- Надо стресс-тестить вообще _все_, что есть в игре, и делать это долго (у нас было несколько утечек памяти, которые вылазили не сразу, при определенных действиях игроков, но ставили в ступор сервера после пары часов игры большой толпой).
- Плохая идея писать сервер на node.js
- Мы используем Elastic Beanstalk и одновременный апдейт (чтобы клиент и сервер были синхронизированы везде), но когда сервер под большой нагрузкой, он может не обновиться (память кончается, у нас же t2.micro), что приводит к попытке отката и красивой красной надписи на всех серверах. Пока решили это тем, что убиваем приложение перед выкатыванием.
- Прикручивайте перед стартом дашборд, чтобы видеть все сервера и их игровое состояние (мы даже прикрутили вывод всех возможных параметров сервера и игроков, включая профайлинг, сколько какая операция выполняется) - это дикий хелп к дебагу, например, после этого мы сразу нашли несколько утечек, и пришли к выводу, что у нас слишком высокая точность при обсчете физики, поэтому она самый большой тормоз. Ну и есть бонусы - можно найти популярного ютьюбера, присоединиться к нему, и поконтактировать на предмет раскрутки.
UPD2:
Один из самых полезных выводов:
- Никогда, никогда, никогда, не хостите ио игры у амазона, трафик выходит крайне дорогой (дороже чем сами сервера с лоадбалансерами и всяким).
UPD3:
Выкинули node.js, совсем, переписали сервер на расте, это как глоток свежего воздуха по скорости и отсутствию GC, по производительности получилось раз в 8-10 быстрее, и более предсказуемо по кпу и памяти. Почему раст? Потому что плюсы это скучно :). Есть, конечно, свои подводные камни ввиду новизны и малой популярности языка в геймдеве, все что лежит в крейтах - явно никем нигде в продакшене в таком виде не использовалось, приходится дорабатывать и чинить баги. К борроу-чекеру привыкается за неделю.
Приехало немного статистики, да, iogames.space - самый крупный .io портал, если судить по входящему трафику. Топ стран - USA/Russia/Brazil (возможно топ некорректен, потому что у нас нет серверов в Австралии, Сингапуре, и Японии/Китае). Причем бразильцы - одни из наиболее активных.
Здорово, хоть и чуть лишка наворочено на мой вкус и с ожиданиями от io игры. На мобилки планируется?
@typhoondev
Спасибо за отзыв. Про навороченность - соглашусь, делали так, потому что увидели тенденцию к усложнению в целом геймплея в ио играх.
Если будет интерес у аудитории, после обкатки и доработки (включая арт) веб-версии, планируем сделать нативные приложения на мобилки.
Забавно. Наворачивайте дальше :)
Хочу скрины.
@Skyblade Добавил.
очень даже неплохо! и интересно ...
невозможность построить стену дальше некоего радиуса выглядит как баг
зачем золото в игре?
возможность респануть воинов на территории врага за стенкой - это фейл конечно. Зачем стена тогда нужна?
в целом довольно интересно
@vater
Спасибо за фидбек! Да, похоже надо отображать радиус постройки, будем прикручивать.
Золото - это условный скор, чем больше - тем выше в таблице рекордов, в будущем планируем добавлять дополнительные возможности за золото (для прокачавшихся игроков, чтобы его было куда сливать).
> возможность респануть воинов на территории врага за стенкой - это фейл конечно. Зачем стена тогда нужна?
Выглядит как баг, но на самом деле не совсем. Это создает много веселых ситуаций, потому что работает в две стороны, плюс достаточно просто от него защититься двойными стенами с небольшим буфером.
Но тут посмотрим, если все-таки будет большинство людей фрустрировать, уберем. Пока наблюдали как играют люди, в целом этой возможностью активно пользуются, как те кто в защите сидит, так и в нападении.
Очень бесит, что не видно свою базу на миникарте. С другой стороны странно, что видишь на карте врагов, а враги - тебя. Никуда не спрячешься от хайлевелов.
Вообще, сразу в глаза бросается проблема, которой не было в agar.io. С одной стороны нет "веселого пожиралова" как там, и нужно что-то строить, копить ресурсы и т.п. Это интересно, но, с другой стороны, все время прибегает какой-то жлоб с толпой и просто тебя выносит без шансов на спасение. Нельзя просто так взять и убежать как агаре, ты привязан к своей морковке, башням и стенам. И получается, что неясно как играть, когда на карте есть более сильные игроки.
@Went
Спасибо за фидбек. По миникарте, добавили в план, показывать постройки, хотя бы башни свои.
По поводу отображения на миникарте людей, тут можно легко решить, скрывая лоу-левел игроков, но тогда можно легко пропустить, как какой-нибудь лоулевел придет и разнесет/застроит замок. Мы пока делаем ставку на то, что когда народу будет больше 20 человек в комнате, отследить конкретно убитого игрока и продолжить его преследовать и убивать, не давая развиться - будет очень сложно, но если это не сработает, будем скрывать и еще думать.
> Нельзя просто так взять и убежать как агаре, ты привязан к своей морковке, башням и стенам. И получается, что неясно как играть, когда на карте есть более сильные игроки.
А вот тут если честно, не совсем понял. Если есть башня/стены/морковка, то уровень уже достаточно высокий + есть запас по ресурсам, в таком случае обороняться, особенно с грядками - сильно легче чем нападать.
Разница между 5-ым и 10-ым уровнем примерно в один удар (т.е. чтобы 10-ый убил 5-го нужно 3 удара, а наоборот - 4).
Соответственно тот кто обороняется, он в более выгодной позиции, за счет возобновляемой еды, стен, наличия достаточно сильных гвадров и камня рядом (если мы говорим про готовую базу). Если враг не оставил у себя на базе гвардов, а пришел и спамит ими, их на своей базе очень легко отгородить, таким образом лишив врага лимита, и он станет совсем уязвимым независимо от уровня.
В общем, с моей позиции, на скилле и правильной тактике, можно защитить замок от кого угодно, так и захватить любой. Т.е. достаточно сбалансированно выглядит. Или нет?
Очень круто получилось, а сколько по времени заняла разработка до альфы?
@RunneRik
Спасибо :) Проект затевался как джастфофановый и делался не фуллтайм, поэтому сложно посчитать время, но вечерами/выходными полтора месяца где-то, плюс месяц в фоновом режиме продумывания и изучение стека разработки. Ну и разработка альфы еще не закончилась, хоть и сменили надпись на бету :)
n0uk
> в качестве "проекта на выходных".
n0uk
> полтора месяца где-то, плюс месяц
Фух, я уж думал я совсем слоупок и такое взаправду делается за выходные :). Потратил около двух недель на свою игру io в режиме "полуфуллтайм", но конечно еще пилить и пилить.
Проекту удачи!
Тема в архиве.