На чем написан world of tanks
Движок игры
На каком языке в основном написан Клиент?
На каком языке в основном написан Сервер?
Какие программы вы используете на сервере игры?
Какие языки вы использовали при написании Сервера/Клиента?
Интересно что вы ответите
Do you know the way
Победителям Великой Отечественной:
Спасибо Вам за тишину, за наше небо голубое.
За то, что в страшную войну,
Сумели Мир Прикрыть Собою.
Xiaomi Mi Max 6.44″ . G o o g l e Android 6, Miui 8.
Я из Wargaming: что значит быть программистом?
Иван Петроченко, глава отдела разработки движка World of Tanks Blitz
Как начинали?
Делать игры мечтал с детства. По образованию я эколог. До этого была школа с экологическим уклоном.
В индустрии я уже больше десяти лет. Попал в нее относительно легко: разместил резюме, через день позвонили и позвали «разрабатывать под мобилки» в небольшую, известную в узких кругах компанию Incubus. Ничего удивительного — в 2004 году в Минске игроделов можно было по пальцам пересчитать и отечественный геймдев был в зачаточном состоянии. Со временем, конечно, ситуация поменялась.
Вторым местом работы стала TikGames. По меркам того времени это был уже игрок покрупнее и гораздо известнее — в компании успела поработать приличная часть моих нынешних коллег 😉
Затем была Dava Consulting, которая впоследствии вошла в состав «Гейм Стрим». Так в моей жизни появился World of Tanks Blitz.
Мне всегда нравилось делать игры. К этому лежит душа. Писать код для скучных приложений, наверное, не смог бы.
С чем работаете?
Платформа у нас не одна. Это и iOS, и Android, и Windows 10. Недавно добавилась Mac OS. Что касается языка, то это классика геймдева — всеми любимый C++. Это основа основ и 95% всей работы. Конечно, есть и другие скрипты, которые используются для автоматизации (Python и так далее).
Софт — Visual Studio для Windows, Xcode для Mac и iOS. C Android уже сложнее. Капризная платформа диктует свои правила. Используем то, что удобнее всего, однако идеальный софт еще не нашли.
А какое образование нужно?
Я, наверное, в очередной раз повторю то, что все и так знают. Чтобы создавать первоклассные игры, необязательно иметь три диплома и курсы разработчика за плечами. У нас работают как самоучки, превратившие сырой талант в блестящие результаты, так и те, кто целенаправленно планировал идти в индустрию еще на этапе получения образования.
Хороший геймдев-разработчик должен быть экспертом во многих областях. Современные игры даже среднего уровня основываются на большом количестве технологий (если не брать в счет проекты на высокоуровневых движках, например, на Unity). Нужно хорошо владеть теоретической частью (структура данных, алгоритмы), разбираться в трехмерной графике, знать особенности операционных систем (в случае World of Tanks Blitz их много, так как игра кросс-платформенная).
Это как с иностранными языками — чем больше ты языков знаешь, тем легче тебе даются новые. Если ты освоил 10 технологий, вероятнее всего, с 11-й сложностей не будет.
Известны случаи, когда в программирование приходили прямиком из строителей. Да, и такое бывает. Однако отмечу, что лучше начинать до 30 лет. Чем раньше, тем лучше. Слишком много специфики и нюансов, которые надо охватить. На это нужно время.
Что важно?
Если программист умеет быстро разбираться с незнакомыми технологиями, то он хороший специалист. В этой сфере очень высоко ценится способность адаптироваться. Это архиважно. Безусловно, основа (С++) постоянна. Однако нюансы меняются из года в год. Появляются новые стандарты, что хорошо видно на выставках и конференциях, где демонстрируются достижения мировой IT-индустрии.
Как только ты перестал развиваться, ты дрейфуешь где-то на среднем уровне, несмотря на наличие опыта. Консервация — это плохо. Необязательно посещать все специализированные мероприятия и не пропускать ни одной конференции. Это нужно, скорее, чтобы прочувствовать атмосферу и вдохновиться. Своеобразная моральная подпитка. Учиться и углублять знания можно не выходя из дома. Есть интернет с огромным количеством литературы, технических блогов, лекций.
Сейчас на самом деле передовое время. Та теория, которая была разработана 30–40 лет назад, находит отклик в аппаратных возможностях современных технологий. Появилась возможность реализовать то, что было придумано на бумаге.
Английский?
Без английского в программировании никуда. Вся полезная литература, весь «свежак», новейшие материалы выходят, к сожалению, не на русском. Но никто не говорит, что нужен продвинутый уровень владения языком. Достаточно понимать. Мне сложно представить программиста, не знающего хотя бы азов английского. Разве что специалисты по 1С, где нужно писать кириллицей.
Это скучно?
Нет. Программист — это не тот человек, который сидит и тихонько пишет код. Он придумывает. Особенно если мы говорим об игровой индустрии. Другое дело —проект какой-нибудь банковской системы: когда человек приходит на работу, ему дают программу, которую до него писали десять лет, и он продолжает над ней трудиться, минимально меняя код. Это беспощадная рутина. То же самое и с бухгалтерией — здесь по большому счету нечего изобретать.
В геймдеве динамика намного выше. Во-первых, редко когда игра существует в первозданном виде пять или более лет. Те же «Танки» постоянно обновляются.
А как в Беларуси?
Можно выучиться на гейм-дизайнера в университете (БГУИР) или закончить курсы, которых появляется все больше и больше. Однако огромную роль играет самообразование: интернета хватит с лихвой, надо просто захотеть. Когда приходят резюме, я даже не смотрю на пункт «Образование». Диплом есть почти у всех, ценится опыт и собственные проекты. Недавно на собеседование приходил кандидат, недавний выпускник, который написал свой игровой движок. Он показал, как все работает, объяснил механику. Вижу ли я в нем достойного специалиста в будущем? Конечно. Сразу понятно, что человек интересовался этим с детства, получил хорошие знания в интернете и будет развиваться.
Кого берете?
Людей с техническим складом ума, которые умеют решать новые задачи. Человека, который пришел с опытом работы в геймдеве, видно за версту — диалог выстраивается сам собой и идет по накатанной. Новичка в индустрии разговорить уже сложнее.
«Джуниору» к нам попасть сложно. Команда уже сформирована, необходимости в расширении у нас нет. Нужны люди, которые смогут углубить экспертизу.
Бывает, что в резюме написано одно, а при личной встрече оказывается, что это неправда. Преувеличено, присвоено и так далее. Это всегда узнается.
С чего начать?
Тому, кто очень хочет не только в программирование, но в IT в принципе, лучше начинать с техподдержки. А еще лучше — с QA (знаю реальные примеры). Это бывает, когда есть желание и соответствующий склад ума, но не хватает технической подкованности. Два-три года работы в индустрии в поддержке или тестировании обычно устраняют пробелы.
Совет молодым?
Посоветую никогда не забрасывать профессиональное развитие. Инструментов для поддержания хорошей формы хватает. Для ленивых: существуют сайты, где все представлено в легкой и увлекательной форме. Допустим, есть игра, к которой нужно написать искусственный интеллект. Результатом можно очень сильно вдохновиться.
Три причины, по которым мне пришлось бросить игру World of Tanks и в чем суть патента В. Кислого
реклама
Игроком игры World of Tanks я явлюсь с 2012 года, вернее уже являлся, видел, так сказать воочию, как игра менялась на протяжении девяти лет. И на мой взгляд игра изменилась только к худшему, причем за последние года просто катастрофическими темпами. В какой-то момент играть в нее стало просто невозможно, чаша терпения переполнилась, и я решил бросить эту игру. Расскажу про причины, которые побудили меня это сделать.
1. Патент Виктора Кислого и Ивана Михневича.
Суть этого патента заключается в так называемой «поддержке интереса к игре». Как всегда, компании Wargaming мало прибыли, которую они имеют, и хочется еще большего. И эта технология призвана, не допустить ухода игроков из игры и повысить доходы компании. Она напрямую определяет алгоритмы игры, правила баланса, пробитий, промахов, рикошетов и т.д., и случайности здесь нет никакой. Помогая этим одним игрокам, и угнетая других, тем самым стирая разницу в игре между игроками, которые плохо играют, например, только начали играть, и опытными игроками. По мнению Wargaming здесь все логично, игрокам не нравится постоянно выигрывать в легких боях или постоянно проигрывать. Если опытные игроки попадают в бой с неопытными новичками, то новички разочаруются, а опытным игрокам станет скучно, и они оба могут бросить игру. Статистика игроков не должна сильно различаться, не должно быть побед у одних игроков 90 %, а у других 40%.
2. Жадность компании Wargaming
Повторюсь, что я являюсь игроком этой игры с девяти летним стажем. И помню те времена, когда игра была размеренной, новая прокачиваемая и премиальная техника выходила с периодичностью позволяющей игрокам понять эту технику, изучить ее, привыкнуть к ней. Хоть как то поддерживалась историчность игры, не было этой несуразной, не имеющей к историчности никакого отношения, колесной и некоторой другой техники. Не нерфили, и не апали технику в интересах Wargaming так беспардонно и бесцеремонно, как сейчас. Wargaming раньше жил с перспективой на будущее, думал о последствиях, к которым могут привести его действия и решения. А сейчас у меня сложилось такое впечатление, что Wargaming живет только сегодняшним днем, заботясь только о сегодняшних сверхдоходах, вовлекая World of Tanks в полный игровой хаос. Как будто завтрашнего дня уже не наступит, и весь куш нужно срубить именно сегодня. Но завтрашний день неминуемо наступает, и чтобы опять срубить по максимуму, игру ввергают в еще больший хаос, и так дальше происходит падение в пропасть хаоса и безумия.
реклама
Или еще другой вариант как вынудить игроков донатить. Выпустить новый премиальный танк, например тяжелый танк Crysler K GF (яркий пример нагиба за деньги), который практически не имеет в броне слабых мест, а в лоб так вообще бронебойными снарядами не пробивается. И только при использовании подкалиберных (голдовых) снарядов появляется шанс с ним справиться, тем самым совсем ненавязчиво подталкивая игроков покупать за реальные деньги голдовые снаряды, ведь не у всех имеется много игрового серебра для их покупки. И у самого Crysler K GF «запилено» суперпробитие на голдовых снарядах, хотя пушка такая же, как и у Т32, но пробитие при использовании голдовых снарядов значительно выше. Что и подталкивает лишний раз их владельцев на покупку голды за реальные деньги. Опытные игроки начавшие играть давно, видя, как сейчас, некогда культовая игра, просто катится в пропасть хаоса и безумия просто уходят из нее навсегда. А новички, на которых Wargaming делает ставку, всячески заманивая их в игру, немного покуражатся и все равно уйдут из нее, потому что без опытных игроков игра будет неинтересна.
3. Читы (запрещенные модификации) в игре
Читы – это официально запрещенные модификации, которые тем или иным способом дают значительное преимущество игроку в бою перед другими игроками.
реклама
Или еще пример, остаюсь я в конце боя наедине с одним или двумя противниками, и не знаю их место нахождения. Так находятся союзники, которые начинают мне подсказывать место положения врага, и действительно он оказывается там. Как они это узнают, да очень просто, используют чит «поваленные деревья и разрушенные объекты на миникарте», который на миникарте отображает условными знаками эти места.
реклама
Можно конечно и дальше очень долго продолжать приводить разные примеры использования игроками читов, с которыми я лично сталкивался в боях, но думаю для понимания масштабности катастрофы в игре World of Tanks этого достаточно.
Скачиваются и устанавливаются читы вообще, без каких либо проблем, и это вызывает у меня большое разочарование в этой игре.
По моему мнению, точка невозврата игрой World of Tanks уже пройдена, и вернуть ей ту прежнюю популярность и любовь игроков уже невозможно.
Надеюсь, статья для вас была интересна, и вы сделаете правильный выбор игры для себя.
Пишите в комментариях, часто ли вы сталкивались в игре со случаями читерства, и что думаете о дальнейшей судьбе игры World of Tanks.
Почему первым языком программирования должен быть Python?
Профессия программиста становиться все более популярной. Это не только шанс получить высокооплачиваемую работу, зарабатывать достойные деньги на фрилансе, но и интересное, увлекательное занятие.
Как правило, человек, который решил освоить программирование «с нуля» становиться перед выбором «Какой язык программирования учить?».
Если, Вы четко знаете в какой области хотите применять в будущем свои знания (Web, создание игр, программирование под Android и т.п.), то можно воспользоваться инфографикой, с которой, уверен, многие уже знакомы.
Как видите, самый часто упоминаемый язык на этой инфографике — Python. И это вполне оправдано, поскольку Python является, действительно, простым языком, а программировать на нем — сплошное удовольствие. Свою первую программу Вы напишите в течении первых часов изучения этого языка.
Перечислять все достоинства этого языка я не буду, поскольку, это уже делалось многими авторами неоднократно. Назову лишь несколько, на мой взгляд, наиболее ценных особенностей Python для начинающего программиста.
— Простота. Это достоинство Python наиболее важно для начинающих программистов.
— Скорость разработки. Вы с легкостью сможете решать повседневные задачи не затрачивая большого количества времени. Для начинающего программиста важно видеть результаты своего обучения в виде готовой к использованию программы. Это мотивирует на дальнейшее изучение. Например, классический «Hello world» в Python выглядит следующим образом:
Для сравнения, посмотрим, как выглядит тот же «Hello world» на суперпопулярном языке Java:
class HelloWorld <
public static void main(String[] args) <
System.out.println(«Hello World!»);
>
>
— Широкие возможности использования языка Python. Благодаря огромному количеству библиотек, модулей и фреймворков, с помощью Python можно решать практически любые задачи.
Программы для ежедневного использования, в которых применяется Python: графический редактор GIMP, программа для работы с трехмерной графикой Blender, BitTorrent. Популярная игра World of Tanks написана с применением Python. Такие компании как Яндекс, Google, Instagram, Dropbox и др. используют Python.
Востребованность языка и уровень зарплат можно оценить, например, с помощью крупнейшего сайта вакансий и резюме HeadHunter http://hh.ua/. Введите в поиске на сайте запросы вида «Python developer», «python junior», «python django», и убедитесь в том, что Python востребован и высокооплачиваем.
В следующих постах, рассмотрим обучающую литературу по Python, а также полезные ресурсы, для закрепления навыков программирования.
Создание World of Tanks Blitz на базе собственного движка DAVA
Пролог
Эта история началась более трех лет назад. Наша небольшая компания DAVA стала частью Wargaming, и мы начали обдумывать, какие проекты делать дальше. Чтобы напомнить, каким был мобайл три года назад, скажу, что тогда не было ни Clash Of Clans, ни Puzzle & Dragons, ни многих очень известных сегодня проектов. Mid-core тогда только-только начинался. Рынок был в разы меньше сегодняшнего.
Изначально всем казалось, что очень хорошей идеей будет сделать несколько мелких игр, которые бы привлекали новых пользователей в большие «танки». После ряда экспериментов оказалось, что это не работает. Несмотря на отличные конверсии в мобильных приложениях, переход от мобильного телефона к PC оказывался пропастью для пользователей.
Тогда в разработке у нас находилось несколько игр. Одна из них носила рабочее название «Sniper». Основной геймплей-идеей была стрельба в снайперском режиме из стоящего в обороне танка, по другим танкам, которыми управлял AI и которые могли атаковать в ответ.
В какой-то момент нам показалось, что стоящий танк — это очень скучно, и за неделю мы сделали прототип мультиплеера, где танки уже могли ездить и атаковать друг друга.
С этого все и началось!
Когда мы начинали разработку “Снайпера”, то рассматривали технологии, которые тогда были доступны для мобильных платформ. На тот момент Unity был еще на достаточно ранней стадии своего развития: по сути, необходимых нам технологий еще не было.
Основной вещью, которой нам не хватало, был рендеринг ландшафта c динамической детализацией, что является жизненно необходимым для создания игры с открытыми пространствами. Было несколько сторонних библиотек для Unity, однако их качество оставляло желать лучшего.
Также мы понимали, что на C# мы не сможем выжать максимум из устройств, под которые мы разрабатываем, и всегда будем ограничены.
Unreal Engine 3 тоже не подходил по ряду похожих причин.
В итоге, мы решили дорабатывать свой движок!
Он на тот момент уже использовался в наших предыдущих казуальных проектах. Движок имел достаточно хорошо написанный низкий уровень работы с платформами и поддерживал iOS, PC, Mac, плюс были начаты работы по Android. Было написано много функциональности для создания 2D-игр. То есть, был неплохой UI и много всего для работы с 2D. В нем были первые шаги по 3D-части, так как одна из наших игр была полностью трехмерной.
Что у нас было в 3D-части движка:
Начало работ
Началось все с доказательства возможности отрисовать ландшафт на мобильных устройствах: тогда это были iPhone 4 и iPad 1.
После нескольких дней работы мы получили вполне функциональный динамический ландшафт, который работал довольно сносно, требовал где-то 8MB памяти и давал 60fps на этих устройствах. После этого мы начали полноценную разработку игры.
Прошло около полугода, и маленький мини-проект превратился в то, чем сейчас является Blitz. Появились совершенно новые требования: MMO, AAA-качество и другие требования, которые движок в его изначальном виде на тот момент уже не мог обеспечить. Но работа кипела полным ходом. Игра работала и работала неплохо. Однако производительность была средней, объектов на картах было мало, и, собственно, было множество других ограничений.
На этом этапе мы начали понимать, что фундамент, который мы заложили в движок, не выдержит пресса реального проекта.
Как все работало на тот момент
Вся отрисовка сцен была основана на простой концепции Scene Graph.
Основной концепции являлись два класса:
Первые шаги по улучшению ситуации
Для начала мы решили полечить проблемы с производительностью и сделать это быстро.
Собственно, сделали мы это, введя дополнительный флаг NEED_UPDATE в каждой ноде. Он определял, нужно ли такой ноде вызывать Update. Это действительно повысило производительность, но создало целый ворох проблем. Фактически код функции Update выглядел вот так:
Это вернуло нам часть производительности, однако началось много логических проблем там, где их не ждали.
LodNode, и SwitchNode — ноды, отвечающие, соответственно, за переключение лодов (по расстоянию) и переключение объектов (например, разрушенных и неразрушенных) — начали регулярно ломаться.
Периодически тот, кто пытался исправить поломки, делал следующее: отключал NEED_UPDATE в базовом классе (ведь это было простое решение), и совершенно незаметно FPS опять падал.
Когда код, проверяющий флаг NEED_UPDATE, был закомментирован раза три, мы, решились на радикальные перемены. Мы понимали, что сделать все сразу у нас не получится, поэтому решили действовать поэтапно.
Самым первым шагом было заложить архитектуру, которая позволит в перспективе решить все возникающие у нас проблемы.
Комбинирование компонентного и data-driven-подхода
Решением этой проблемы стал компонентный подход, комбинированный c data-driven подходом. Дальше по тексту я буду употреблять data-driven-подход, так как не нашел удачного перевода.
Вообще понимание компонентного подхода у многих людей самое разное. То же — и с data-driven.
В моем понимании, компонентный подход — это когда некая необходимая функциональность строится на основе независимых компонентов. Самый простой пример — это электроника. Есть чипы, у каждого чипа есть входы и выходы. Если чипы подходят друг к другу, их можно соединить. На базе такого подхода построена вся индустрия электроники. Есть тысячи разных компонентов: соединяя их друг с другом, можно получать совершенно разные вещи.
Основные плюсы этого подхода в том, что каждый компонент изолирован, и с большего независим. Я не беру во внимание тот факт, что на компонент можно подать неправильные данные, и плата сгорит. Плюсы этого подхода очевидны. Сегодня можно взять огромное количество готовых чипов и собрать новое устройство.
Что же такое data-driven. В моем понимании, это подход к проектированию программного обеспечения, когда за основу потока выполнения программы берутся данные, а не логика.
На нашем примере представим следующую иерархию классов:
Код обхода этой иерархии иерархически выглядит так:
В данной иерархии C++ наследования мы имеем три различных независимых потока данных:
Давайте представим, как это должно выглядеть в data-driven подходе. Напишу на псевдокоде, чтобы была понятна идея:
По сути, мы развернули циклы работы программы, сделав это таким образом, чтобы все отталкивалось от данных.
Данные в data-driven подходе являются ключевым элементом программы. Логика — лишь механизмы обработки данных.
Новая архитектура
В какой-то момент стало понятно, что надо идти в сторону Entity-based подхода к организации сцены, где Entity являлась сущностью, состоящей из многих независимых компонентов. Хотелось, чтобы компоненты были полностью произвольными и легко комбинировались между собой.
Читая информацию по этой теме, я наткнулся на блог T-Machine.
Он мне дал множество ответов, на мои вопросы, однако основным ответом было следующее:
• Entity не содержит никакой логики, это просто ID (или указатель).
• Entity знает только ID компоненты, которые ей принадлежат (или указатель).
• Компонент — это только данные, то есть. компонент не содержит никакой логики.
• Система — это код, который умеет обрабатывать определенный набор данных и выдавать на выходе другой набор данных.
Когда я понял это, в процессе дальнейшего изучения различной информации наткнулся на Artemis Framework и увидел хорошую реализацию этого подхода.
Исходники тут, если предыдущий линк не работает: Artemis Original Java Source Code
Если вы разрабатываете на Java, то очень рекомендую посмотреть на него. Очень простой и концептуально правильный Framework. На сегодняшний день он спортирован на кучу языков.
То, чем является Artemis, сегодня называют ECS (Entity Component System). Вариантов организации сцены на базе Entity, компонентов и data-driven достаточно много, однако мы по итогу пришли к архитектуре ECS. Сложно сказать, насколько это общепринятый термин, однако ECS значит, что есть следующие сущности: Entity, Component, System.
Самое главное отличие от других подходов это: Обязательное отсутствие логики поведения в компонентах, и отделение кода в системы.
Этот пункт очень важен в “православном” компонентном подходе. Если нарушить первый принцип, появится очень много соблазнов. Один из первых — сделать наследование компонентов.
Несмотря на гибкость, заканчивается обычно макаронами.
Изначально кажется, что при таком подходе можно будет сделать множество компонентов, которые ведут себя похожим образом, но чуть-чуть по-разному. Общие интерфейсы компонентов. В общем, можно опять свалиться в ловушку наследования. Да, это будет чуть лучше, чем классическое наследование, однако постарайтесь не попасть в эту ловушку.
ECS — более чистый подход, и решает больше проблем.
Чтобы посмотреть на примере, как это работает в Artemis, можете глянуть вот тут.
Я на примере покажу, как это работает у нас.
Главным классом контейнером является Entity. Это класс, который содержит массив компонентов.
Вторым классом является Component. В нашем случае, это просто данные.
Вот список компонентов, используемых у нас в движке, на сегодняшний день:
Третим классом является SceneSystem:
Функции RegisterEntity, UnregisterEntity вызываются для всех систем в сцене тогда, когда мы добавляем или удаляем Entity из сцены.
Функции RegisterComponent, UnregisterComponent вызываются для всех систем в сцене, тогда, когда мы добавляем или удаляем Component в Entity в сцене.
Также для удобства есть еще две функции:
Эти функции вызываются, когда уже создан заказанный набор компонентов с помощью функции SetRequiredComponents.
Например, мы можем заказать получение только тех Entities, у которых есть ACTION_COMPONENT и SOUND_COMPONENT. Передаю это в SetRequiredComponents и — вуаля.
Чтобы понять, как это работает, распишу на примерах, какие у нас есть системы:
В практически любой системе код выглядит следующим образом:
Системы можно классифицировать по тому как они обрабатывают объекты:
Соответственно, если есть желание можете заходить и смотреть на нашу имплементацию в деталях.
Учитывайте тот факт, что все писалось в реальном проекте, и, конечно, это не академическая реализация.