Как сделать MMORPG своими руками. Медленно, сложно, интересно

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



    Ты ведь любишь игры, не так ли? То, что ты видишь на КДПВ, называется FAR7. Чтобы было немного понятнее, скажу, что молодежь сравнивает её с Космическими Рейнджерами, те кто постарше, вспоминают StarControl2, а совсем уже хардкорные геймеры постоянно твердят об Elite. Сойдемся на том, что это браузерный космосим. В игре вы можете путешествовать между звездными системами, торговать, воевать и выполнять различные миссии.

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

    Награды



    За три года разработки игра засветилась на нескольких конкурсах. Получила приз за лучшие технологии в конкурсе GAME_ON от корпорации Mozilla и за лучший игровой проект на конкурсе IT-JUMP 2012 в беларуском Парке Высоких Технологий.


    Архитектура

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

    Ядро системы состоит из веб-приложения написанного на Perl/Catalyst, демона имитации жизни на Perl/AnyEvent (мы, кстати, называем его Лапласом) и отдельного WebSocket-сервера на базе SockJS.

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

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

    На клиенте работает MooTools+JxLib, а для рендера используется CAATjs, позволяющий скомпилировать игру в нативное приложение для мобильных платформ. К сожалению, при разработке клиентской части я допустил одну большую ошибку — как и все начинающие разработчики, я написал свой движок. Хотя у меня есть оправдание — на момент начала разработки, подобных движков не существовало в принципе. Это сейчас игровых движков на HTML5 уже чуть ли не больше чем игр, а тогда мы разрабатывали как могли.



    Инди — путь страданий

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

    Жизнь стартапера в основном состоит из адского труда и отчаяния. Если он, то есть я, и пьет кофе, то только для того, чтобы проработать ещё несколько часов ночью. Солнце редко касается его макбука, как, впрочем, и его самого — стартапер работает весь день: на рассвете, в полдень, на закате, и даже, когда через несколько часов снова будет рассвет. Про выступления, аплодисменты и щедрые чеки, пожалуй, тоже стоит забыть — выступать вы будете редко и уж точно не перед собранием директоров венчурных фондов, а редкие пойманные инвесторы будут просить пояснить, что такое «MMORPG» и нужен ли для ее запуска компьютер, а после спрашивать, сколько миллионов человек в день посещает ваш — то есть моего проекта — сайт.


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

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

    Мы начинали втроем, но уже к концу первого года разработки я остался один. Другие ребята просто не выдержали такого темпа, и я их за это не виню. Они клевые, но что поделать — путь стартапера оказался не для всех. Если вы сейчас хотите начать масштабный проект, но чтобы «в свободное время 2 часа в день после работы», то будьте готовы к тому, что потребуется 20 часов в день, а энтузиазм будет переливаться в желание поспать, а не доделать очередную фичу. Что через пару недель случится со всевозможными кофаундерами, партнерами, будущими СЕО и СТО «за процент» можете предположить сами.



    Но любая разработка рано или поздно начинает приносить плоды: от биллинг-провайдера приходит письмо на заключение договора, форма логина начинает пускать игроков, и бездушным NPC перестает быть скучно и одиноко в огромной вселенной. Это называется открытое бета-тесирование или ОБТ.

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

    И каждый хабрапользователь, и его друг, и жена, и даже бабушка зашедшая в FAR7 очень поддержат меня. Это были долгие 3 года, и путь еще далеко не закончен: впереди нас ждет клевая система имитации жизни, подземелья (в космосе, вы представьте!), батлграунды, новый контент и многие другие прекрасные вещи.

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



    Кстати, за время работы над проектом у меня накопилось множество тем, о которых я бы хотел рассказать на Хабре. Предлагаю хабровчанам самим выбрать, какой пост они хотят увидеть следующим:
    Следующий пост
    • 42.1%мониторинг и ведение логов в онлайн-игре654
    • 51.2%хранение игровых ресурсов795
    • 68.7%технологии на стыке веба и геймдева1066

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

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 66
    • +12
      Слушайте, это же офигенно!

      А у вас нигде нет видеозаписи геймплея?
      • 0
        Вот, что я нашел: www.youtube.com/watch?v=4yZ39h4l3zE
        • 0
          Спасибо!

          Честно сказать, я просто не успел подготовить промо-ролик. Кое-какие видеозаписи есть у меня на youtube-канале.
          • 0
            Заметил, что в роликах часть описаний на роднай мове. Очень приятно! Как вас можно поддержать материально?
            • 0
              В игре ведь можно купить премиум акк — чем не поддержка?;)
              • +4
                Да, игра полностью переведена на три языка: русский, беларуский и английский. Вы можете сменить локаль на главной странице.

                Ну, а поддержать можно купив немного антиматерии или просто рассказав друзям ;)
          • +5
            Давно слежу за Вашим проектом, но я никак не мог подумать, что его «пилит» один человек. Восторг!
            Кстати, по поводу следующей статьи. Я бы с удовольствием прочитал о том, как это блин Вам удается, более подробно (;

            Спасибо! Игра шикарна!
            • +3
              Спасибо! Скорее всего это просто трудоголизм, каких-то секретных методик я не применяю :)
              • +4
                показалось «не принимаю». пора спать видимо)
            • 0
              Спасибо вам за превосходную игру и спасибо за то, что выбрали html5, это даёт надежду на будущее
              • +7
                Кто сделал такой огромный объем графики?
                • +1
                  Присоединяюсь, расскажите про графику и музыку, как аутсорсили, как выдерживали стилистику?
                  • +5
                    А ещё огромный объем музыки, текстов и переводов. За большую часть контента пришлось платить, кое-что делали люди на энтузиазме и «процентах», а некоторые вещи делают друзья. Я им всем очень благодарен!
                  • +21
                    Вы маньяк. И вы офигенны.
                    • +4
                      Было время, когда я окунулся в мир ELITE…
                      Позже я узнал про КР и мне казалось что это пик возможностей этого жанра, но потом я понял что не достает ей мультиплеерности.
                      Я мечтал написать что-то подобное. Голова кипела от идей, но отсутствие времени, да и просто понимание того что одному такой проект не поднять — оказались превыше желания.

                      Потому полностью подтверждаю — ВЫ МАНЬЯК, и Вы доказали что можно написать все это и одному, но раскройте тему — как и на что Вы все это время жили???
                      • 0
                        Жил на собственные сбережения и доход от сайд-проектов. К концу прошлого года, все мои ресурсы были исчерпаны и я очень рад, что удалось победить в конкурсе IT-JUMP, если бы не эта победа, то сейчас я бы уже работал в каком-нибудь епаме. Кроме этого я очень стараюсь не фрилансить (хотя получается не всегда), потому что это только отодвигает основную цель.

                        В общем, знаете как говорят «Stay Hungry. Stay Foolish» ;)
                    • +8
                      в основном состоит из адского труда и отчаяния

                      О да, это настолько правда, что я даже не знаю как можно еще лучше подобрать.
                      • 0
                        Не дают вписаться за Империю, только за Федерацию. Так надо?
                        • 0
                          Да, у империи пока не готова стартовая локация и обучалка. Потом, после открытия, можно будет перенести корабль за Империю.
                          • –2
                            Там вообще странно — последняя Opera не поддерживается (хотя вроде бы все необходимые фичи HTML5 она поддерживает), при регистрации из хрома в «Шаг 1: Выберите сторону» федерация справа (империя не выбирается), а в файрфоксе федерация слева (империя тоже не выбирается).
                            • +3
                              Опера и IE вполне неплохо справляются, но каждый из них имеет свои собственные мелкие проблемы. У меня, честно сказать, просто нету времени, чтобы отполировать игру во всех браузерах.

                              Что касается положения, то оно меняется, чтобы небыло перевеса в какую-либо сторону. Это осталось ещё с тех времен, когда регистрация за империю ещё работала. Не пугайтесь.
                            • +1
                              Залип в этой игре… Имперцев мало, срочно призываю всех в свои ряды! Для регистрации за имперца нужно просто игнорировать то, что после клика имперское лого не подсвечивается. По крайней мере именно так было когда я писал этот комментарий. Ну для надежности можно еще в консоле попросить считать вас имперцем примерно так:
                              current.faction="i";
                              Это чтобы вас уж точно зачислили в чистокровные имперцы. Показателем успеха будет картинка имперского корабля вместо набора флота, который вы могли созерцать на шаге №2.
                            • +3
                              Реквестирую «мониторинг и ведение логов в онлайн-игре».
                              У нас эта тема была отложена в самый конец, но постепенно к ней начинаем приступать. Первоначально казалось, что «ну здесь то уж все очень просто». Сейчас понятно, что очень много вопросов)
                              • 0
                                Всю графику вы в одиночку рисовали или кого то привлекали к этому?

                                btw
                                Убил пять врагов, за каждого получил 0 опыта, так и задумано?
                                • +1
                                  Я рисовал интерфейс, иконки и прочую мелочь. Остальное аутсорс.

                                  Сейчас опыт начисляется только тому, кто нанес последний удар. И это неправильно! Я планирую переработать эту систему с вводом флотилий (партий игроков).
                                  • +3
                                    Если можно, то поделитесь, пожалуйста, тем, где заказывали этот самый аутсорс, как выбирали и т.д. Самому сейчас необходимо заказывать графику, но пока только ооочень общие представления о том где и как это делать…
                                    • 0
                                      Честно сказать, я не лучший пример работы с аутсорсерами. Один художник даже «инсценировал свою смерть» и бежал от меня в другой город.

                                      В свете сказанного выше, принимать советы от меня было бы опрометчивым поступком, но я пожалуй дам один совет: «Главное в этом деле — это постоянный контроль. Не думайте, что можно просто найти хорошего художника, отдать ему денег и получить арт».
                                    • 0
                                      Молодец! Я в свое время не взялся за написание игры потому, что боюсь графики, сам рисовать я не умею, а покупать ее дорого решил. Поэтому и отчасти из-за своего оффлайн увлечение выбрал другое себе направление. Сколько денег ушло на аутсорс графики, если не секрет? Очень красиво все.
                                  • 0
                                    Я очень давно ни во что не играю, но с удовольствием потестирую и соберу баг-репорт.
                                    • 0
                                      Отлично! думаю вас заметит какая нить гейм дев студия и пригласит или к своим проектам или предложит взять под крыло вас и вашу игру.)
                                      • 0
                                        Для автора, судя по статье, это не актуально.
                                        Да и смысла в этом уже не так много. ОБТ, основной фронт работ проделан.
                                      • +2
                                        Управление не очень удобное. В тех же рейнджерах, когда вы атаковали корабль, ваш корабль летел за ним автоматически.
                                        • +1
                                          Я постоянно работаю над улучшением управления и интерфейса. Пишите пожелания на форум, будем исправлять неудобства!
                                        • 0
                                          После захода в пункт «опции» пропадает туториал…
                                          • 0
                                            Спасибо за багрепорт! Я попробую воспроизвести и исправить.
                                          • +2
                                            Игрок с гордым именем Darth Wader (сам знаю что не так пишется, так и надо :) зарегистрировался как Империю!
                                            • +1
                                              Да просто охренеть можно! Восхищяюсь вашим энтузиазмом, целеустремленностью и силой воли.
                                              Новый пост пишите обязательно. Было бы очень интересно почитать что у вас на серверсайде используется, как храните игровые данные, как обрабатываете действия игроков и НПЦ в общих чертах. Если игровой сервер — это «обыкновенное» веб-приложение, то как построен меин-луп в таком случае. В общем, теперь чего-нибудь технического бы:) А я пока пойду полетаю:)
                                              • +1
                                                Спасибо! Если очень интересно, то у меня в блоге есть статья про архитектуру проекта, там чуть больше информации. Ну, и судя по тому, как легко мы выдержали хабраэффект, теперь можно рассказывать об архитектуре без сомнений в её эффективности :)
                                                • +1
                                                  Можно пожалуйста ссылку на блог?
                                                  • 0
                                                    Конечно! На самом деле, она есть у меня в профиле :)
                                                    • +2
                                                      Эээ… Может конечно я плохо смотрю, но в профиле ничего такого нет.
                                                  • 0
                                                    Сколько сейчас всего игроков и активных? И что считаете за активность?
                                                    • 0
                                                      Активных считаем так же как и все остальные в индустрии, используя DAU (Daily Active Users) и MAU (Monthly Active Users) — количество игроков заходивших в игру за выбранный период. Что касается цифр, то за полгода набрали почти 4000 регистраций, а в прошлом месяце было 300 активных игроков. Никакого пиара и покупки трафика, только естественный прирост.
                                                • +1
                                                  Очень круто, буду пробовать играть) Пока что, очень незватает зума карты, приходится зумить браузером, но тогда все элементы уменьшаются.
                                                  • 0
                                                    Делаю сейчас что-то подобное только больше в сторону стратегии, но до вас мне очень далеко.
                                                    p.s. узнаваемый при перелете бекграунд с летящими на тебя звездами…
                                                    • +2
                                                      Отличная игра, я давно ждал чего то подобного. Автор проекта вообще сверхчеловек, снимаю шляпу перед вами. Хотелось бы побольше узнать про графику.
                                                      • 0
                                                        Спасибо! Я даже и не знаю, что вам рассказать про графику, я больше программист чем художник. Задавайте вопросы :)
                                                      • 0
                                                        у меня вопрос к вам, как вы реализовали раскраску корабля?
                                                        это подготовленные сочетания или более сложный механизм?
                                                        да и вообще, с удовольствием почитал бы статьи об трудностях и проблемах, а так же их решениях которые у вас возникли при разработке.
                                                        • +1
                                                          Смотря про какую именно раскраску вы говорите. Если про интерфейс выбора корабля при регистрации, то там просто canvas-магия. Если про изображение кораблей в самой игре, то я использую отдельного демона для генерации статических изображений в игре. Именно этот демон склеивает корабли из десятков слоев в нужном порядке и перекрашивает цветные элементы если нужно. Чуть подробнее про эту проблему и её решение.
                                                        • +1
                                                          Пол-хабра залипло =)
                                                        • 0
                                                          Огромное спасибо! Вдохновляет.
                                                          Может и у меня получится доделать :)
                                                          • 0
                                                            Вам спасибо! Не сдавайтесь :)
                                                          • +3
                                                            Достойный ответ Eve online.
                                                            Достойное продолжение Parkan.
                                                            Отдельный респект за соло-проект.

                                                            Автор, Вы — офигенны!
                                                            • +1
                                                              Спасибо, я старался! Очень рад что любителям космосимов игра пришлась по вкусу :)
                                                            • +1
                                                              Игра затянула, играл до часу ночи :D

                                                              Из замечаний:
                                                              — чат не переносит строки, которые больше ширины окна чата;

                                                              — а можно туториал (да и наверное системные сообщения) складывать в историю «системного чата»? Был момент, когда я прошляпил, что написали в туториале, а опять посмотреть негде. Или может есть где, но не нашёл :)

                                                              — Торговля: в магазинах (те что на планетах) не понял: где всё же цена? Или там отдельно цена продажи-покупки? Если да, то неочевидно, куда смотреть.

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

                                                              Игра получается очень даже неплохой. Автор просто поразил меня: в одиночку пилить такое! Это железная воля и целеустремлённость какая должна быть. Респект!
                                                              • 0
                                                                Спасибо за такой развернутый комментарий, я добавил ваши пожелания в тудулист.

                                                                — чат не переносит строки, которые больше ширины окна чата;

                                                                — Чат в какой-то момент ломается и перестает переносить строки. Если, например, очистить историю, то всё продолжает работать как надо. Осталось определить момент поломки.

                                                                — а можно туториал (да и наверное системные сообщения) складывать в историю «системного чата»? Был момент, когда я прошляпил, что написали в туториале, а опять посмотреть негде. Или может есть где, но не нашёл :)

                                                                — Да, отличная идея! Я тоже часто пропускаю новости от событий. Попробую добавить их в чат.

                                                                — Торговля: в магазинах (те что на планетах) не понял: где всё же цена? Или там отдельно цена продажи-покупки? Если да, то неочевидно, куда смотреть.

                                                                — Это дело привычки. Всегда можно навести на сам товар(в магазине или в трюме) и посмотреть соответствующую цену покупки.

                                                                Постепенно буду решать все эти недочёты, смело пишите, если будут другие вопросы или проблемы.
                                                              • +1
                                                                Жаль так и не нашел руководство новичка, на вопросы в чате ссылают лишь на вики или, в крайнем случае, на фак.
                                                                Проект достойный, но подхода к новым игрокам не оценил, как и действия модераторов чата, которым задавался прямой вопрос.

                                                                Будем ждать улучшения.

                                                                P.S. Сделайте ссылки в чате кликабельными, пожалуйста.
                                                                • 0
                                                                  Руководство пилота на подходе! И, очевидно, стоит переделать обучение. Очень хочу, чтобы новичкам было легко освоится в игре, но как показала практика — это не такая простая задача. Мы сейчас собираем часто задаваемые вопросы и постараемся сделать так, чтобы они был объяснены в новой обучалке.

                                                                  Гейммастера стараются, я не знаю о ком именно вы говорите, но всегда по таким вопросам можно писать на abuse@team.far7.by. Сложно требовать от людей четкого выполнения обязательств, ведь я не плачу им зарплату и они помогают исключительно на добровольных началах.

                                                                  Будем готовить улучшения! :)

                                                                  Кликабельные ссылки в чате — рай для фишинга. Возможно от гейммастеров и друзей можно их делать кликабельными.
                                                                • +1
                                                                  Очень здоровски, пустил слезу по Elite. Я жму вам лапу, в одиночку такое делать − нужно и правда верить в себя. Научусь в это играть − я ваш донат.

                                                                  А учиться придется какое-то время. Не хватает толковой вики, я сто лет в такие игры не играл (танкофилия замучила, проклятая, _беларуский_наркотик_). Трюм чем-то набит, кого-то убил и получил опыта 1000, но куда лететь, где ангары, как узнать, хватит ли топлива, куча опций по экономике − антиматерия, пиратские деньги… Вики пустая. Кое-что есть в ЧаВО, но не исчерпывающе. Почему некоторый лут после обработки напиль лазером испаряется, гад? :) Где заправиться? Как найти вообще планету или станцию? Долелеть до другого сектора − не хватает топлива. В общем, с точки зрения гейм-дизайна новичку не хватает фана, много непонятного. Уверен, что сможете с этим справиться, я буду пристально следить и поигрывать. Спасибо за этот проект.
                                                                  • 0
                                                                    Спасибо! Да, предстоит очень много работы, я стараюсь делать игру как можно более простой (в интерфейсе нет ни одной таблицы). Но сложность — это обратная сторона всех космосимов. Будем улучшать обучение и добавлять море справки.

                                                                    Следите за обновлениями в инфо центре или подписывайтесь на наши группы в любимых соц. сетях: VK, facebook, twitter.

                                                                    Ещё раз спасибо за позитивный комментарий!
                                                                  • 0
                                                                    Было бы круто если в магазине можно было бы покупать сразу по 10, например зажав шифт
                                                                    • 0
                                                                      Вы хотите именно по 10 или покупку партии товаров? Попробуйте двойной клик по товару в магазине.
                                                                      • –1
                                                                        Круто, спасибо! ещё бы в интерфейсе было про это написано )
                                                                    • +1
                                                                      Отличная новость! Часто вспоминал о вашем проекте еще со времен мозиловского конкурса, примерно в то время еще удалось немного потрогать прототип изнутри, потом периодически заходил и расстраивался, что ничего не работало, искренне рад, что вы довели дело до реальной рабочей версии, с удовольствием потестирую игру и обязательно отпишусь на форуме по результатам. Удачи!
                                                                      • 0
                                                                        Просто отличная реализация, вы безумно молодец.

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