Компания
149,40
рейтинг
2 июля 2014 в 11:58

Разработка → GUI в игре World of Tanks. Часть первая: эволюция интерфейсов игры

image

Сегодня мы проведем экскурс в историю развития Graphical User Interface (GUI) в игре World of Tanks.

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

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

Первые шаги: использование инструментов BigWorld

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

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

Как это работало с точки зрения технической реализации:

  • декларативно в XML описывалась структура и визуальная часть GUI;
  • общий layout для крупной вьюхи — стили самой вьюхи и набор основных блоков, ее составлявших, описанный в XML;
  • каждый из блоков описан в отдельном XML с указанием используемых стилей и компонентов. Для компонентов задавались их настройки (именование, локализационные сообщения, ссылки на стили);
  • стили описывались в отдельных XML-файлах, где задавались размеры, позиции, используемые текстуры, шрифты, цвета, z-order и бог знает что еще;
  • при старте клиента все эти XML-файлы грузились в Python и парсились, после чего начинался процесс создания интерфейсов, их инициализации и подключения к игровой логике.

Вот пример, выдранный из недр SVN-проекта:

hangar.xml — описание блоков UI в ангаре:

<hangar>
    <styles>
        <style>window</style>
        <style>hangar:window</style>
    </styles>
    <childs>
        <AccountBlock>
            <name>account_info</name>
            <import> components/account </import>
        </AccountBlock>
        <Fitting>
            <name>fitting</name>
            <import> components/fitting </import>
        </Fitting>
...
    </childs>
</hangar>

account.xml — описание блока с информацией об аккаунте:

<account>
    <styles>
        <style>hangar:account_info</style>
    </styles>
    <childs>
        <TextLabel>
            <name>account_name</name>
            <text></text>
            <textElideMode>ElideRight</textElideMode>
            <styles>
                <style>hangar:account_name</style>
            </styles>
            <toolTip>
                <format>#tips:hangar/account_name</format>
            </toolTip>
        </TextLabel>
        <TextLabel>
            <name>account_exp</name>
            <text>#menu:hangar/account_info/experience</text>
            <styles>
                <style>hangar:account_exp</style>
            </styles>
            <toolTip>
                <format>#tips:hangar/account_exp</format>
            </toolTip>
        </TextLabel>
...
    </childs>
</account>

styles/common.xml — описание стилей для общих компонентов:

<style>
	<window>
		<bgcolor> 200 200 200 255</bgcolor>
		<overlaycolor> 255 255 255 255 </overlaycolor>
		<border>
			<texture>gui/maps/window_border.tga</texture>
			<size> 5 </size>
		</border>
		<focus>
			<bgcolor> 255 255 255 255</bgcolor>
		</focus>
	</window>
…
</style>

styles/hangar.xml — описание стилей для компонентов в ангаре:

<style>
	<window>
		<color>0 0 0 255</color>
		<bgcolor>255 255 255 255</bgcolor>
	</window>
	<account_info>
		<position><x>10</x><y>10</y><z>0.9</z></position>
		<height>32</height>
		<bgcolor>100 100 100 255</bgcolor>
		<color>200 200 200 255</color>
	</account_info>
	<account_name>
		<height>100%</height>
		<textAlign>LEFT</textAlign>
		<position><x>10</x></position>
	</account_name>
	<account_exp>
		<height>100%</height>
		<horizontalAnchor>RIGHT</horizontalAnchor>
		<font>default_smaller.font</font>
	</account_exp>
…
</style>

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

  • работа с многоуровневыми XML сложна в понимании и приводила к большому количеству ошибок, которые тяжело локализовать и исправить (например, описки в именовании компонентов и путях к текстурам, нарушение структуры XML-документа);
  • отсутствие визуальной среды разработки. Единственная возможность получения визуального результата — запуск клиента игры и воссоздание необходимого окружения для просмотра нужного интерфейса. Представить, как все это будет выглядеть, посмотрев на XML, было просто нереально;
  • плохая производительность при обработке пользовательского ввода (особенно это было заметно в чате);
  • небольшой набор компонентов из коробки и сложность добавления новых компонентов;
  • высокая вовлеченность программистов в процесс создания и внесения изменений (даже минимальных) в GUI;
  • отсутствие инструмента для создания анимации.

Все эти минусы приводили к созданию интерфейсов в стиле Programmer Art. По схематическому наброску программисты делали layout в XML, и только потом художники создавали необходимые текстуры и передавали все обратно программистам для финальной настройки и напилинга. Вот пример такого интерфейса (на фото — рабочее место руководителя проекта Александра Шиляева с запущенным танковым клиентом на стадии закрытого альфа-теста):

image

Одна из первых версий боевого интерфейса:

image

И чуть более поздняя его версия:

image

Очень быстро стало понятно, что такой подход — тупиковый. Был проведен анализ рынка middleware-решений. Как оказалось, мейнстримом в разработке GUI на тот момент было решение от Scaleform: практически все AAA-проекты использовали его в разработке, и результаты выглядели очень привлекательно.

Предрелизный период: переход на Scaleform

Scaleform предлагал использовать Flash для разработки GUI. По сути, решение состояло из трех частей:

  • кастомной реализации Flash Player, которую можно было встроить в игровой клиент;
  • набора инструментов для экспорта SWF в специализированный формат;
  • библиотеки компонентов CLIK — набора стандартных UI-компонентов и классов, позволявших ускорить разработку.

Осенью 2009 года была куплена лицензия, и начался новый этап развития GUI в проекте. На первых порах все выглядело многообещающе: процесс разработки Flash был отработан годами, а разработчиков, знавших и любивших этот процесс, было очень много. Однако оказалось, что ситуация на рынке труда в Беларуси на тот момент складывалась так, что большинство Flash-разработчиков уже сидело на интересных и «жирных» проектах, и быстро найти и привлечь качественные кадры со стороны было сложно.

По этой причине в срочном порядке учить Flash начал весь отдел GUI (до этого они делали php, Java и занимались веб-разработкой). Учились и начинали работу на ActionScript 2, так как Scaleform на тот момент еще не поддерживал ActionScript 3. Вот что получалось на первых порах:

image

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

Эскиз:

image

Реализация:

image

В феврале 2010 года началось закрытое бета-тестирование проекта с уже обновленным ангаром. А вот боевой интерфейс все еще был на Python:

image

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

Один из рабочих эскизов нового боевого интерфейса:

image

Реализация боевого интерфейса на Scaleform:

image

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

Помимо этого, использование Scaleform открыло возможности по кастомизации интерфейсов. Любой школьник, умеющий минимально работать с Flash, мог декомпилировать SWF из дистрибутива игры и на свое усмотрение менять все — от используемых изображений и шрифтов, до логики работы кода. Появились моды, заменявшие прицелы на историчные, «куклу» танка на более брутальную или, наоборот, минималистичную. Можно было найти моды для любой части интерфейса в бою. Были моды и для ангара: часы, калькуляторы, многоуровневая карусель и т. д.

Руководство Wargaming несколько раз меняло свое отношение к модам. Сначала, поскольку это были единичные случаи, их просто игнорировали. Со временем и увеличением их числа и популярности — начали присматриваться и поняли, что некоторые из модов могут дать игровое преимущество использующему их игроку. Разработку стали вести по принципу «клиент в руках врага». Это, конечно, не значит, что игроки — наши враги. Нашей задачей стало максимально обезопасить игроков от чужих попыток получить игровое преимущество.

Ситуация на рынке модов стала тщательно мониториться. Теперь в случае обнаружения опасных или изменяющих игровой баланс модов мы оперативно реагируем и закрываем возможность их использования, меняя логику работы клиента. В последнее несколько лет изготовление честных модов поддерживается. По сути, это user generated content — игроки делают эти моды для себя и других игроков, что повышает ценность нашего продукта.

Но вернемся к истории. Работа со Scaleform очень освежила GUI и дала толчок к его развитию в проекте. Функционал разрастался и усложнялся за время прохождения закрытой и открытой беты и выхода проекта в релиз в августе 2010. Добавлялись новые фичи, дорабатывались и наворачивались уже существующие. Менялся дизайн, пробовались разные подходы к представлению информации в игре и организации взаимодействия с игроком.

Варианты реализации фильтра техники:



Изменения миникарты:

image

Пострелиз: проблемы роста и пути их решений

С ростом количества кода и ассетов стали выползать различные косяки.

Маркетинг Scaleform обгонял реальную разработку продукта и, как оказалось, многие из заявленных фич или работали не так, как хотелось, или сильно били по производительности, или вообще были в зачаточном состоянии. Была проделана огромная работа по улучшению производительности Scaleform-плеера, причем как с нашей стороны, так и со стороны разработчиков технологии.

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

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

Также существовала проблема с качеством и консистентностью кода и использованием различных паттернов и стилей программирования. Так получилось потому, что разработку на Flash в проекте начинали люди, которые не были профессиональными Flash-разработчиками. Они учили Flash «в бою», и у каждого был свой бэкграунд (C++, php, Java). Получалось так, что при работе в разных частях проекта нужно было переключаться с одного подхода на другой.

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

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

К тому моменту, когда все эти проблемы стали сильно тормозить разработку, Scaleform уже довел поддержку ActionScript 3 до приемлемого уровня. У нас вызревал план перевести интерфейсы ангара на новую версию языка и параллельно провести реструктуризацию проекта и создать свой framework, позволяющий быстро и по определенным правилам добавлять новую функциональность в проект.

Работы по подготовке перехода на ActionScript 3 начались в конце 2012 года. Как мы решали стоящие перед нами проблемы, и какие задачи ставили.

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

Проблема: коммуникация Flash <-> Python.
Решение: переход на использование Direct Access API. Этот механизм позволяет передавать сложные объекты данных при помощи автоматической сериализации/десериализации их на уровне C++. Также использование этого подхода увеличивает производительность за счет того, что ссылки на Flash-объекты можно передавать в Python и производить манипуляции над ними в Python напрямую, вместо поиска нужного объекта во Flash по полному пути к нему при каждой необходимости передачи данных.

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

Проблема: автоматизация сборки и добавления нового функционала в проект.
Решение: для сборки мы используем Maven. Проект был реструктурирован и разбит на более логичные подпроекты и подсистемы. Для автоматизации добавления нового функционала мы использовали YAML в качестве языка для описания интерфейсов взаимодействия Flash и Python. На базе YAML автоматически при сборке генерируется код и создаются необходимые сущности — как во Flash, так и в Python. Все, что остается сделать, это написать код и определить точку входа для запуска новой функциональности.

Так, в сентябре 2013 с выходом версии 8.8 лобби игры было полностью переделано на ActionScript 3.

Вот и все на сегодня. Детали о структуре проекта и планах на будущее читайте в следующей статье.
Автор: @Dichkovsky

Комментарии (98)

  • +17
    > Scaleform предлагал использовать Flash для разработки GUI.
    Ага, и в итоге выходит, что в некоторых играх меню работает гораздо медленнее (мышь заметно лагает), чем сама игра.
    • +7
      Тут, как и с любой технологией, многое зависит от конкретной имплементации и «прямоты» рук использующего. В целом — Scaleform хорош, хотя и со своими минусами. Главный его плюс — возможность использовать опыт, накопленный разработчиками Flash-платформы и быстро и относительно дешево получать результат, который другими средствами получить было бы намного дороже. Также в пользу Scaleform говорит то, что его включили в стандартный пакет UDK
  • +7
    Flash умер, да здравствует Flash!
  • +22
    Вот вы крабы
    • +6
      Это злорадство или восхищение?
  • 0
    Осенью 2009 года была куплена лицензия, и начался новый этап развития GUI в проекте


    Мне, как человеку не настолько далекому от Flash-технологий стало интересно какие лицензионные соглашения по использованию Scaleform на компьютере клиента?
    • +1
      Не совсем понятен вопрос. Можете уточнить, что именно Вас интересует?
      • +1
        Меня интересует, какой Fash Player используется для проигрывания swf-роликов при отрисовки графики на клиентской части и какие лицензионные соглашения для этого нужны?

        P.S Использую Shockwave Flash Player при интеграции между графической и системной части для встраиваемых графических систем, но к сожалению ограничен только 6 его версией.
        • +2
          В клиенте WoT используется Scaleform Player. Это альтернативная версия Flash Player, разработанная Scaleform. Скорее всего, чтобы попробовать Scaleform для собственных разработок, есть 2 варианта:
          — Скачать UDK (Scaleform входит в стандартный пакет поставки и предоставляется бесплатно)
          — Зарегистрироваться на сайте Scaleform и запросить триал-версию для нужной платформы. Для production использования нужно приобретать лицензию на каждый продукт для каждой платформы отдельно
          • +1
            Платформа Windows XP Embedded.

            Спасибо, за информацию, хотя и сомневаюсь, что начальство пойдет на развитие новых технологий при общей тенденции сокращения расходов на разработку…

            Scaleform который входит в стандартный пакет UDK тоже нужно покупать?
            • 0
              Scaleform который входит в стандартный пакет UDK тоже нужно покупать?

              Это лучше уточнить на их сайте. Скорее всего, для выпуска коммерческого продукта нужно будет покупать лицензию от Unreal, и она уже будет включать права на использование Scaleform
            • 0
              Посмотрел цену на официальном сайте бессрочная лицензия на одного человека Scaleform Unity Plug in — PC edition стоит 295$. Но не до конца понятно с лицензией Scaleform Player на компьютере клиента.
              • 0
                В общем нужно попробовать промониторить эту ситуацию, так как считаю что 2D и 2.5D идеально подходят не только для сознания интерфейсной части игры, но и для реализации графической части экранов встраиваемых систем.
  • –21
    На Хабр пришел Отдел Двигания Кнопки? :)
    Ну, после анонса в понюшне сомов то накидают. За ангарный интерфейс.
  • +6
    Как сделана игра для iOS? Буду ждать след статьи. Интересно, сменили ли движок на что-то еще?
    • +1
      WoT Blitz — это отдельный проект на собственном движке, из общего с PC версией — только сеть. UI соответсвенно тоже кастомный.
  • +9
    И в итоге в ангаре ноутбук греется в 2 раза больше, чем в бою. Вот тебе и Flash.
    • +2
      По нашим замерам отрисовка GUI как в ангаре, так и в бою требует порядка 10% от общего времени рендеренга кадра. За просадкой производительности и их причинами у нас следят очень ревностно. Объяснить то, что греется в ангаре сильнее, чем в бою, можно тем, что в ангаре выше FPS
      • +5
        За просадкой производительности и их причинами у нас следят очень ревностно

        … особенно это было заметно в 0.9.0, да…
      • 0
        Я конечно рад за FPS в ангаре, но лучше бы следили за ухудшением FPS в бою, т к с последними патчами пришлось вообще перейти на стандартную графику из-за тормозов.
      • +4
        Ревностно? У вас реально прикольная игра, но оптимизирована она чуть менее, чем никак. У меня на core i5 4гц, gtx 670 на полной графике фпс проседает до 30. При этом графика не смотря на улучшение в 0.9, отстает от мейнстрима минимум года на 2. При этом минимальная графика может просесть на какой нибудь карте с деревтями в снайперском режиме кадров до 40-а нефиг делать. Кстати, вот эти ваши ужасные деревья очень тормозят в снайперском режиме, особенно когда становятся полупрозрачными. Зная, какие красоты может переварить gtx670 и не подавиться (fc3, bf4), меня просто обескураживает фпс в танках.

        Еще у вас очень странные, 1-секундные тормоза в начале боя имеются имеются, когда на карте происходят первые выстрелы. Ощущение, будто в момент попадания снаряда, всякие ресурсы начинают только загружаться с жесткого диска. Проблема решается переносом игры на ССД-диск, но весит она 25 гигов.
        • 0
          Точно не уверен, но предполагаю, что как минимум соответсвующие звуки грузятся при первом использовании.
          • +1
            О том я и написал. Это ведь не правильно, не для того люди 8 гиг оперативы берут.
        • 0
          По существу полностью согласен, разве что не с

          > весит она 25 гигов

          Контент папки Updates можно грохнуть, будет поменьше.
          • 0
            Контент папки updates нужен для первоначальной установки.
      • 0
        В ангаре ФПС залочен на 60(максимум), ув. сотрудник кровавой картошки, стыдно такие вещи не знать.
        А связь между нагревом и фпс-ом — обратная, чем больше нагрузки на видеокарту, тем больше она греется, а фпс с может начать и падать, если видеокарта не справляется, например.
      • 0
        Особенно в новргоднем ангаре. У меня куллер, на видео карте, крутился быстрее чем в бою.
  • +4
    Для WoT Blitz (iOS) также использовался Scaleform? Как с производительностью?
    • 0
      Нет, UI свой, на плюсах. Учитывая, что Scaleform на PC съедает 10%, на iOS было бы все 50%.
  • 0
    Я вот не понимал эту моду на flash интерфейсы в играх. Логично было бы использовать CSS/HTML ну или Qt в котором так же есть эти подходы.
    Ну и честно говоря я за быстроту и чистый С++ (тогда нету проблем с Linux, iOS, Android). Как интересно работает GUI в играх Blizzard?

    PS мне нравилась guichan. но это конечно максимум для инди подошло бы… с другой стороны он простой как пробка и легко расширить.
    • +5
      Интерфейс на flash сделать дешевле и быстрее: чем на «чистом C++». Непосредственно в случае с WoT, в Минске не так и много C++ программистов, а тех, кого получилось нанять, можно направить на разработку других частей игры. Ну а CSS/HTML для интерфейсов не то чтобы удобно, как только появляется задача сделать что-либо сложнее статичного меню.
      Производительностью можно и пожертвовать в разумных пределах в пользу более скорого выхода версий и, как следствие, расширения функционала самого продукта. Можно ругать разработчиков, менеджеров, издателей, но это ничего не изменит. Пользователи (то есть мы), куда охотнее платят за новый продукт, чем за идеально работающий.
      • 0
        Правильно я понимаю, что если есть работники и деньги то лучше всё же C++?
        • 0
          Ну, интерфейс с одинаковым функционалом на C++ будет работать быстрее чем на Flash, это вроде как никто и не отрицает. Но делать его дольше и, соответственно, дороже.
          • 0
            на C++ будет работать быстрее чем на Flash


            Давайте все же уясним одну деталь. Scaleform это не Adobe Flash Player. Это совершенно иной метод запуска swf файла. В отличии от Adobe Flash Player — у Autodesk работает их Scaleform многопоточно (код) и абсолютно всё отрисовывается на GPU, а не CPU. От SWF там только формат файла и используют его как контейнер. А все мозги там на C++ и так реализованы и работает Scaleform там, где никогда небыло Flash Player. PS4 тот же…
        • 0
          Что значит лучше C++? Вы представляете себе сложность полноценного GUI фреймворка?
          В чем вы будете собирать интерфейс? В текстовом редакторе на XML?
          Тогда как со Scaleform у вас есть все* возможности Flash IDE.

          Именно поэтому во многих AAA играх интерфейс на нём. А уж у них есть деньги и люди.
          • 0
            Ну не вижу проблем в сборке интерфейса руками. (в последнее время как правило HTML/CSS/JS занимаюсь)
            Кроме того я хорошо знаком с qt/gtk и вроде графические инструменты по компоновке элементов были вполне себе удобными.

            К слову какой получается процент ААА игр использует Flash?
            • +1
              Не берусь отвечать какой процент игр использует Scaleform (правильнее все-таки говорить так, чем «использует Flash»).

              Игры это не обычные десктопные приложения, где можно по формам кнопочек накидать и колбэки прицепить. В играх очень много красивого анимированного динамического интерфейса. Никто из GUI фреймворков и близко не может подойти к возможностям анимации Flash IDE и динамичности при использовании кода.
              • 0
                Вы сильно недооцениваете современные GUI фреймворки, в том числе в плане анимации и т.д.
                IDE как правило такое не поддерживают но вот в коде такое реализуется.

                www.youtube.com/watch?v=vhWS_bN-T3k
                • 0
                  Вы сильно недооцениваете UI флэш сайтов еще 10летней давности.
                  Если вы про интерфейсы со второй минуты этого видео, то боже мой они ужасно убогие. Скорее всего опять делались программистами.
                  Вы посмотрите флэш сайты с того же FWA или интерфейсы хотя бы в том же Watch Dogs или Remember Me.
                  И задайте себе вопрос как что-то подобное сделать в разумные сроки.
                  • 0
                    Watch Dogs — так там flash и не используется. К тому же интерфейс достаточно простой… ничего сложного я там не заметил.

                    Вы сильно недооцениваете UI флэш сайтов еще 10летней давности.


                    К сожалении красота там сильно опережала производительность систем. Ну и главная проблема Flash (в веб) это закрытость основного Adobe плеера.
                    По этому в вебе flash я уже почти не вижу (даже реrлама блин уже на html5).
                    • 0
                      Watch Dogs — так там flash и не используется.


                      Давайте просто поиграем в Hidden Object и надем Powered by Adobe Flash. Заметьте — даже не Scaleform.

                      image

                      По этому в вебе flash я уже почти не вижу (даже реrлама блин уже на html5).

                      Свистоперделки перестали делать на Flash, слава богу. На нем теперь делают более серьезные вещи и для того же веба.
                      • 0
                        Hidden Object

                        Прошёл игру (на ps4) и не очень понимаю о чём вы… GUI всё же в игре не на Flash, а именно в этом контексте его рассматривают в данной статье.

                        На нем теперь делают более серьезные вещи и для того же веба.

                        К примеру? Просто я работаю в сфере веб разработки и флеша уже года 2 не вижу совершенно, хотя до этого, мелькал периодически.
                        • 0
                          Прошёл игру (на ps4) и не очень понимаю о чём вы…

                          Имел ввиду «Найдите на коробке Watch Dogs логотип флеш плеера

                          GUI всё же в игре не на Flash, а именно в этом контексте его рассматривают в данной статье.

                          Если не на флеше — начем тогда? (Как поняли, что не на флеше?)

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


                          Например вот 4theplayers.eu.playstation.com/
                          • 0
                            Имел ввиду «Найдите на коробке Watch Dogs логотип флеш плеера

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

                            Если не на флеше — начем тогда? (Как поняли, что не на флеше?)

                            Там GUI 3дешный и взаимодействует с 3д миром, ну и к тому же он достаточно простой… ну если только в меню флеш но это тогда смешно. :)

                            Например вот 4theplayers.eu.playstation.com/

                            Игровая индустрия это последний бастион в вебе, кто лепит всё на флеше. К слову этот сайт у меня жутко трмозит, хотя i7 Hasswel.
                            Я так понимаю, тут бизнес процессы включаются — много дешёвой раб силы, и отточенные процессы.
                            ИМХО флеш может остаться жить и вообще на очень долго ещё закрепится, но только если будет по нему некий открытый стандарт и будет свободная реализация. Просто если сравнивать с HTML — только IE имеет закрытый движок и открытый стандарт, во флеше мы имеем только 2 полу рабочих открытых реализаций и непонятно кем(adobe?) развиваемый стандарт. Ну и кроме того, если говорить про web то флеш там очень инородно выглядит.
                            • 0
                              Он на сайте у них используется, по этому видимо и на коробке пришлось писать.

                              У Blizzard тоже на сайте много чего на флеше. Но на своих коробках они логотипы не лепят.
                              Пользуясь Вашей логикой — на коробке должны быть логотипы всего, что где-то упоминается. В таком случае c++, java, notepad, windows, coffe, sex & rock'n'roll ;)

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

                              Там GUI 3дешный и взаимодействует с 3д миром, ну и к тому же он достаточно простой… ну если только в меню флеш но это тогда смешно. :)


                              И что, что 3Дшеный и взаимодействует с 3д миром? Это как-то отменяет флеш? :)

                              К слову этот сайт у меня жутко трмозит, хотя i7 Hasswel.

                              Гугл Хром? У меня тоже i7 но причем тут проц? Там рендеринг идет на видеокарте. Может быть отключен GPU во флеше?

                              Ну и кроме того, если говорить про web то флеш там очень инородно выглядит.

                              Я уже не первый раз говорил и продолжаю говорить — меня флеш в вебе в том виде в каком его все помнят — интересует меньше всего.
            • 0
              gameware.autodesk.com/usage/games
              Я не знаю на что делить это количество, но одни только тайтлы типа Bioshock Infinite, Assassins Creed (два тайтла), Far Cry 4, Dragon Age 2 по-моему дают общую картину

              UPD — По ссылке список игровых тайтлов, использующих Scaleform для интерфейса
              • 0
                Судя по этому списку, те же Ubisoft отказались в Assassins Creed от этого подхода.

                Но на сколько я знаю проекты Valve, Blizzard всё же юзают, что то своё.
  • +4
    Очень интересно читать подобные статьи о использовании Flash в столь больших проектах. Особенно после холиварах примерно 2-3 годичной давности о Hml5 + CSS3 и Flash, где многие пытались убедить, что флэш отмирает и его полностью заменить связка html+css+js.
    Вот поди ж ты — не умер Flash.
    Он по прежнему не заменим во многих случаях.
    А связка html+css+js просто заняла свою нишу на рынке, хоть и не спорю — успешно развивается.
    • +1
      Флеш отмирает в вебе, и только. Он совершенно точно никуда не денется в таких вещах как мультипликация, Adobe AIR, тот же ScaleForm. Не вебом единым.
      • +2
        Да не отмирает он там, с чего вы взяли-то?
        Просто до недавнего времени он был монополистом. Не было ничего что могло бы с ним конкурировать.
        Сейчас есть варианты. Вот и все. Т.е. он просто подвинулся, уступив некоторую долю рынка.
        Adobe продолжает вливать в него деньги на развитие. О смерти даже и речи нет.
        Ну разве что только хейтеры его хоронят уже лет 10))
        • +1
          Видимо с того, что постепенно растет трафик с мобильных платформ ios/android/wp, а там флеша нет
        • 0
          Хоронили флеш — порвали три стандарта
      • 0
        Ну вот игра Watch Dogs вообще у себя на коробке так и написали — Powered by Adobe Flash :) Ни слова о Scaleform!
        • 0
          vgboxart.com/boxes/PS4/56537-watch-dogs-old-full.jpg

          Ничего про флеш не написано.
          • 0
            Ничего про флеш не написано.

            Вот тут написано habrastorage.org/getpro/habr/comment_images/d10/657/c7a/d10657c7a88599a93d3e552ad19d3df9.jpg

            А вообще не совсем понятно почему у них много вариантов коробок. На разных каверах разное количество логотипов.
            • 0
              На PS4 версии точно не написано… может в PS4 они Flash не использовали?
              • 0
                Сомневаюсь, что не использовали. На Xbox360, ONE — сто процентов используется и написано. Но не на всех коробках и возможно не во всех странах.

                Какой смысл в исходниках вырезать не малую часть кода? ) Скорее всего просто по какой-то причине не печатали логотип. Да, в общем-то не суть. Начал присматриваться к коробкам — не на каждой вообще пишут какие технологии спользуют. Скорее всего юридические проволочки.
    • 0
      Эти разговоры шли именно про веб.
      В вебе флэш действительно постепенно исчезает.
      • 0
        По моему это и к лучшему, никогда не любил делать сайты и баннеры.
  • +2
    Интересная статья, но как я понимаю из названия «Часть первая: эволюция интерфейсов игры», скоро будет и вторая часть?
    • +3
      Все верно — следите за обновлениями в нашем блоге
  • +5
    Совершенно оффтопичный вопрос: под Mac OS есть планы портировать?
    (ох щаз мне накидают плюшек)
    • +2
      Нормальный вопрос, меня тоже волнует
    • 0
      В ответах разработчиков СерБ отвечал, что на мак — возможно когда-нибудь, а на Linux — 100% нет.
      • 0
        Если смогут на Mac то на Linux почти ничего менять не надо. Linux/MacOSX в плане разработки мне кажется глупо разделять (игр, для софта там история иная).
  • 0
    Спасибо, было любопытно почитать.
    +1 к интересу про интерфейс iOS версии
    • +4
      Как-то так:
      • 0
        Воу, т.е. на iOS тоже используется Scaleform? А как же производительность? Раз на ПК рендер интерфейс отжирает 10% CPU, то что происходит на iOS?..
        • 0
          Это наш редактор интефейсов для внутридвижкового UI, т.е. Scaleform мы не используем ни в каком виде.
          Точное количество % cpu для UI сходу не скажу, надо смотреть.
  • 0
    В начале про XML. Видно, что программисты систему разрабатывали.
    Вроде бы, всё есть и сделать можно теоретически всё что хочешь, но никто это в действительности сделать не может, все допинывается грязными хаками и вообще еле работает. Зато, плагинная архитектура, чистый код и куча вложенных абстракций. А о том, как художники будут на этом делать реальные интерфейсы никто не подумал.
  • 0
    Почему стандартный размер миникарты такой маленький? Не получается ли так, что из-за малого размера большинство игроков миникартой и не пользуется?
  • 0
    Верните в игру ульи, со второго скриншота!
  • 0
    >>Теперь в случае обнаружения опасных или изменяющих игровой баланс модов мы оперативно реагируем и закрываем возможность их использования, меняя логику работы клиента.

    Статья в целом интересная, хотя ваша «оперативность» давно вошла в пословицы.
  • +2
    Очень здорово читать про GUI у проекта, который по сути выглядит вменяемо более менее, только благодаря поддержке сообщества мододелов, а сама компания разработчик за три года не в состоянии создать хотя бы примитивный фильтр для техники. — via evilsexybear из ЖЖ.

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

    Вот зачем так елей лить, если моды дающих игровое преимущество до сих пор лежат на профильных форумах, и обновляются от патча к патчу? Вся борьба с такими модами — это исключительно отслеживание по записям(даже не реплеям) и запретам правилами — ВСЕ! Какое закрытие возможностей, о чем вы? К сожалению — я знаю как у вас с этим обстоят дела, так что не надо рассказывать сказки.

    В последнее несколько лет изготовление честных модов поддерживается. По сути, это user generated content — игроки делают эти моды для себя и других игроков, что повышает ценность нашего продукта.

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

    Вы запилить банальные фичи не можете уже пару лет, как упомянутый фильтр танков, динамическое отображение характеристик, динамическое отображение толщины брони в ангаре, и даже мод пересадки экипажа — и тот вы не сделали как было сделано мододелами, выдумав неудобное и очень большое меню. Ах да, прицел с временем перезарядки орудия — спустя 3 года «и N миллионов долларов», после того как такие прицелы сделали мододелы. А мелкий шрифт в боевых задачах?..

    Мододелы вон уже АПИ свое выдумывают, для борьбы с вашим интерфейсом, и модов, так или иначе изменяющих ваш «гениальный» интерфейс — довольно много.

    Печально это все, жентельмены, печально.
    • 0
      Полностью поддерживаю. Интерфейс клиента очень часто тормозит, использование флеша слишком пагубно сказывается в некоторых моментах. Целиком перевести клиент на ActionScript 3 почему-то команда разработчиков не в состоянии, вот уже где-то год-два.
      Большое количество различных мелочей, глюков, неудобств которые доставляют разработчики приходится выпиливать, или допиливать. В итоге старания коммьюнити просто копируются, с какими-то мелкими правками. Помоему, нужно признать, что вектор развития задает коммьюнити мододелов, на которых кладут болт. Даже нормального инструментария, — и того нет. Приходится извращаться, придумывать что-то свое, что уж говорить, у нас есть уже куча инструментария-аналогов вашему, без которых разработка «годноты» — бессмыслена.
      В клиенте присутствует туева хуча багов, начиная от мелочей, заканчивая серьезными секьюрити-дырами, которые команда разработки не замечает, или специально допускает, — фиг пойми. Ладно бы старые какие-то детали, но, даже в новом выкаченном функционале присутствуют печальные баги, которые дают игровое преимущество, позволяют получить то, чего нельзя, етц. А фиксятся эти все баги лениво, с больших пинаний, и т.д.
      В целом, товарищи, подсумирую:
      — команда разработчиков занимается годным делом, но лучше стала работать когда в нише появился аналог, который дышит в спину
      — команда разработчиков скудна на идеи, ворует их у коммьюнити, — даже не сказав спасибо
      — команда разработчиков плохо пишет код, допуская баги
      — команда разработчиков не занимается оптимизацией кода клиента, и контента клиента, что вызывает высокую нагрузку, глюки, и скудный внешний вид, как для требований к компу в 2014-то году.

      И еще много всего, — это так, что в голове всплыло сразу.

      И да, я, если что сделал много модов для клиента, копал код, — и знаю о чем говорю.
  • 0
    Раз уж тема зашла про моды — почему вы поддерживаете явно читерские моды, такие как от jove и тому подобное? В частности это касается текстур с отмеченными зонами пробития, оленеметр и тп. Это весьма вносит дисбаланс и явно провоцирует «школьников».
    • 0
      Зоны пробития не являются читерскими, — новички с ними катаются месяц-два, потом запоминают так.
      А оленемер дизбаланса не вносит, — тоже дает информацию о игроках.
      • 0
        у Jove есть мод, который показывает направление стволов у засвеченных противников. ИМХО чит.
        Есть мод, показывающий количество ХП у танков прям в боковых панелях команд. Вроде бы просто немного больше информации, но она даёт реальное игровое преимущество. Кстати, включая этот мод — получаем сразу -15..20 FPS
      • 0
        Т.е. то что дает реальное преимущество над остальными это уже не чит? Все должны быть в равных условиях, иначе баланс катится в трубу.
        • 0
          /кивая/
          А еще всем перед игрой надо ломать руки и делать инъекцию нейролептиков. А то вдруг у кого-то мелкая моторика лучше или зоны пробития он в памяти подло держит…
          • 0
            Вот не надо передёргивать только, то что вы перечислили это и есть скилл игрока, который должен приходить с соответсвующим опытом.
    • +1
      а что такое этот оленеметр?
      • 0
        Основное назначение — показывать ровность рук игроков (по определенной формуле рассчитывается полезность игрока для команды). Оттуда и название — показывает, насколько игроки команды — раки. Главная претензия у «отцов» в том, что все, кто имеют оленемер — в первую очередь убивают этих самых отцов.
        Со временем ввели плюшки наподобие последнего места засвета танка на карте, минимальный и максимальный радиус обнаружения танка, квадрат видимости (ага, вражеский танк можно заметить только на расстоянии, равном квадрату, со стороной 500 метров с центром на месте вашего танка), метки кто уже светился, а кого еще не видели, время до захвата базы, формат отображение ХП-бара над танком и тому подобные плюшки.

        И хотелось бы спросить у автора топика, на какие такие читы ВГ оперативно реагируют, если уже пол года почти в каждом бою попадается несколько ботов, при чем вместо того, чтобы банить игроков за ботоводство. При этом на сайте в таблице ТОПов, попадались игроки до 300игр/сутки. Если принять что в среднем человек играет 4 минуты — это 20 часов в сутки. Но вместо решения этой проблемы, в таблице ТОПов просто убрали отображение количества боев, чтобы комюнити не ныли.
        • 0
          Ну как же не банят? Коллегу, за бота, который оттрубил 18000 боев забанили аж на месяц)
          А если подумать, нахрена им банить людей, которые прем оплачивают? Это же постоянный доход.
          А то что игра уже давно катится в УГ их не особо волнует, она уже многократно отработала все в нее вложенное.
          У них тренд на планшетики, там еще поле не паханное для танков.
          • 0
            Что лучше, один бот, который оплатит премиум, или десяток игроков, которым в печенках сидят обнимающие базу боты и они вместо покупки премиума перестают играть?
          • –1
            А не поделитесь ли Вы, или Ваш коллега, ссылкой на такого хорошего бота. Можно даже в личку :3
      • 0
  • 0
    Мне нравится как в WoW организована работа с аддонами — в любой момент можно просто удалить папку и перезапустить игру, а можно из игрового меню просто убрать галочку. А теперь попробуйте с WoT убрать конкретный мод из мод-пака… проще поставить другой мод пак.
    • –2
      Не ставьте модпаки, подбирайте моды сами.
      • 0
        Отличное решение, давайте тратить кучу времени после выхода каждого патча, а потом еще и следить за обновлениями, т к первые версии не всегда стабильные.
        Я хочу поставить мод пак с 10 модами, но выключить только 1 мод из него, а не сидеть искать 9 модов отдельно.
        • 0
          /пожав плечами/
          Я вообще-то хочу заметить что к квг, конечно, можно выкатить справедливые претензии насчет организации работы с модами, но вот эта ваша хотелка — она совершенно не в кассу. Квг, согласитесь, все же не обязана разрабатывать ИИ, который будет автоматически разбираться в том, что накрутили создатели модпака и как оно работает.

          А так — заводим список со ссылками на отобранные для себя моды, и пишем комментарии чтобы не вспоминать потом где брал и где их для себя настраивал.
      • 0
        Абсолютно разные моды могут находиться мало того, что в одной папке, так еще и иметь общие файлы и конфликты в них. Попробуйте разобраться, какие из этих 15 файлов и 3 папок относятся к моду А, и не умрет ли еще что-то если убить эти файлы, или какие-то уже были перезаписаны другими модами.
        • 0
          А для этого мод сам по себе должен быть как пакет: со списком файлов, описанием, скриншотом, известными конфликтами и качаться не откуда попало, а с какого-нибудь веб ресурса ввиде галереи «модов». Собственно как play store, itunes, rpm… Тогда там сверху можно будет довесить логику например в личном профиле поставить 10 чекбоксов на нужные плагины и сразу увидеть конфликты. Потом можно найти самые используемые и поддерживать на оф уровне либо забрать под капот. Но ВГ не умеет делать сервисы, это видно даже на примере рейтингов людей/кланов и ГК.
          PS. Replay manager в pro tanki мод-паке уже делают, вг опять скажет что им виднее что надо людям.
  • 0
    Спасибо за интересную статью, морально приобщились к разработке танков ))
    Жаль, тема сисек не раскрыта =D
  • 0
    Спасибо за пост, теперь понятно почему все так работает.
    Подскажите, откуда взялся квадрат видимости?!
    • 0
      Добрый день и пожалуйста. Про квадрат видимости — не совсем ипархия GUI, но на сколько я знаю, это обусловлено ограничениями движка игры (BigWorld), а точнее особеннстями его реализации
  • 0
    Так получилось потому, что разработку на Flash в проекте начинали люди, которые не были профессиональными Flash-разработчиками.

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

    Что мешает использовать ExternalIInterface для прямого общения с С++?
    • 0
      Ничего не мешает, но во-первых нам в 99% случаев нужно общаться с Python, а во-вторых, с точки зрения удобства использования, использование ExternalIInterface сильно проигрывает тому подходу, который мы используем сейчас — вызов Python методов из Flash по ссылке, как «родных» Flash методов

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

Самое читаемое Разработка