Главная > AGP Game Platform, MMOG, MMORPG игры, веб-обзоры, Разное, Стартапы > WarAliance Game — постмортема проекта он-лайновой браузерной стратегии, часть 1.

WarAliance Game — постмортема проекта он-лайновой браузерной стратегии, часть 1.

1 января 2009

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

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

Начну с далекого. Последние четыре года (гм.. а может и больше) я плотно работаю над различными проектами в области игровой индустрии, а конкретнее, занимаюсь проектированием и разработкой браузерных игр. Проработав год главным администратором, совмещая в себе и геймдизайнера и техподдержку и комьюнити-менеджера, в отличном проекте SanCity.ru, в один прекрасный момент я ушел оттуда на вольные хлеба. Сначала вместе с несколькими друзьями мы усиленно проектировали и просто мечтали о собственном игровом проекте, однако по ряду причин дальше концепта и первой демки карты и перемещения (кстати, и сейчас реализованное там достаточно уникально для современных игр, думаю, об этом как то расскажу отдельно) мы не продвинулись. Впрочем, думаю, на этом этапе застряло множество команд, вне зависимости от опыта или амбиций. Позже, играя активно в стратегию OGame, мы ее буквально разобрали по косточкам, всю игровую механику, социальную составляющую и т.п., в общем - набирались опыта в анализе успешных проектов (рассматривали все аналогичные игры космической темы).

И на этой стадии появилась и оформилась идея собственного проекта, названного для начала WarAliance. Основной упор мы делали на тактику и стратегию, а также дипломатию и экономику. По сути, очень хотелось сделать расширенный и продвинутый клон OGame, ориентированный на совместную игру (развитые социальные элементы), и серьезно проработанной системой дипломатии и экономики. Нашелся и заинтересованный инвестор, которому приглянулся проект.

Общие сведения:

  • Кодовое название: WarAliance
  • Жанр: браузерная космо-стратегия, расширенный аналог OGame, StarQuake и др.
  • Технологии
    • Сервер: PHP 5, TemplateLite, MySQL (mysqli), ezComponents (кеширование)
    • Клиент: Dojo Toolkit (компоненты стораджа, векторной графики, Ajax, JSON, валидация данных) ExtJS 1.1.1 (интерфейс, система обновления, валидация данных) + собственные скрипты.
  • Версии: макет, альфа-версия серверного движка, альфа-версия с интерфейсом на Dojo/Dijit, две бета-версии с частично игровым функционалом на базе ExtJS.
  • Время разработки: один разработчик фул-тайм, проектирование и разработка, а также геймдизайн - 7 месяцев, первый вариант движка - двое разработчиков в течении двух месяцев, дизайнер на аутсорсинге. Проект остановлен по организационным причинам на стадии второй бета-версии.

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

engine_first_scheme

Из первых схем предполагаемого ядра игры

С этого первого проекта и пошло название для движка, AGPsource, или Advanced Game Platform, open source.  Это название, кстати, я сохранил и буду использовать в следующих проектах. Сначала мы не нашли достаточно подходящих фреймворков (ZF тогда только начал разрабатываться, а других интересных не было), поэтому наша библиотека классов скрывала за собой несколько библиотек, реализующих функционал.

ship_construct_pre_alpha

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

Первоначально в дополнение к движку была придумана целая схема клиента, в который выносилась и графика и некоторые расчеты. Тогда ничего ещё не было слышно об Adobe AIR или Appcelerator Titanium, но мы уже чертили структурные схемы такого Rich Game Client-а и думали над тем, как это может преобразить вообще игровой процесс. Теперь, это, конечно, легко реализуется на основе того же Adobe AIR, тогда же меня вдохновлял интереснейший проект Emma 3D (к сожалению, заброшенный). И хоть эти планы остались лишь на бумаге, я реализовал в проекте одну из фич - для бета-версии игры был разработан специальный плагин для Mozilla Firefox, который содержал в себе наиболее востребованные рисунки и другие файлы и после его установки они уже запрашивались из плагина, а не напрямую с сервера, чем мы достигли серьезного улучшения быстродействия. Версия Lite плагина содержала только изображения карт космоса, полная версия плагина должна была кешировать не только всю графику из игры, но и часть скриптов, так как мы использовали AJAX "на всю катушку", и первоначальная загрузка была достаточно продолжительной.

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

Кстати, именно на этом проекте я начал знакомство с UML - купленная книга, которую я читал для ознакомления, кроме справочника по языку UML от его создателей (если я верно помню, это их бандой пятерых называли), лежит и сейчас недалеко. Для начала осваивали инструментарий, лучшим и наиболее легким оказался замечательный редактор ArgoUML, который, кстати, умеет создавать и РНР-код по диаграммам классов. Позже, перейдя на единую среду разработки на базе Eclipse, мы нашли и модуль, интегрирующий его в IDE. С того времени сохранились первые документы, модели, описывающие разные аспекты мира, в частности, модель среды, галактик и некоторые другие. Далее я приведу лишь две, для примера.

global_object

models_enveropment1

Следующим этапом, который дался нелегко - ведь шутка ли, после нескольких  месяцев работы полностью выкинуть все наработки и начать почти с чистого листа (ну я имею ввиду технологическую часть) - мы перешли на упрощенную схему приложения, оставив только несколько библиотек, выкинув даже слой абстракции доступа к базе данных, взяв взамен простой и быстрый mysqli. Теперь у нас каждая игровая команда или действие было определено в своем файле, вместе с которым был и шаблон (или напрямую вывод в браузер, если это JSON-даные). Структурировалось это при помощи стандартов имен файлов - например, если окончание файла _json, то этот код отвечает за формирования каких-то данных в JSON-формате, например, для построения частей интерфейса. Остальные использовали легкий шаблонизатор, по синтаксису аналогичный Smarty, TemplateLite, кстати, зарекомендовал себя отличным образом и теперь применяется почти во всех проектах.

Интерфейсная часть это отдельный разговор. Первоначально планировалось использовать фреймворк Dojo Toolkit, так как на тот момент он был самым мощным и технологически продвинутым. И вторая версия игры вышла на нем, но его система виджетов на тот момент была слишком несовершенна (мы использовали версию 0.4.3), поэтому я бы не сказал, что вышло красиво. Но именно тогда я достаточно хорошо изучил внутренности проекта Dojo и стал его поклонником. Позже, пока произошел серьезный редизайн их архитектуры и релизилась ветка 0.9, мы уже перешли на другую библиотеку. Однако у Dojo на то время было серьезное преимущество, система стораджа, правда пришлось долго ждать, пока ее перепишут под 0.9 версию. Я и далее использовал эту часть Dojo Toolkit, планируя использовать и другие невизуальные компоненты, в частности, у нас вся система взаимодействия с сервером (тот самый AJAX) была построена вокруг аналогичной подсистемы Dojo.io. Однако в процессе работы я отметил серьезное снижение производительности  в случае построения интерфейса - мы использовали компоненты дерева, кнопки, всплывающие подсказки и некоторые другие, а подсистема предзагрузки Dojo генерировало много запросов при старте для загрузки отдельных компонентов. Это и в последствии стало серьезной проблемой, так что я даже исследовал возможности объединения всех файлов в один.

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

Первым серьезным и сложнейшим элементом игры стала карта мира. Очень хотелось сделать красивый мир, при этом большой и масштабный. Для этого была придумана целая специальная система координат, по которой и строилась карта. На общей карте мы выделили галактики, которые имели свои названия (например, m33), далее каждая галактика делилась на сектора, который исчислялись A...D и 1..4, таким образом галактика делилась на 16 секторов, которые, в свою очередь, делились на квадраты,  от 0 до 63. Каждый квадрат открывал свою карту, и в нем могло размещаться от 0 до 4 - 5 солнечных систем. Переходя в карту системы, мы уже получали стандартную карты - если системы в квадрате могли быть размещены произвольно, то карта самой системы была всегда фиксированной (для упрощения). Полные координаты любой точки содержали в себе весь путь, таким образом все действия в игре, связанные с пространством, оперировали полным кодом пути к объекту. Внешне это выглядело еще интереснее, ведь AJAX и ExtJS позволил реализовать все с эффектами перехода, все карты открывались в отдельный вкладках-табах, везде были реализованы контекстные меню, а сам функционал работы с картой был вынесен в отдельный игровой объект, названный GPS - Galactic Position system, где игроки могли себе записывать в записную книжку координаты, позже оперируя, например, при атаке, только ими, не открывая всей карты.

wa_gps_1

Была реализована и история переходов, по сути полный аналог браузера, только в специфическом мире. Кстати, первоначально мы использовали очень крутую я бы сказал, фишку Dojo - рисование векторной графики, прорисовывая таким образом некоторые обозначения на карте, привязав туда реакции на события мыши, которые обрабатывались уже ExtJS. Кстати, первоначально я думал вообще хранить всю карту в виде координат, рисуя ее всю при помощи Dojo.gfx в векторном виде, однако потом оказалось, что для рисования с необходимой детализацией не хватает скорости, а времени на разработку полноценной архитектуры с совмещенным рендером графики и вектора у меня уже не было. Да и браузеры это сложно переваривали. Но опыт работы был накоплен бесценный!

wa_gmap_1Кстати, в карте реализовано интересное масштабирование - для фонов, относительно которых позиционировались все элементы, было взято реальное изображение галактики из архивов NASA, при чём, рисунок был очень большого разрешения. Далее в Photoshop-е при помощи специального фильтра для масштабирования мы еще увеличили изображение (понятно, что с потерей качества). Таким образом мы получили огромную карту мира, которую потом и разрезали на части, ставшие основной для карт отдельный участков. То есть переходя в сектор или глубже, вы видите именно тот участок пространства, что виден на общей карте, только увеличенный. В конце солнечные системы также позиционировались в тех местах карты, где были похожие объекты. Общий размер галактики  - 19200 х 14400 точек (это с детализацией то сектора, для отдельных солнечных систем использовались отдельные рисунки фона).

wa_gmap_2

wa_gmap_3

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

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

P.P.S. Этот проект не был бы без помощи и участия нескольких замечательных людей, которым я хочу выразить личную благодарность: Олег, Дима (gabby), Богдан (lizard) и Александр (White).

  1. 2 января 2009 в 00:29 | #1

    Очень интересная статья, читал с открытым ртом… Нравиться подход к проекту, и чувствуется, что автор любит свою будущую игру… Как раз сегодня смотрел видео с интервью разработчиков игры Fable 2, они так же все рассказывали, на эмоциях с любовью к своему детищу, и так же как и после просмотра интервью, после прочтения статьи хочется играть в игру, и переживать все что переживает разработчик, при ее создании. Большое спасибо, жду игру, и обязательно буду играть…

  2. 2 января 2009 в 02:48 | #2

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

  3. 2 января 2009 в 06:19 | #3

    Очень интересно было почитать.

    теперь бы глянуть на игру (я урл не нахожу). Ещё интересно было бы узнать, что кроется за фразой «нашёлся заинтересованный инвестор».

    • 2 января 2009 в 13:41 | #4

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

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

  4. 2 января 2009 в 09:09 | #5

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

    • 2 января 2009 в 13:39 | #6

      ну OGame русский довольно небольшой, а вот немецкая, французкая и восточные — очень даже большие. Там около двух миллионов игроков. Да, основной источник дохода — реклама и продажа платных услуг. Огейм в этом плане достаточно недавно. Ранее был только офицерский аккаунт, он не влияет на игру, а только делает ее удобнее и быстрее. Сейчас ввели продажи темной материи, и она уже влияет на баланс игры, хотя сама игра строго детерминирована и имеет полную математическую модель, то есть, схема монетизации, влияющая на игру, там не предусмотрена заранее. Мы это учитывали изначально, и монетизация планировалась за счет рекламы, премиум-услуг и продаж внутриигровых ресурсов и объектов или прав на их владение/использование.

  5. 2 января 2009 в 17:42 | #7

    > …имеет полную математическую модель, то есть, схема
    > монетизации, влияющая на игру, там не
    > предусмотрена заранее. Мы это учитывали изначально…

    Вы хотите сказать, что захоти OGame продавать ресурсы за деньги — это сломает им внутри мировую экономику, а в вашем случае продажа объектов и ресурсов не ломала баланс?

    Любопытно, как такое может быть? Игрок с деньгами просто может всё купить и начать душить мелких…

  6. 2 января 2009 в 17:56 | #8

    Игорь, да, примерно так. Это, по сути, два класса игр — у одних игровая механика замкнута и имеет полную модель, поэтому такие игры могут монетизироваться только через подписку и премиум-функции, которые не затрагивают игровые элементы (например, игра на более мощных серверах, отсутствие рекламы и т.д.). Другие игры изначально проектируются так, что возможно внешнее вмешательство в баланс и оно непрогнозируемое, то есть экономика в игре открытая.
    Это только теоретически такое есть. В реальности, количество денег также ограничено, сами объекты, доступные для покупки, также должны контролироваться, их параметры и количество, а в идеале, и то место, откуда берутся, чтобы ввод сотни баксов и покупка 100 звезд смерти не означало, что админ в базе просто поменяет циферки. Это уже тема отдельного большого разговора и исследования 🙂

  7. 2 января 2009 в 18:00 | #9

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

  8. 3 января 2009 в 05:38 | #10

    Очень занимательная статья, сам планировал написать подобное описание своего опыта, да никак времени не найду. Хотелось бы почитать более подробно по некоторым архитектурным и техническим аспектам проекта, например, про реализацию объектов в игре и их взаимодействие. Я надеюсь как-нибудь увидеть твои наработки, можно даже в Open Source (сам в ближайшее время собираюсь выложить некоторые наработки, но еще не определился с лицензией).

    ЗЫ Приятно было с тобой работать со времен старого доброго Сансити, надеюсь что еще выпадет случай поработать вместе!

  9. 3 января 2009 в 17:34 | #11

    Fenix, приветствую, какие люди! Рад, что читаешь! Я тоже твой кусочек персонально интернета почитываю 🙂
    Подробнее по техническим аспектам.. ну можно, правда некоторые вещи сейчас мне кажутся малось смешными, всеже давно это было, был я зеленый 🙂 Но в следующей части допишу общую историю, и может потом разберу некоторые моменты, которые удачные вышли. А про объекты — мы отказались от идеии инкапсуляции игровых обьектов в универсальные РНР-обьекты (с смысле, что наследуются от одного класса, а фабрика в момент создания загружает данные конкретного обьекта, такое себе ОРМ для бедных).

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

    Взаимно, время СанСити было чудестным! Ну я дальше по играм, так что если есть предложения — обращайся, я через две недели наконец свободной птицей стану, если кое-каких г.. сложных во всех аспектах людей скину со своей бедной шеи 🙂

  10. 9 января 2009 в 15:57 | #12

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

    Единственно что смущает в вашем рассказе — вы на старте очень усложнили. Это и заметно усложнит разработку, а также начало игры ( что в подобных играх пожалуй одно из самых главных вещей ).

    В любом случае вам успехов, а я пока иду читать втору часть

  11. 9 января 2009 в 16:23 | #13

    на эту тему очень рекомендую почитать getting real

  12. 9 января 2009 в 16:33 | #14

    Вот к примеру момент упрощения — зачем делать вкладки, если в браузере и так есть вкладки.

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

  13. 9 января 2009 в 19:20 | #15

    Alexander Lyabah — отвечу на все комментарии сразу 🙂

    1. А что именно усложнили? вроде хотели наоборот, упростить все 🙂 а вышло, конечно, как всегда 🙂 А в каком проекте вы заняты, если не секрет? Может в привате пообщаемся?

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

    Плагин, это уже так, фича была, на нем не останавливались, просто в то время был единственный способ все кардинально ускорить 🙂

  14. 10 января 2009 в 00:59 | #16

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

    1) минус хоткеи браузеров

    2) минус рабочее пространство занимаемое еще одним слоем вкладок окромя уже браузерных

  15. 10 января 2009 в 01:00 | #17

    А по поводу ускарения — ускорять надо, когда медленно 🙂

  16. 10 января 2009 в 01:18 | #18

    простите, вы о каких хоткеях то? Снова спрашиваю — вы предлагаете открывать все в новых окнах браузера, или полностью перегружать текущую страницу? Игра — это ВЕБ-ПРИЛОЖЕНИЕ, и у нее интерфейс соответствующий, так, чтобы ни для каких функций не надо было покидать окна и все находилось на одной страниц. Кроме того, все взаимосвязано, а как прикажете изменять страницу с другой, открытой в другом окне?

    Да, надо, а я что сказал? Это и было придумано для ускорения того, что было медленным, плюс — как проба технологии для дальнейшего развития

  17. 11 января 2009 в 21:37 | #19

    «изменять страницу с другой, открытой в другом окне»

    научить?

  18. 12 января 2009 в 00:10 | #20

    зачем? научить строить правильные, простые и человеческие интерфейсы? 😉

  19. 12 января 2009 в 00:41 | #21

    > научить строить правильные, простые и человеческие интерфейсы?

    а это реально? тогда научить…

    • 12 января 2009 в 14:43 | #22

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

  20. 12 января 2009 в 16:26 | #23

    аб чём же я и говорю…

    • 12 января 2009 в 22:41 | #24

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

Комментирование отключено.
Developers.org.ua