Анненков Павел Михайлович
Сильный и слабый в информационных технологиях разработки компьютерных игр
Оглавление
Глава 1. Как найти себя в жизни: 7 эффективных советов от психолога. 4
Глава 2. Как начать писать игры.. 8
Глава 3. Инструкция начинающего разработчика игр. 17
Глава 4. Руководство для начинающих создателей MMORPG игры. 30
Глава 5. Создавая миры: как создать свою РПГ?. 47
Глава 6. Руководство по созданию крутых MMORPG для новичков. 52
Глава 7. Создание собственной ролевой системы, или что нужно помнить чтоб не родить V.T.N.L. 60
Глава 8. За пределами массива. 68
Глава 9. Кем быть в 2020-е. 80
9.1. Что стоит изучать, чтобы оказаться востребованным сейчас и в ближайшем будущем. 80
Глава 10. Как стареть в IT. 90
Глава 11. Хобби – это не работа?! 100
Приложение А. Список игровых движков. 102
От автора
В книге представлена компиляция блогов и статей с указанием их источников. Лично автором ничего не написано. Почему такое название книги? Просто. Cильный или слабый – это о законах природы, выживает сильнейший.
Автор играл в 8-ми битную приставку и 8-ми битный компьютер ZX Spectrum, в 1997 году на PC впервые поиграл в Quake и Duke Nukem 3D, является фанатом таких игр как Diablo и Warcraft 2.
Осенью 2000 года, будучи студентом МИФИ, создает игру Подрывник 2000, сочетающая свойства таких игр как Bomberman, Dyna Blasters, Warcraft 2 и Diablo. Игру более 5000 раз в первые две недели публикации на download.ru. Впоследствии игра попала на некоторые пиратские сборники.
Сообщаю от себя что игры можно делать в одиночку, но лучше в команде. Тем более что нужен как минимум один художник.
Для несложных 2D игр достаточно владение программами Paint и Photoshop, программирование, к примеру, на c/c++ под DirectX7 или выше.
В погоне за 3D графикой и эффектами не забываем о геймплее, который был свойственным 8-битным играм, на пике их популярности в 90-е.
Книга скомпилирована весной 2020 года, и является плодом вдохновения, равно как и сама игра Подрывник 2000.
Удачи в нелегком деле создания компьютерных игр!
Глава 1. Как найти себя в жизни: 7 эффективных советов от психолога
Источник: https://zen.yandex.ru/media/id/5bd310a232ca1500aac62035/kak-naiti-sebia-v-jizni-7-effektivnyh-sovetov-ot-psihologa-5be4038a32060600aacdb34c?utm_source=serp
Этим вопросом рано или поздно задается любой человек, как найти себя в жизни? Ведь от того, как рано человек определит свое предназначение, и зависит его дальнейшая жизнь. В этой главе приведено краткое руководство из семи простых способов как найти себя и при этом сэкономить время, которое лучше использовать на реализацию себя и своих жизненных целей. Все мы с рождения умны и талантливы, но по мере воспитания взрослые губят в нас умных и талантливых людей.
Итак, приступим:
1. Вспомнить о своих детских мечтах.
Всем нам в детстве задавали вопрос, кем ты будешь, когда вырастешь? Предлагаю вам сесть поудобнее и вспомнить, о чем вы мечтали в детстве и чем хотели заниматься. Ведь ребенок умнее взрослого человека и в нем уже заложены какие-то качества, благодаря которым и формируется его мечта. Основные интересы были заложены как раз в то время.
Дети обычно ничего не боятся и мечтают без каких либо рамок и ограничений. Ведь все ограничения нам навязывают взрослые по мере нашего воспитания.
Предлагаю вам расслабиться и вспомнить, что вам нравилось, о чем вы мечтали, когда были ребенком?
2. Проанализировать свои умения и навыки
Останьтесь с самим собой наедине, это может быть прогулка, прослушивание любимой музыки, медитация, поездка по ночному городу. Главное, что бы вы расслабились и настроились на диалог с самим собой. Постарайтесь прислушаться к своему внутреннему голосу, что он вам говорит? Какая работа вам нравится? Чем любите заниматься? Что у вас получается лучше других? На данном этапе главное быть честным по отношению к себе и вы найдете ответы на все вопросы.
3. Понять, в каком окружении комфортно находиться.
"Скажи мне кто твой друг и я скажу кто ты" - не зря существует такая поговорка. Ведь окружение формируется исходя из наших интересов и предпочтений. Друзья играют даже большую роль в формировании личности, чем родственники. Ведь друзей выбираем мы, а родственников выбрать невозможно. Предлагаю вам проанализировать свое окружение. Так же подумайте, к кому из людей вы больше всего тянетесь, может быть в этом человеке есть то, в чем вы оба схожи?
4. Подумать, что нравится делать в свободное время.
Нередко бывает так, что работа и учеба выбираются нами не самостоятельно. Часто место учебы и работы определяют наши родители, не учитывая наших интересов и способностей. Стоит обратить внимание на что вы тратите свое свободное время? Какие хобби у вас есть? Нередко люди находят дело своей жизни через хобби. Ведь это как раз та деятельность, которой вы можете заниматься часами и при этом получать колоссальное удовольствие от процесса и результатов.
5. Заняться самообразованием и расширением своего мировоззрения.
Для того, что бы найти себя в жизни, требуется знать, чего ты хочешь. А для того что бы знать, чего ты хочешь, требуются знания и опыт. Ведь как можно узнать, хочешь ли ты быть маркетологом, если ты даже не подозреваешь о существовании такого слова, не говоря уже об опыте работы. Что бы ответить на вопрос, чего ты хочешь, надо узнать, какие варианты вообще существуют. А без постоянного самообразования это к сожалению невозможно. Если человек говорит "не могу себя найти", вероятнее всего человек недостаточно знает обо всех возможностях, которые открыты перед ним в этом мире.
6. Понять, какая деятельность приносит радость.
Не думайте, что этот пункт окажется одним из легких. Ведь все мы любим полежать на диване и посмотреть любимые сериалы. Но на самом деле, за любимым делом, скрывается прокрастинация, проще говоря - лень! Она возникает, когда мы занимаемся тем делом, от которого не получаем удовольствия. Найдя же то любимое дело, человеку попросту не придется себя принуждать к действиям. Думаю имеет смысл исключить ту деятельность из своей жизни, которая приносит негативные эмоции. Или постараться изменить отношение к делу.
7. Придумать и воспроизвести свой собственный мир.
Предлагаю вам помечтать на тему своей идеальной и счастливой жизни, без рамок и каких либо ограничений. Каким вы себя видите? Какая у вас работа? Какой образ жизни? Как вы выглядите? Какие люди вас окружают? Ответы предлагаю записать в письменной форме, в виде рассказа. Либо можете нарисовать свою идеальную жизнь.
Сравните, какие аспекты жизни не соответствуют вашим мечтаниям и действуйте, все в ваших руках, мои дорогие читатели.
В данной главе мы рассмотрели 7 интересных способов нахождения своего жизненного пути. При поиске главное опираться на свои чувства и внутренний голос. Они обязательно подскажут вам, что делать. Тот, кто проделает эту нелегкую работу над собой, обязательно обретет свое собственное Я.
Глава 2. Как начать писать игры
Источник: https://habr.com/ru/post/160547/
Оригинал: Starting out on Game Programming
Путь в индустрию игровых разработок не близок. Эта глава призвана помочь понять с чего лучше начать это путешествие.
Вы только что закончили ваш первый курс по С++ и хотите начать делать игры. Кто-то указал вам на этот сайт и вы, возможно, поэкспериментировали немного с руководством. Вы изучили несколько лаконичных примеров, но не нашли руководства о том, как сделать целую игру. И на то есть причина.
Руководства хороши для обучения чему-то шаг за шагом, например тому, как перемещать изображение точки по экрану. Для того чтобы собрать игру воедино, вам нужны навыки решения возникающих проблем, приобретаемые лишь с опытом. Это не то, чему можно научиться из руководств. Лучший способ научиться делать игры — это начать их делать.
Выбор проекта
Итак, с чем же начать? Проще ответить с чего начинать не стоит, а именно с больших проектов, типа полноценной 3D FPS, MMO или даже длинного платформера 16-битной эпохи. Самая распространенная ошибка начинающих разработчиков это начать с большого проекта основанного на Крутой Идее или взять проект, который кажется простым, и закончить с полузаконченной кучей спагетти-кода. Поначалу следует создавать небольшие проекты.
В ранних проектах ваша основная цель учеба, а не реализация Крутых Идей. Поддерживая проект небольшим, вы можете сфокусироваться на изучении новых техник, а не тратить кучу времени на управление кодом и рефакторинг. Несмотря на то, что ваша Крутая Идея может быть офигительно офигенной, реальность индустрии разработки такова, что чем больше проект, тем больше вероятность совершить ошибку в архитектуре. И чем больше проект, тем дороже обходится эта ошибка. Помните историю Дедала и его сына Икара? Дедал создал крылья из воска и перьев для своего сына. Он предупредил Икара не подлетать на них слишком близко к солнцу. Но Икар проигнорировал предупреждение и крылья расплавились, и тогда-то гравитация и https://habr.com/ru/post/160547/настигла его. Поэтому помните: не подлетайте слишком близко к солнцу на ваших новых программистких крыльях. Принимая во внимание все выше написанное, вот пара советов с чего начать.
Графика и обработка событий
Если вы никогда не программировали ничего связанного с графикой или GUI, вам следует начать с чего то маленького, чтобы «обмочить ноги». Моим первым проектом были крестики-нолики, так что даже у меня было скромное начало. Пара идей для первого проекта:
· Симулятор однорукого бандита
· Black Jack
· Крестики-нолики
· Четыре в ряд
Цель вашего первого проекта перейти от консольной разработки к разработки событийных графических приложений. Он так же научит вас фундаментальным основам игровой логики и архитектуры. Я рекомендую что-нибудь пошаговое, потому что игры с движением это совсем другой зверь.
Старайтесь сохранять проект простым, чтобы вы могли его завершить и не потерять интерес на полпути, так никогда и не закончив игру. Важно довести игру до конца, потому что вы не учитесь процессу разработки, если у вас несколько недоделанных игр на жестком диске.
Есть один момент, на который я хочу указать тем, кто будет делать крестики-нолики или четыре в ряд. Не стоит сейчас сильно беспокоиться об искусственном интеллекте. Сделать игру только для двух игроков или для игры с компьютером, который делает случайные ходы вполне достаточно для начала.
Если до этого вы имели дело с графикой и обработкой событий и чувствуете себя комфортно в этой области, можете приступить прямиком к следующему шагу.
Синхронизация, движение, столкновения, анимация
Теперь, когда вы наигрались с графикой, пора заняться чем-нибудь в реальном времени. Вот пару предложений:
· Duck Hunt
· Pong
· Space Invaders
· Galaga
· Тетрис
Здесь вы познакомитесь с движением, временем, анимацией, обнаружением столкновений, игровым циклом, вычислениями очков, побед и поражений и другими важными базовыми концепциями используемыми в каждой игре.
Duck Hunt и Pong — хорошие проекты для тех, кто уже имеет опыт в программировании графики и событий. В них есть простое обнаружение столкновений и все важные основы игр в реальном времени.
Space Invaders и Galaga — хороший выбор для второго/третьего проекта. В них есть уровни, поэтому вам нужно будет узнать как передвигаться от уровня к уровню, при помощи конечного автомата. Вы можете прочитать про конечные автоматы здесь(англ.). Игры в стиле «перестреляй их всех» так же требуют создать простые шаблоны поведения для врагов, что является шагом в сторону искусственного интеллекта.Тетрис хорош для второго/третьего проекта. В нем совсем немного логики нужной для создания игры-головоломки. Это игра приличного размера, так что вам придется научиться разделять вашу программу на несколько исходных файлов, о чем вы можете больше прочитать здесь(англ.). Не недооценивайте Тетрис. Я недооценил и только посмотрите на это жуткое месиво в коде Lazy Blocks.
Переинженеринг
Типичная ошибка новичка это попытка сделать Самую Лучшую Игру Всех Времен, заканчивающаяся переинженерингом. То есть когда он пытается написать самую лучшую игру/движок и это все заканчивается тем, что используется только маленькая часть того что было понаписано.
Когда я был начинающим я переинженерил AI для крестиков-ноликов. Я хотел сделать игру с непобедимым AI. Мне удалось достигнуть этого, запрограммировав компьютер на знание всех возможных ловушек. Звучит круто не правда ли? Это заняло почти 40 000 тысяч строк в основном скопированного кода и месяц моего свободного времени.
Позже я выучил структуры данных и узнал про алгоритм Минимакс, который при меньшем размере кода не только делал нужное, но еще и делал это лучше.
Так что учитесь на моих ошибках и не будьте излишне амбициозны. Концентрируйтесь на обучении тому как делать игры, а не просто делайте их.
Планирование, анализ столкновений, физика, уровни, искусственный интеллект.
Теперь, когда у вас за плечами две или три маленьких игры, пришло время сделать первый крупный проект. До сих пор, вы, вероятно, программировали как придется. Это закончится на этом этапе. В реальном мире большинство процессов разработки завершается до того, как будет написана первая строчка кода. Ничто не может быть хуже, чем осознание того, что для того чтобы добавить в вашу игру то, что вы хотите, вам придется выкинуть весь написанный код, потому что вы не спланировали все заранее. Теперь, когда у вас есть опыт создания игр, вы знаете из чего состоит процесс разработки. Теперь вы можете планировать игры, перед тем как начинать их делать.
Теперь про вашу следующую игру. Break Out и Puzzle Bobble хороши для третьего проекта, потому что они включают в себя продвинутое распознавание столкновений и физику. Физика важна, поскольку дает игре реалистичное ощущение. Даже в Super Mario Brothers есть ощущение гравитации и инерции. Бильярд отличный проект для тех, кто хочет напрячь извилины физикой.
В играх типа бильярда вам нужно не только обнаруживать столкновения, но и обрабатывать их в определенном порядке. Обработка столкновений разительно отличается от их обнаружения. Хотя создание бильярда или 2D платформера может показаться простым делом, анализ столкновений в правильном порядке — запутанный процесс, и не должен быть недооценен.
Break out и Puzzle Bobble так же включают дизайн уровней и требуют загрузки и освобождения их ресурсов. Хорошим опытом будет создание редактора уровней для игры. Редакторы позволяют вам легко создавать уровни и не вынуждают впаивать их в приложение.
Так же вы возможно хотите попрактиковаться в написании искусственного интеллекта (AI). Один из вариантов — вернуться к крестикам-ноликам или четырем в ряд и написать непобедимый AI. Теперь вы уже должны знать структуры данных и сможете использовать знания о деревьях для использования алгоритма Минимакс. С этим алгоритмом вы можете просчитать все возможные исходы крестиков-ноликов и создать непобедимый AI. Забавно расстраивать им своих друзей. Так же вы возможно захотите сделать разные уровни сложности. Игра не приносит радости, если в нее нельзя выиграть.
Pac Man — отличный способ попрактиковаться в написании AI. Нужно будет знать структуры деревьев/графов и алгоритмы поиска, типа A*, для того чтобы призраки могли пройти через лабиринт. Так же нужно будет сделать чтобы призраки работали в команде. Все это пригодится когда вы будете делать игры со сложным AI, типа стратегий в реальном времени. Об основах AI можно прочитать тут(англ.).
Платформеры, Action/Adventure, RPG, RTS, движки
Теперь, когда вы получили опыт создания хорошо спланированной игры, вы готовы к созданию Action/Adventure/Платформера. Это будет кульминация графики, движения, анимации, анализа/обнаружения столкновений, физики, AI, программной архитектуры и всего остального, что вы изучите к этому моменту. Тем кто более амбициозен, можно предложить сделать стратегию в реальном времени(RTS) или ролевую игру(RPG). Будьте осторожны, потому что RPG и RTS действительно огромные проекты.
RPG имеют сложную архитектуру и требуют много планирования. Вам нужно будет спланировать каждое оружие, броню, аксессуар, атаку, предмет, заклинание, призыв, врага, карту, босса, подземелье и т.д. до мельчайших подробностей. Это все должно работать слаженно, и, мягко говоря, это не самая простая задача. Так что если ваш дизайн-проект выглядит как сценарий или комикс, вам потребуется сделать еще много работы.
RTS также сложны архитектурно, а так же требуют много AI. Вам нужно будет делать поиск пути для юнитов, получение ими команд, разное поведение в зависимости от полученных команд. Если вы никогда до этого не делали AI, будет лучше начать с клона Pac Man'а для начала.
Вероятно вам впервые придется делать движок для вашей игры. Чего следует избегать, так это создания универсального движка. Создавая движок не пытайтесь сделать его подходящем для любой игры. Если ваша игра требует x, y и z, делайте движок который умеет x, y и z. Движки создают исходя из того что нужно для конкретной игры, а не из того что любой игре может потенциально понадобится.
Другая распространенная среди новичков ошибка — это попытка создать движок в качестве первого проекта. И обычно это универсальный движок. Вам не нужен движок с фантастической графикой для создания Pong'а или Space Invaders. Программируя, легко закопаться в деталях. Концентрируйтесь на общей картине и завершайте свои игры.
Сеть
Кажется все хотят сделать следующую большую MMO. Создание онлайн игр не то, во что можно быстро вникнуть. Я понял это когда попытался сделать онлайн покер сразу после завершения крестиков-ноликов.
Добавление сети значительно усложняет игру. Когда один игрок что-то делает, вы должны послать информацию об этом всем остальным. Это все равно что если бы ваша правая рука не знала о том, что делает левая. Так же вам придется выбирать между загрузкой сервера и тем что он может контролировать. Чем больше делает серверная часть, тем меньше возможностей жульничать у клиента, но это также означает большую нагрузку на сервер. Для action и других игр с высоким темпом геймплея, вам придется беспокоится о сетевой задержке и потере пакетов.
Вам следует полностью закончить хотя бы одну хорошо спланированную игру, перед тем как пробовать делать сетевую игру. В качестве первого сетевого проекта, попробуйте сделать что-нибудь, что не критично к скорости. Например простой чат-сервер/клиент будет хорошей практикой. Так же можно вернуться к крестикам-ноликам/четырем в ряд и добавить в них возможность играть в по сети. Как вариант попробуйте сделать сетевую карточную или настольную игру.
После того как ваш первый сетевой проект готов, попробуйте сделать что-нибудь в реальном времени. В вашем первом сетевом приложении вы, вероятно, использовали TCP, чтобы быть уверенным в том, что данные которые вы принимаете доходят в том порядке, в котором вы их посылали. Для игр в которых происходит много действий, задержки создаваемые TCP вероятно будут слишком велики, так что вам придется использовать UDP. UDP не гарантирует порядок доставки как и саму доставку вообще. Так как UDP не делает дополнительных проверок целостности он быстрее. Вам придется пожертвовать легкостью использования TCP, в обмен на скорость UDP и необходимость самостоятельной проверки целостности данных при создании игры.
3D игры
Перед тем как делать 3D игры, вам следует сделать хотя бы одну хорошо спланированную игру и иметь хорошее понимание трехмерной векторной математики, линейной и Ньютоновской физики. Тут вам придется иметь дело с вершинами, текстурами, освещением, тенями, опредением взаимодействия с объектами в трехмерном пространстве, загрузку моделей и прочими сложно звучащими вещами.
Хорошая новость в том, что если вы уже сделали 4 или 5 игр, вы уже знаете основы необходимые для создания игры. Вы уже хорошо знакомы с процессом разработки и знаете свои возможности как программиста. Неважно трехмерный шутер или двухмерный, он по прежнему шутер. 2D RPG или 3D RPG по прежнему RPG.
Не считайте это оправданием пропустить 2D и сразу перейти к 3D. Прежде чем научиться бегать, нужно научиться ходить.
Быстрый способ
Говорите, что вы учитесь быстрее если сразу возьметесь за дело и будете просто писать вашу 3D MMOFPSRTSRPG и научитесь тому, что нужно по мере необходимости? Чтож, вот пару советов, которые вам помогут:
· Идите на местный рынок
· Купите целую рыбину. Рекомендую взять лосося или треску, хотя и сом тоже подойдет. Форель, кстати, тоже довольно эффективна
· Идите домой и включите компьютер
· Запустите вашу любимую IDE
· Теперь возьмите купленную рыбу и влупите себе по голове
· Повторите пункт 5, пока мысли о быстром способе не покинут вас
Вы не научитесь алгебре решая вычислительные задачи. Вы учите основы и опираетесь на них. Тоже самое и с программированием. Если вы ищите быстрый способ я тут как тут, чтобы сказать вам что его нет. Не торопите себя. Еще раз: учите основы и опирайтесь на них. Иначе вас ждет фиаско.
Путешествие начинается
Теперь, чтобы у вас было общее понимание того что же все-таки делать, пора начать заниматься игроделом. Я не ожидаю что вы будете следовать этому руководству слово в слово. Все учатся по разному и с разной скоростью. Если вы что-то и должны были вынести из этой главы, так это три вещи:
· Выберите свой темп
· Доделывайте игры до конца
· Концентрируйтесь на обучение, а не просто на создании
Удачи вам на пути разработки игр!
Глава 3. Инструкция начинающего разработчика игр
Источник: https://habr.com/ru/post/153933/
В данной инструкции я попытался осветить основные моменты разработки игр. Инструкция будет полезна для людей, собирающихся заняться разработкой игр в роли лидера (главного разработчика и организатора). Хочу отметить, что игры бывают разные – большие и маленькие, сложные и лёгкие, и поэтому для каждой игры эта инструкция верна в какой-то своей определённой степени. Охватить всё не удалось, но передать общие моменты, думаю, получилось.
Как создать игру и зачем это вообще нужно?
Вы когда нибудь задумывались как сделать свою игру? Я объясню зачем вообще нужно создавать игры и как это сделать.
Главное правило создания игры никогда не отступать даже если что то её получается, а иначе вы забросите игру и не сможете завершить её.
1. Вам нужна сама идея, о чем будет ваша игра? Какая цель игры? Чтобы определиться с этим вы должны выбрать сначала тип игры (шутер, платформер, гонка и т.д.), если не можете придумать идею то найдите её в обыкновенных вещах, как поступили создатели Beholder и Paper, please.
2. Вам нужно записать на бумаге концепт игры, как играть в игру? какова цель игры? о чем будет игра? После этого вы будете иметь представление о том какой будет ваша игра.
3. Расскажите кому нибудь вашу идею, её должны оценить ваши знакомые или друзья, так вы узнаете стоит ли оставить игру или все таки доработать чтобы она всем понравилась.
4. Продумайте как все будет связано между собой и что вообще будет происходить по мере сюжета.
5. Нужно выбрать движок для вашей игры, их очень много: Unity, Unreal Engine, Game Maker Studio и многие другие (см. приложение А). В дальнейших постах будем изучать Unity и возможно Unreal Engine. Нужно изучить программирование чтобы все получилось, это будет в дальнейших постах.
6. Можно приступать к созданию игры.
И так Вы решили сделать свою игру, о чём Вам нужно подумать…
Думаем – нужно ли это тебе.
Перед тем, как за что-то взяться, необходимо всё обдумать. А перед тем, как заняться разработкой игр, необходимо обдумать всё очень хорошо. Очень часто начинающие разработчики, достигнув определённых успехов в чём-то (сделал мод для игры, небольшой фан-сайт и пр.), начинают грезить созданием своей игры. Это происходит из-за того, что они имеют слабое представление о процессе разработки игр. Я перечислю основные ошибки в их представлении:
· Нет романтики. Многие начинающие разработчики, наигравшись вдоволь в игры, приходят к мысли, что создавать игры также интересно, как и играть, только чуть-чуть сложнее. Это очень частая ошибка. Чем больше и сложнее игра тем, скучнее и безынтереснее процесс её разработки. Романтики совершенно нет.
· Трудно и даже невозможно. Многие после нескольких (или даже одного) успешного проекта наполняются уверенностью, что написать игровой проект им по силам. На самом деле, игры – это одно из самых сложных направлений разработки. И чем «серьёзнее» игра, тем проект сложнее. В процессе создания игры разработчик может столкнуться с нерешаемыми проблемами, которые убивают на корню энтузиазм даже у самых упёртых.
· Отвращение к играм. Со временем у каждого матёрого разработчика игр развивается отвращение к играм. Сначала просто они становится менее интересными. Затем начинаешь замечать, что они вовсе не интересны, а интересно только, как они работают. Чем дальше, тем хуже.
· Конкуренция и качество продукта. Играми занимаются многие студии и независимые разработчики. Существует своеобразный «уровень вхождения» в этот бизнес. Сейчас нельзя сделать успешную игру, нарисованную акварелью (да, такие игры встречались в начале 2000-х). Она просто не выдержит конкуренции. Соответственно, абы что не сделаешь. Тут скрывается важный психологический момент – начинающий разработчик вынужден делать хороший продукт, иначе он будет испытывать постоянное чувство страха неуспешности своего продукта.
· Время и ресурсы. И самая распространенная ошибка – это то, что ресурсов (время, деньги, знания) им хватит. Чтобы понять объём работ, читайте следующие пункты.
Концепция и ТЗ.
Что же такое концепция? Концепция игрового проекта — это документ, описывающий цели, задачи, основные особенности проекта, исследование рынка и целевой аудитории, условия его выполнения. Также, так как проект игровой, обязательно описание игровой механики, игровых понятий, примерный сценарий и концепт-арт. Если Вы ещё рассчитываете делать проект не в одиночку (что весьма вероятно), то понадобится ещё техническое задание (ТЗ) – документ, содержащий описание необходимых работ, сроки и условия.
Зачем нужна концепция? Очень хороший вопрос. Зачем заниматься какой-то «писаниной», когда нужно собирать команду и писать код?
В первую очередь концепция нужна, чтобы самому получить полноценное представление о конечном результате и оценить объём работ. Без чёткой и продуманной концепции у Вас в итоге получится, соответственно, противоречивая и непродуманная игра. Без концепции существует большая вероятность возникновения ошибок организации игровой механики или ошибок реализации.
Во вторую очередь концепция нужна для того, что бы другие поняли то, что Вы хотите сделать. Все члены команды должны работать над одним общим проектом. Об этом общем проекте члены команды узнают из документа концепции проекта. Это нужно, чтобы не было расхождений в представлениях о конечном результате. Если Вы решили создать игру и для этого собираете команду, то первые вопросы от будущих членов команды будут: «А что предстоит мне сделать? Что в итоге мы должны получить?». Вы должны будете им предоставить концепцию проекта и ТЗ. Без концепции и ТЗ Вы не привлечёте ни одного нормального специалиста.
Объёмы. Весьма интересен вопрос объёма концепции. Тут необходимо отталкиваться от сложности игры и её разработки. Если у Вас простая игра, Вы работаете один и Вы способны удержать идею игры в своей голове, то можно вообще не писать концепцию. Если удержать в памяти все моменты нельзя, то необходимо перенести их на бумагу (или другой носитель). Если Вы будете работать в команде или использовать помощь других людей (инвесторы, художники и прочие), то Вам просто необходима развёрнутая концепция и ТЗ для каждого человека. Критерий один – понятность. Нужно чтобы любой человек, ознакомившись с концепцией и ТЗ, представил конечный результат, так же как и Вы.
Обратите внимание на то, что, если Вы понимаете свою концепцию, то это не значит, что её поймут другие. Написание концепции выполняет роль «лакмусовой бумажки». Если Вы не можете написать понятную концепцию (примерно, 5 страниц для небольшой игры, несколько десятков страниц для большой), то вряд ли Вы закончите в итоге проект.
Детальность. В концепции должны быть ответы на все вопросы. После прочтения концепции должно сформироваться полное представление о проекте. Специалисты первым делом смотрят на концепцию, если концепция окажется для них не полной и непонятной, то они не будут с Вами работать.
Отдельно стоит упомянуть концепт-арт. Он должен быть, хотя бы в простейшем виде. Он является доказательством решения проблемы с контентом, содержимым игры (смотрите следующий раздел).
Русский язык. Для многих это серьёзная проблема. Если документ концепции содержит множество грамматических, орфографических и синтаксических ошибок, то ни один специалист не воспримет его всерьёз. Помните: незнание русского языка очень вредит бизнесу.
Время. Желательно в сразу в ТЗ указать сроки выполнения работ. Проблема в том, как оценить это время, если никогда подобным не занимался. Точно ответа на этот вопрос Вы никогда не получите, всё придёт с опытом. Я только дам один совет: учитывайте не только время разработки, но и время на исправление ошибок (примерно 50% от времени на разработку).
Контент.
Я специально выделил этот раздел, так как он является решающим в процессе разработки игр. Под контентом понимается всё содержимое игры, с которым взаимодействует пользователь. Это графика (растровая, векторная, 3D), музыкальное и звуковое сопровождение, видеоряд, сценарий и текст. Также сюда следует добавить медиаматериалы, используемые для продвижения игры (реклама, банеры и прочие).
В английском языке есть такое понятие как «artist» обозначающие сразу художников, музыкантов, режиссёров, писателей и прочих творцов. К сожалению, в русском языке нет нормального аналога этого слова, поэтому я дальше буду использовать понятие «создатель контента».
Разберём основные моменты этого раздела.
Сложность. Это самая главная проблема в вопросе контента. Оказывается, в большинстве случаев подготовка контента является самой сложной задачей, сложнее написания программного кода, сложнее тестирования и отладки, и сложнее реализации игры. Естественно, если игра маленькая, то это не так заметно, а если большая, то на долю создателя контента выпадает до 80% работы по проекту.
Объёмы. Часто из-за того, что разработчики никогда не выполняли задачи создателей контента, им очень сложно оценить объёмы. Кажется, что там такого ¬– пара десятков картинок и 3-4 звука. Но если посчитать, то получается 40 крупноразмерных изображений, 400 мелких изображений, два десятка звуков (я привел пример среднестатистической BMMORPG). Хорошо, что это всё можно подсчитать при подготовке концепции.
Качество. Во-первых, надо понимать, что игроки работают непосредственно с контентом. Во-вторых, надо помнить, что существует огромное количество игр-конкурентов с хорошим контентом. Можно сделать вывод: игра с плохим контентом будет не конкурентоспособна, т.е. контент в игре должен быть высокого качества.
Время. Вполне логично, что на подготовку больших объёмов качественного контента уходит очень много времени. Времени уходит больше, чем на все остальные направления вместе взятые (маленькие игры не в счёт). Учитывайте это, когда будете планировать и рассчитывать сроки.
Стоимость контента. Хороший контент стоит «хороших» денег. Очень «хороших» денег, которых у начинающих разработчиков игр обычно нет. Многие разработчики питают иллюзорную надежду найти «бесплатного» создателя контента (или дешёвого). Найти можно, но он либо будет создавать низкопробный контент, либо создаст для Вас немного контента, а затем переметнётся к тем, кто будет ему платить. Короче говоря, «бесплатного» создателя хорошего контента Вы никогда не найдёте. Именно по этой причине нет хороших «OpenSource» игр.
Воровство. Из-за существования проблемы дорогого контента, иногда появляются разработчики игр, которые его воруют. Мол, что такого?.. возьму-ка я из этой игры десяток картинок, а фоновые изображения найду на DA, а в качестве фоновой музыки поставлю пару любимых песенок Rammstein. Проблема в том, что авторское право контента достаточно легко подтвердить. У «жертвы» воровства есть либо исходные файлы контента, либо документ о передаче контента от его создателя. Для воров контента очень велик шанс нарваться на статью 146 УК РФ.
Единый стиль. Ещё один важный момент, о котором часто забывают. Что бы игра смотрелась цельной и продуманной, ей нужно иметь единый стиль. Создатели контента не роботы, поэтому делают работы в своём индивидуальном стиле. Отсюда можно сделать вывод: желательно чтобы содержимое игры создавало как можно меньше человек.
Дилемма. После прочтения описанных выше моментов можно построить следующую цепочку: Конкурентоспособная игра требует использование качественного контента. Качественный контент может сделать только профессиональный создатель контента. Профессиональный создатель контента стоит недёшево. Решений данной проблемы всего лишь три:
Не делать игру, то есть отказаться от направления разработки игр.
Найти инвестора. Но тут сразу нас поджидает проблема концепт-арта. Кто будет подготавливать концепт-арт, если нет денег на художника? А без концепт-арта никто не будет инвестировать в Вас.
Решать проблему собственными силами. То есть кто-то из членов команды должен быть создателем контента и должен получать зарплату, даже если все остальные сосут палец.
Программирование.
Как ни странно, создание программного кода для игр не является самой сложной задачей, но в тоже время и не является простой.
Команда. В отличие от создателей контента программистов для своей команды найти легко. Это объясняется тем, что при определённом уровне подготовки написание программного кода игры не такая уж сложная задача. Можно найти «бесплатных» программистов, готовых работать ради интереса. А за плату и «имя» (упоминание, как разработчика игры) можно найти программиста, который будет писать хороший годный код. Но… сейчас не начало 2000-х и программисты поумнели. Первым делом адекватный программист попросит разработчика продемонстрировать концепцию и ТЗ. Затем спросит про создание контента или финансирование, которое пойдёт на его создание. Специалисты прекрасно понимают, что незачем вкладывать силы в изначально провальный проект. Если у Вас нет концепции и не решен вопрос с контентом, то нормального программиста Вы не найдёте.
Сначала делаем большое, потом маленькое. Достаточно простой совет, но ему чаще всего не следуют. Игровой проект в большинстве случаев сложен и имеет множество зависимостей. Все это сложно просчитать на уровне составления концепции, частенько приходиться что-то менять в планах. Поэтому, чтобы не выполнять двойную работу, сначала необходимо сделать общую работающую конструкцию (прототип), а затем углубляться в детали.
Что сначала контент или код? Прочитав раздел про контент, Вы уже, наверное, поняли, что современные игры основаны на контенте, а не на программировании. Отсюда дилемма – код подгонять под контент или контент подгонять под код. Оба подхода имеют место в современном процессе разработки. Если подгонять код под контент, то нагрузка падает на программиста, время разработки увеличивается. Это дешёвый способ. Если контент подгонять под код, то нагрузка с программиста спадает, и при учёте, что контент подготавливают наёмные работники, время разработки сокращается. Это дорогой способ, так как нагрузка падает на наёмных создателей контента. Заранее оцените ситуацию и придерживайтесь одного из подходов.
Нерешаемые ошибки. Это даже не проблема, а предубеждение. Разработка игры весьма сложный процесс. Бывает, что разработчик сталкивается с нерешаемыми проблемами (либо решаемыми крайне тяжело) и ему приходиться пересматривать чуть ли не весь проект. Психологически это очень трудно. Многие, даже самые упёртые разработчики, попав в такой «тупик», теряют энтузиазм и закрывают проект. Предубеждение в том, что все считают, что с ними такого не случиться. Совет один: будьте психологически готовы пересмотреть весь проект и выполнить работу заново.
Журналы. Совет лично от меня. Ведите три журнала:
Журнал выполненной работы по проекту для отслеживания динамики разработки;
Журнал идей по проекту, чтобы не забыть их и, если возможно, включить в концепцию;
Журнал найденных багов и ошибок, которые необходимо исправить в будущем.
Эти три журнала помогут избежать ошибок и двойной работы в процессе разработки.
Время. При определении времени, которое планируется на написание кода, часто делают одну ошибку – не учитывают затраты времени на исправление багов и отладку кода.
Авторство программного кода. Определённый «маразм» наблюдается, у некоторых программистов. Они считают, что обладают абсолютными правами на код, который ими написан, что даже после релиза игры они могут предъявить права на «часть кода» игры. Что бы защитить это «священное» право они могут пойти на всякие низости (программные бомбы, бакдоры, отказ от передачи исходных кодов и прочие). Мой совет прост – остерегайтесь таких неадекватных программистов. Программный код не контент. Доказать его авторство очень сложно. Поэтому нормальный программист сначала договаривается, что он получит за код; затем его пишет; потом передаёт разработчику и получает вознаграждение; после чего уже ни на что не претендует. Также должно быть организовано и в команде.
Тестирование.
О тестировании начинающие разработчики обычно не задумываются, а зря, так как на него тратиться немногим меньше времени, чем на написание программной части. В этом разделе есть два важных момента:
Тестирование сторонними людьми. В процессе разработки тестирование проводиться в основном своими средствами. Со временем глаза привыкают к имеющимся игровым моментам, вырабатываются умение работать в данной системе, короче, ошибки становятся менее заметными. Поэтому устраивайте периодические тесты продукта сторонними людьми, которые никогда не видели ваш продукт. Следите за их реакцией на различные игровые моменты, как они воспринимают меню игры и, вообще, расспросите их общее впечатление. Поверьте мне, один такой тест даст Вам очень большой объём полезной информации. Проводите их чаще, прислушивайтесь к обратной связи, и Вы получите на выходе хорошую игру.
Женщины. Когда-то я написал неплохую статью про женщин и игры. Смысл в том, что женщины видят всё по другому. Поэтому, желательно, чтобы в тесте игры участвовала хотя бы одна женщина (девушка), даже если игра не рассчитана на женскую аудиторию. Их обратная связь будет невероятно полезна.
Организационные моменты.
Команда. Как Вы могли догадаться, созданием таких проектов, как игры, лучше заниматься командой. Это обосновано тем, что создание контента совершенно другой вид деятельности отличный от программирования и организации проекта и одному заниматься такими разными видами деятельности сложно. Минимальная команда – это два человека, создатель контента и разработчик. Чтобы не было непонимания, уточню – наёмный работник, по-моему, тоже в какой-то мере член команды.
Конечно, можно заниматься разработкой и в одиночку. Есть такие «сумасшедшие», которые и пишут код, и рисуют графику, и сочиняют музыку, но это их проблемы.
Собрать команду при наличии финансирования легко – форумы программистов и создателей контента, биржи фрилансеров Вам в помощь. При отсутствии финансирования можно найти только программиста, а вот нормального создателя контента не найдёте – здесь надо надеяться либо на себя, либо на удачу.
Юридическое оформление. Здесь всё просто. Хотите иметь с игры деньги и обезопасить себя от рейдерского захвата (когда кто-то внаглую ворует вашу игру), то вам нужно юридическое оформление на уровне индивидуального предпринимателя. Если Вы ещё собираетесь распределять проект по долям, то нужно оформление на уровне ООО. Поэтому если при поиске членов команды Вы обещаете долю в проекте, то не удивляйтесь, что Вас будут просить предъявить реквизиты вашей организации.
Контакты. Никогда не пренебрегайте знакомствами. Знакомьтесь с другими разработчиками, общайтесь и обменивайтесь контактами. В будущем, возможно, знакомство с ними принесёт Вам пользу.
Реклама. Так как игр на рынке много, то чтобы пользователи выбрали именно вашу игру, нужно привлечь к себе внимание. Делается это при помощи рекламы на различных ресурсах. Логично, что реклама эта требует: во-первых денег, а во-вторых, рекламный контент (баннеры, видеоролики, статьи). Возможны и другие способы ¬– связи, спам, рекламные акции и прочие, но они не всегда эффективны.
Без рекламы игра, точно также как и без контента, является провальным проектом. Обратите на это внимание. Но тут ситуация может достаточно легко исправлена инвестированием и сторонней помощью.
Инвестирование. Понятное дело, что с деньгами игру делать гораздо легче, но без развёрнутой концепции (с концепт-артом), команды и рабочего прототипа никто не будет финансировать ваш проект. То есть на начальных этапах на финансирование не надейтесь. А вот на последних этапах разработки ситуация может в корне поменяться – могут появиться инвесторы и Вам всё равно будут нужны деньги для организации рекламной компании.
Чтобы найти инвесторов, собирайте контакты.
Сторонняя помощь. Вместо инвесторов можно найти стороннюю помощь (реклама за рекламу, помощь в распространении за процент и прочие). Тут надо ориентироваться по ситуации. Чтобы найти стороннюю помощь, так же собирайте контакты.
Послесловие
Инструкция получилась большой, материала много. Крайне советую прочесть её начинающим разработчикам игр, так как, возможно, она поможет им избежать ошибок в будущем.
UPD: Глава получилась успешной, даже очень. Но в комментариях прослеживаются замечания по поводу отсуствия романтики и отвращения к играм. Поэтому я прокомментирую эти моменты.
Многие опускают тот факт, что глава для начинающих разработчиков игр, претендующих на роль лидера (первый абзац главы). Не буду отрицать, что со временем, когда приобретаешь опыт разработки игр и жизнь складывается удачно, возвращается романтика и отвращение спадает. Но в самом начале, когда начинаешь с нуля, после того как столкнёшься с первыми серьёзными проблемами, эта романтика и любовь к играм исчезает ко всем чертям. Разработка игр — это не прогулка по ковровой дорожке в розывых очках, а блуждание в лабиринте Минотавра, где много тупиков.
Я не собираюсь вселять в начинающих разработчиков уверенность. Они должны знать, что путь разработчика игр сложен, что они могут встретить нерешаемые проблемы, что их нерализованный проект будет для них символом поражения.
Глава 4. Руководство для начинающих создателей MMORPG игры.
Источник: https://gamedev.ru/gamedesign/articles/Create_MMORPG
Автор: Radu Privantu
Оригинал статьи: http://www.devmaster.net/articles/building-mmorpg/ (статья написана 06/08/2004) Перевод: AlexKom
В последнее время очень широкое распространение в мире игр получили многопользовательские онлайновые игры (MMOG — massive multiplayer online game), которые рассчитаны на огромно-большое количество игроков. Конечно, все слышат только об успешных проектах, которые собирают серьезные финансовые доходы. Это и привлекает большинство новичков в игрострое в этот жанр. Однако, мало кто реально представляет себе, какие проблемы и задачи стоят при создании такого рода игр, какими знаниями надо обладать и т.п.
В результате – взявшись сразу за создание такого проекта, новичок быстро понимает насколько все сложно и запутанно. И бросает все, разочаровавшись.
Цель данной главы – дать начальное представление желающим сделать свою игру в стиле MMOG, о том, какими знаниями надо обладать, что нужно уметь и к чему быть готовым. Ведь не секрет, что если человек пробует что-то раз и результат отрицательный — то повторно возвращаться он к этому вряд ли будет. Поэтому хотелось бы предостеречь еще раз желающих окунуться в мир создания таких игр и предложить им еще раз все обдумать и взвесить. Может, стоит начать с более простых игр, чтобы просто получить требуемый минимальный опыт?
Главу такого типа мне хотелось написать уже давно, но я не обладал достаточным опытом в этой сфере. В просторах Интернета мне попалась статья Radu Privantu, который является основателем и руководителем проекта Eternal Lands (www.eternal-lands.com). С его письменного разрешения я перевел эту статью на русский язык.
В данной главе говорится о создании MMORPG (ролевой игры), но я думаю, что описанное в ней относится ко всем типам массивно-многопользовательских онлайновых игр. Эта глава описывает первые шаги в создании Вашей массивно-многопользовательской онлайновой игры. Она предназначена для независимых разработчиков игр, которые обладают ограниченными ресурсами и небольшим опытом. После прочтения данной главы Вы будете знать, что нужно для начала, и получите несколько советов относительно того, что стоит и чего не стоит делать. Самый первый шаг – это оценка Ваших знаний и возможностей. Вы должны быть готовы к ожидающему вас разочарованию из-за потери времени на создание того, что Вы просто не можете сейчас сделать.
Шаг 1. Оценка своих знаний:
Требуемые знания:
1. Знание как минимум одного языка программирования. Сейчас среди разработчиков наиболее популярный язык С++, по причине его преимущества в эффективности и скорости. Visual Basic, Java или C# также могут быть использованы в этом качестве.
2. Необходимо ознакомиться с графической библиотекой. Популярный выбор это SDL, OpenGL либо DirectX/Direct3D.
3. Определиться с сетевой библиотекой. Вы можете выбрать WinSock, SDL_net или DirectPlay.4. Иметь опыт в программировании игр. Для примера, иметь понятие что такое: очередь событий, многопоточность, разработка пользовательского интерфейса (GUI) и т.п.
Очень рекомендуется знать:
1. Клиент-серверное взаимодействие и архитектуру построения таких систем.
2. Создание кросс-платформенных приложений. Вполне возможно Вы захотите создать вашу игру, и главным образом клиент таким образом, чтобы он мог запускаться на различных операционных системах. Для этой возможности я рекомендую использовать SDL, OpenGL и SDL_net.
3. Разработка под веб (Интернет). Это понадобится, если Вы захотите предоставить желающим возможность просматривать статистику по игрокам, информацию о сервере, или любую другую информацию через вебсайт.
4. Защита и администрирование. Вы же не хотите, чтобы кто-то взломал Ваш сервер?
5. Работа в команде, управление командой. Вам нужна будет команда, которой Вы сможете успешно управлять.
Шаг 2. Создание эскиза разработки
Я заметил, что много людей пишут в форумах сообщения о поиске команд для разработки MMOG. Многие из них начинаются такими словами: «Мы – начинающая компания/игровая студия и нам нужны 3 художника, 2 программиста, 1 музыкант и т.д. для создания инновационной, никогда ранее не существовавшей MMOG, в которой Вы будете иметь полную свободу действий и возможности изменения мира и т.п. Мы оплатим Вашу работу по окончании разработки, когда мы сделаем на этом немного денег». К сожалению, с современными технологиями и ограниченной пропускной способностью (сетевой) Вы не сможете создать динамического мира. Попытка создать что-то невозможное приводит к провалу. Правильней будет начать с малой, полностью рабочей, расширяемой системы и архитектуры.
Основная архитектура программы:
Сначала, попробуйте сосредоточиться на создании простейшей клиент-серверной модели, где будут введены следующие возможности:
1. Создание нового персонажа
2. Сохранение этого персонажа (на стороне сервера)
3. Вход в игру персонажем
4. Создать возможность общения с другими
5. Создать возможность передвигаться по миру в 3D
Задача сохранения информации о персонаже на первый взгляд выглядит довольно простой, но это не так. Например, есть два способа это сделать: использовать базу данных или использовать файлы. Далее в таблице приведены преимущества и недостатки для каждого из вариантов:
Базы данных
Преимущества:
Можно легко добавлять или модифицировать поля.
Изменение статистики об игроке (не из игры) гораздо проще
Вы можете быстро и эффективно получать различную статистику, используя SQL запросы
Нет необходимости создавать операции ввода/вывода в файл, база данных все это сделает за Вас
Легко обновлять и восстанавливать
Недостатки:
Легко допустить ошибки. Например, выполнение запроса с забытым оператором ’where’. Это может иметь катастрофические последствия, особенно если у Вас есть только старые (или нет совсем) бэкапы
Работа с базой данных может происходить медленней, чем работа с файлом игрока напрямую. Вы можете потерять несколько миллисекунд, когда получаете данные, особенно если большое количество игроков в одно и то же время входят/выходят из игры
Требуется писать дополнительный код для конвертации Ваших данных в/из базы данных
Требуется опыт работы с базами данных и языком запросов SQL. Также необходимы библиотеки для организации взаимодействия между приложением и базой данных
Если по каким-то причинам файлы базы данных будут повреждены, то Вам не повезло. Вы можете потерять всех игроков (особенно если нет свежего бэкапа)
Файлы
Преимущества:
Очень быстрый доступ (чтение/запись)
Легко имплементируется
Не нужны дополнительные библиотеки
Нет зависимости с сервером базы данных. Поэтому, Вам не нужно заботится о получении обновлений и заплаток для базы данных
Недостатки:
Может быть довольно проблематичным добавить новые поля, если вы предварительно не продумали формат и структуру файла
Невозможно сделать запрос по большому количеству игроков (эту проблему можно решить, используя программу, которая каждую ночь добавляет важные данные на сервер базы данных)
Требуется написание специального кода, для возможности обновления/проверки статуса игроков
Немного сложнее для выполнения операций обновления и восстановления
Теперь, когда Вы определились, как сохранять информацию о персонажах, Вам нужно решить какой сетевой протокол Вы будете использовать для клиент-серверного взаимодействия: TCP или UDP? TCP известен как более медленный, но зато более аккуратный, он требует дополнительной пропускной способности. На практике, я не замечал каких-либо проблем при использовании TCP. Если у вас предусмотрена достаточная пропускная способности сети, TCP – это хороший выбор, по крайней мере, для начала. UDP может быть очень неприятным, особенно для начинающих. Помните о том, что первичные тесты движка и игры будут делаться в Вашей локальной сети, поэтому все пакеты будут приходить к месту назначения в таком же порядке, что и отправлялись. Но это не может быть гарантировано при работе через Интернет, т.е. в реальной среде. В то время, как обычно пакеты прибывают в заданном порядке, некоторые из них могут теряться, и это постоянная проблема для Интернета. Конечно, Вы можете разработать свой протокол таким образом, чтобы клиент/сервер могли восстанавливать потерянные пакеты. Но это тяжелый процесс, который не рекомендуется для начинающих.
Шаг 3. Разработка внутреннего протокола для передачи игровых данных
Эта задача также выглядит простой, но опять-таки, это не так. Вы не можете просто отправить строку с символом терминального нуля ‘\0’. Вам будет нужен совместный протокол, который будет способен передавать как строковые, так и бинарные данные. Неблагоразумно в таком случае использовать 0 (или любой другой набор) в роли терминаторного элемента, потому что этот терминатор может оказаться частью потока данных, который Вы посылаете. Кроме того, если Вы хотите отправить 20 байт, а затем еще 20 байт, скорее всего сервер не получит пакет с 20 байтами, а затем еще один пакет с другими 20 байтами. Вместо этого, он получит сразу 40 байт, так как это снижает нагрузку на сеть за счет заголовка пакета (будет отправлен один, а не два заголовка). Точно также Вы можете отправить пакет размером 1 кб, но сервер получит два пакета меньшего размера. Таким образом, необходимо знать где пакет начинается и где заканчивается. В проекте Eternal Lands использовался следующий метод:
Смещение 0: 1 байт, определяющий передаваемую команду.
Смещение 1: 2 байта, длина передаваемых данных.
Смещение 3: переменная длина, тело сообщения.
Этот метод имеет преимущество: все данные передаются соответственно определенному стандарту. Недостаток – некоторые команды имеют фиксированный, заранее известный размер, поэтому часть трафика расходуется зря. В конечном счете, мы переключились на использование гибридного решения.
Следующий вопрос для принятия решения – какую модель использовать на сервере: «неблокируемые сокеты, однопоточное приложение» или «блокируемые сокеты, многопоточность». Оба метода (много- и однопоточный) имеют свои преимущества и недостатки.
Многопоточный:
1. Более аккуратный отклик от сервера, в то время когда игроку понадобится много времени (например, чтение данных из базы), то это будет выполняться в его собственном потоке, не трогая других игроков.
2. Очень сложно отлаживать и реализовать: Вам потребуется создавать много синхронизаций, и малейшая оплошность может привести к тяжелым последствиям (падение сервера, дублирование предметов и т.п.).
Однопоточный:
1. Намного проще реализовать и затем отлаживать
2. Большее время отклика
В моей компании, мы пошли по пути однопоточного приложения, потому что у меня просто не было достаточно ресурсов и для того, чтобы справиться с созданием многопоточного решения.
Шаг 4. Клиент
Вы планируете создавать двухмерную или трехмерную игру? Некоторые считают более простым вариантом создание двухмерной игры. Я создавал оба типа, и склоняюсь к мнению, что делать 3D проще. Позвольте мне объяснить почему.
В 2D, обычно у Вас есть frame буфер, который представляет собой большой массив пикселей. Формат этих пикселей может различаться для различных видеокарт. Некоторые работают в режиме RGB, другие – в BGR режиме и т.д. Число бит на цвет также может различаться. Это относится к 16-ти битному видеорежиму. 8-ми и 24 битные видеорежимы более просты, но у них есть свои проблемы (8 бит – дают всего 256 цветов, в то время как 24-х битные режимы более медленные). Также Вам нужно будет сделать свои функции для работы со спрайтами, самостоятельно делать сортировку объектов для отображения их в правильном порядке. Конечно, вы можете использовать OpenGL или Direct3D для двухмерной игры, но обычно, это того не стоит. Не все владеют видеокартами с 3D ускорителями, поэтому использование для двухмерной игры 3D библиотеки дает Вам только потери в обоих случаях: не все смогут играть в игру, и Вы не будете использовать возможности создания хороших теней, камер, и других замечательных вкусностей, специфичных для трехмерных приложений.
Создание трехмерного клиента, как я говорил, легче, но требует определенных базовых математических знаний (особенно тригонометрии). Современные графические библиотеки очень мощные, и предлагают реализации базовых операций бесплатно (Вам не нужно заниматься сортировкой объектов; можно легко изменять цвета и/или текстуры для объектов; объект будет освещен в зависимости от своего положения относительно источников света, если вы рассчитаете нормали для него; и прочее). Кроме этого, 3D дает Вам гораздо больше свободы в творении и передвижении. Недостатками данного решения можно назвать то, что не все смогут играть в Вашу игру (Вы будете удивлены тем, как много людей не имеют видеокарт с 3D ускорителем), и что пререндеренная графика всегда будет выглядеть лучше, чем графика отрендериваемая в реальном времени.
Шаг 5. Безопасность
Естественно, пользователям нельзя доверять. Никогда не думайте, что пользователи не смогут разобраться в Вашей замечательно продуманной схеме шифрования данных (если Вы таковую используете) или в протоколе. Все что пользователь отправляет на сервер должно быть проверено. Скорее всего, на Вашем сервере будет несколько буферов фиксированного размера. Для примера, обычно создают небольшой (порядка 4 кб) буфер для входящих данных (из сокетов). Злоумышленник может отправить очень большой пакет данных. Если его не проверять – то это действие приведет к переполнению буфера, после чего последует падение сервера или в худшем случае, злоумышленник получит возможность взломать Ваш сервер, запустив на выполнение любой код. Каждое сообщение должно быть проверено: не произошло ли переполнение буфера, не пришли ли неправильные данные (например, пользователь присылает «войти в дверь», а дверь находится на другом конце карты, или «использовать лечебный эликсир» в то время как у пользователя нет нужного зелья и т.п.). Я повторю еще раз: очень важно проверять все приходящие данные. Когда же происходит обнаружение хакинга, запишите это в лог: в чем суть нарушения, имя пользователя, его IP адрес, время и дата. И время от времени проверяйте этот лог. Если вы обнаружите немного нарушений от многих пользователей, то это, скорее всего, ошибка в коде клиента или проблемы с сетью. Однако, если вы обнаружите много нарушений от одного и того же пользователя или IP адреса – это показатель того, что кто-то «забавляется» с сервером, пытается найти способ взломать его или запустить свой макрос/скрипт. Также, никогда не храните данные на стороне клиента. Клиент должен получать все свои данные с сервера. Другими словами, клиент никогда не должен отправлять данные, вроде следующих: «так, это список моих предметов» или «у меня сила равна 10, манны – 200 и жизни 2000 из 2000». Также, клиент не должен получать данных больше, чем ему нужно. Например, он не должен знать, где находятся все другие игроки. Ему нужно знать только о тех, кто находится рядом с ним. В этом есть здравый смысл, так как отправка всех игрокам данных обо всех игроках приведет к большому трафику, и некоторые игроки взломают клиент для получения для себя cheat-преимуществ (показать точные месторасположения игроков на карте). Это все выглядит довольно понятным, но, опять-таки, Вы будете удивлены, увидев, сколько людей не обладают тем, что мы называем «здравым смыслом».
В целях безопасности скорость передвижения игрока рассчитывайте на сервере, а не на клиентской стороне. Сервер должен следить за временем (в миллисекундах) когда игрок выполнял последние передвижения, и если запросы на перемещение приходят чаще, чем установлено порогом, то эти запросы должны быть проигнорированы. Не стоит создавать запись в логе для таких запросов, так как они могут возникать из-за сетевых задержек (например, из-за лагов все данные от игрока за последние 10 секунд были приняты сразу).
Проверяйте дистанции. Если игрок пытается торговать с другим игроком, который находится за 10 биллионов километров от него (или более того – на другой карте) – сохраняйте в лог такие события. Если игрок пытается посмотреть или использовать объект игры, который находится далеко от него – также записывайте это. Будьте осторожны с использованием поддельных ID. Например, это обычная практика назначать ID (идентификационные уникальные номера) каждому игроку. ID может назначаться игроку при входе в игру, или он может быть постоянным (назначается при регистрации игрока). Если ID назначается игроку при входе в игру (или при создании монстров), вполне возможно использовать позицию (индекс) в массиве игроков в качестве ID.
Итак, первый игрок который залогинится получит ID 0, второй – ID 1, и так далее. Скорее всего у Вас будет установлен лимит, скажем, в 2000 индексов для списка игроков. Таким образом, если клиент пришлет команду вроде: «посмотреть на актера с ID 200000» - это приведет к падению сервера, если по неосторожности выполнение такого действия приведет к неправильному обращению к памяти. Итак, делайте проверки вроде: «если актерID<0 или есть актерID>=максимального значения индекса, тогда сделать запись в логе и отключить игрока». Если Вы создаете программу на С или С++, позаботитесь также об определении индекса типом ‘unsigned int’ и проверяйте верхнюю границу, или если Вы почему-то определили индекс как тип ‘int’ (по умолчанию тип ‘int’ – знаковый), помните о необходимости проверки на <0 и >= max значению. Невыполнение этого правила приведет к большому количеству ошибок для Вас, и разочарованию для игроков. Аналогично, проверяйте координаты на выход за границы карты. Если у Вас реализован на сервере в некотором виде поиск пути, и клиенты перемещаются путем указания позиции на поверхности, убедитесь, что они не указывают места за пределами карты.
Шаг 6. Создание команды
Создание игры — это трудоемкая работа (за исключением Пинг-понга или тетриса). Это особенно важно для MMORPG игры. Вы просто не сможете все сделать в одиночку. В идеале, команда должна состоять из следующих людей:
Как минимум 3 программиста: 1 для разработки сервера, и 2 для клиента (или 1 для клиента, 1 для инструментария вроде плагинов для художников, редактора мира и т.п.). Хорошо если у Вас будут до 6 программистов, больше 6 – уже слишком много. Все это зависит от Вашего умения руководить. Как минимум будет нужен 1 художник, но лучше 2 или 3. Если Вы создаете трехмерную игру, то потребуется 3D художник, 2D художник (текстуры, интерфейс и пр.) и аниматор, а также руководитель отдела художников. Если Вы плохо знакомы с художественной разработкой, то опытный художник поможет арт-отделу оставаться единым и скоординированным.
Несколько человек, для создания игрового мира: создание всех карт мира очень долгий процесс, и он очень важен для создания удачной игры. И снова, Вам будет нужен лидер для команды разработчиков игрового мира. Вы не можете просто взять кого угодно, чтобы они делали что угодно. Так Вы не сможете получить качественно проработанный игровой мир. А ведь именно такой Вам нужен, не так ли?
Веб-мастер нужен в случае, если Вы сами не сможете сделать хороший веб-дизайн, или не хотите потратить часть своего времени на разработку качественного сайта.
Иметь в штате композитора и мастера по звуковому сопровождению не обязательно, но игра с музыкой и звуками будет более приятной, чем без них.
Разработчик игровой экономики. Вы можете подумать, что это просто, и Вы сможете сделать это все самостоятельно, но фактически – это один из самых сложных вопросов. Если Ваша экономика плохо просчитана (например, вещи не сбалансированы, ресурсы на карте размещаются случайным образом и т.п.) игрокам будет либо скучно, либо они разочаруются, и уйдут. У нас была большая проблема на одном из этапов ранней разработки, потому что экономика была сделана вручную мной (программистом), и не была правильно спланирована. Позже нам потребовалось 2 месяца для пересоздания и реализации новой экономической системы. Это также потребовало полного уничтожения всех вещей. Позвольте напомнить, что пользователи очень не любят когда удаляют все их предметы. К счастью, большинство из наших игроков согласилось на внесение новой системы, но было обидно провести много часов в обсуждении, поиске компромиссов, объяснениях и, в итоге, потере времени. Еще об экономике поговорим позже.
Исходя из приведенных данных, получается для команды нужно 10-15 человек, не включая модераторов и администраторов. Эти 10-15 человек должны иметь опыт работы в своих областях деятельности. Если они все новички, то обычно работать с ними не стоит, так как Вы должны будете проводить очень много времени, объясняя им что и как делать, почему они что-то делают неправильно и т.п.
Найти 10-15 человек с самого начала, скорее всего, будет невозможно. Не имеет значения, сколько сообщений Вы оставите на различных форумах, Вы не сможете получить сразу квалифицированных работников в команду. В конце концов, если у кого-то есть хороший опыт, кто захочет присоединиться к проекту, в котором еще ничего нет? У многих людей есть замечательные идеи, но их реализация потребует много времени и усилий, поэтому они намного охотней будут работать над своими собственными проектами. Итак, если Вам нужно 10-15 человек, но у Вас не получается привлечь их в команду, то как вы сможете создать свою MMORPG? Что ж, в действительности, Вам не понадобятся все эти люди сразу. Все что нужно для начала – это 1 программист и 1 художник. Если Вы программист – просто найдите художника. Попросите друга или знакомого, который умеет рисовать, помочь вам и, если нужно, оплатите потом выполненную для Вас работу.
Ну что, у Вас есть художник и будем надеяться идея как должна выглядеть игра. Теперь время начинать воплощать эти идеи в жизнь. Когда у вас появится частично работающий серверный и клиентский движок, и несколько скриншотов для демонстрации (или что-нибудь лучше, например, возможность игрокам войти в мир, походить и осмотреться вокруг, поговорить с другими игроками в игре), многие захотят присоединиться к Вашей команде. Желательно, пока Вы не используете в Вашем клиенте уникальные разработки и технологии сделать клиентское приложение open source (программа с открытым исходным текстом). Многие программисты предпочтут присоединиться (в качестве волонтеров) к такому проекту, чем к проекту с закрытым исходным кодом. Сервер же в свою очередь должен быть с закрытым исходным кодом (исключая тот случай, что Вы разрабатываете полностью open source MMORPG).
Еще пара советов: не хвастайтесь (не афишируйте) Вашей игрой до тех пор, пока у Вас не будет хоть что-то для демонстрации. Одна из самых раздражающих вещей – когда новичок оставляет сообщения вроде «требуется помощь», приглашает большое количество людей в команду, рассказывает о том, какая классная игра будет. Но пройдя дальше по линкам на такой проект (обычно он располагается на бесплатном хостинге) вы увидите потрясающее меню, содержащее в себе секции вроде «Скачать», «Скриншоты», «Концепт-арт», «Форум» и пр. Вы нажимаете на ссылку «скачать», и получаете красивую картинку «в процессе разработки» (или ошибку 404 в худшем случае). Когда Вы нажимаете на ссылку «скриншотов» - получаете аналогичный результат. Если у Вас нет файлов на скачивание, не создавайте ссылку «Скачать». Если нет скриншотов – не создавайте и этот линк тоже. Лучший вариант – это не тратить свое время на создание сайта до тех пор, пока у Вас не будет готово как минимум 10% проекта (как кода, так и арта).
Шаг 7. Развеем мифы
1. Вы не можете сделать MMORPG, для этого требуется большая компания.
Я не согласен с этим. В то время как создание игр World of Warcraft, Ever Quest 2, Asheron’s Call 2, Lineage 2 и других невыполнимая задача для небольших независимых команд разработчиков, создание скромной игры вполне возможно, и зависит только от уровня Вашего опыта, мотивации и свободного времени. Вам потребуется не менее 1000 часов для программирования, чтобы создать простую техническую демо-версию, и вероятно до 10-15 тысяч часов для полного завершения создания сервера и клиента. Но как руководитель команды Вы должны будете делать намного больше, чем просто программировать. Держать команду вместе, разрешать конфликты, делать публичные заявления (PR), техническая поддержка, настройка серверов, решение вопросов с блокировкой игроков, «мозговые штурмы», и т.п. будут сопровождать Вас все время. Эти заботы засосут вас полностью. Скорее всего, Вам также надо будет ходить на работу/в школу, что еще больше будет урезать время, которое можно посвятить проекту. Нам очень сильно повезло, что ни один участник команды не ушел из нее, но если бы это случилось, то это могло бы стать большой проблемой. Только представьте себе, что ваш художник уходит в середине проекта. И что еще хуже, он не оставляет права использовать его работы далее. Конечно, эта проблема может быть решена при условии наличия контракта, но искать нового художника будет утомительным занятием. Использование двух различных художественных стилей в одном проекте также будет проблемой.
2. Требуется большая сумма (4-6-тизначная) для поддержания серверов.
Это неправда. Я видел много выделенных серверов с ограничением в 1000 Гб/месяц за ~100 долларов/месяц. Если ваш протокол передачи данных хорошо разработан, этих 1000 Гб вполне достаточно для сервера с постоянно подключенными 1000 игроками (в среднем). Конечно, Вам может потребоваться еще один сервер для веб-сайта и клиентских файлов на скачку (скачивание файлов клиентами может серьезно увеличивать трафик, особенно если игра станет популярной). Наш клиент занимает приблизительно 22 Мб, и иногда у нас получается порядка 400 Гб в месяц трафика. И мы не особо популярны (пока еще). Еще один момент, Вы, скорее всего не захотите делать выделенный сервер для запуска проекта. Сервер, подключенный к сети через DSL соединение, вполне может подойти вначале, пока у Вас будет в онлайне 20-30 игроков одновременно. Затем можно найти кого-нибудь, предоставляющего хостинг, кто позволит разместить сервер у них в обмен на некоторую рекламу или за небольшую плату (из своего кармана).
3. Создание MMORPG очень увлекательно.
Это тоже не правда. Может быть, Вы считаете, что все будут с пониманием относиться к Вам, что игроки будут помогать, что Вы сможете сделать инновационные квесты, и будет много игроков в Вашей игре. Игроки могут быть раздражающими. Даже если это полностью бесплатная игра, они все равно найдут повод для недовольств. И самое неприятное – люди часто жалуются на совершенно противоположные вещи. Воинам не нравится то, что очень долгое время нужно набирать новый уровень, в то время как торговцы будут разочарованы в том, что воины получают много денег с трофеев. Если Вы уменьшите выпадающие из монстров трофеи, некоторые люди начнут угрожать своим уходом из игры. Если увеличите – те же люди будут недовольны тем, что теперь даже новички могут легко делать деньги. Но оставлять все как есть – это не лучшая идея. Здесь нужно использовать новые идеи и улучшения. Если Вы решили изменить что-либо, например, добавили новые проблемы для тех, кто производит предметы, некоторые скажут что это слишком сложно. Если Вы этого не сделаете – они скажут что это очень просто или скучно. Вы должны помнить, что большинство игроков обычно ничего не говорят и полностью удовлетворены всем, в то время как некоторая часть будут постоянно жаловаться.
Экономику в MMORPG намного сложнее сбалансировать, чем в игре для одного игрока. В одиночной игре Вы можете постепенно улучшать оружие, так что игрок постепенно продвигаясь вперед, может получать лучшее снаряжение, при этом бросать (или продавать) старое. В многопользовательской игре такой подход провален, так как каждый будет пытаться получить лучшее оружие, игнорируя худшее. Множество игроков предпочитают не использовать оружие вначале, а сохраняют финансы для приобретения потом сразу лучшего из возможного вооружения в игре. Разработка экономики заслуживает написание собственной книги.
Все что я перечислил к данному моменту, вместе с дополнительной работой и проблемами должны заставить Вас подумать как минимум дважды, прежде чем вы займетесь таким серьезным проектом. Вы должны понимать все последствия Вашего выбора.
Заключение
Надеюсь, эта глава дала Вам дополнительную информацию о создании MMORPG. Моя следующая статья будет о том, как просчитывать экономику (более подробно, с описанием ошибок, которых нужно избегать) и немного информации о проведении отладки сервера и клиента.
Об авторе
Эта статья была написана Radu Privantu, ведущим программистом и руководителем проекта Ethernal Lands www.eternal-lands.com, бесплатной, с открытым кодом клиента MMORPG. С ним можно связаться по адресу chaos_rift at yahoo dot com.
Глава 5. Создавая миры: как создать свою РПГ?
Источник: https://kanobu.ru/pub/446558/
25 августа 2018
Мы играем в Diablo, Witcher, Dragon age, Mass Effect, Black Desert и многие многие ММО и RPG, rouglike и игры с элементами РПГ. Зачастую мы не задумываемся как все работает и устроено внутри игры, по каким правилам живет сама игра. Это нужно только некоторым из нас, для того чтобы достичь наивысших результатов. И все же мы задаемся вопросами - почему нельзя добавить определенную фичу, поменять правила , сделать нечто принципиально иное и более проработанное. Сегодня я постараюсь ответить на эти вопросы.
Для начала - почему мана? почему хп? везде одно и тоже, когда появится НОРМАЛЬНЫЙ рандом а не ВКР от которого глаз не дергается только у мертвых? Почему нельзя взять и сделать офигенную симуляцию жизни окружающих персонажей?
Хорошие новости - в своей игре вы можете все это сделать
Плохие новости - не каждый может сделать свою игру
Проблемы и их решения
- сложность расчетов и объем работы;
- нарративность происходящего;
- тестирование и отладка;
- бюджет ;
1 Сложность расчетов и объем работы
Итак в чем же сложность ? Любите математику? Тогда для вас проще, но..
А - Создание простых формул:
- расчета урона персонажей и игрока; < testing;
- регистрации попаданий по персонажам и объектам;(easy)
- расчет здоровья, скорости движения, скорости атаки и прочих параметров;
- создание алгоритмов респауна, условий смерти и тд.(easy);
- создание списка игровых объектов и их внедрение;(easy);
- создание условий и алгоритмов перехода между локациями, уровнями;
B - Создание сложных штук:
- AI(либо просто хороший алгоритм) для респа противников согласно БИОМАМ ;(hard)
- условия воздействия параметров игрока и персонажей на окружение и других персонажей;
- создание алгоритма смены погодных условий и воздействия погодных условий на персонажа;
- создание дроп листа, привязка дропа к предметам и персонажам, ввод определения "редкости" и условий получения свойств и качеств, либо системы генерации свойств оружия и предметов в рамках заранее прописанных параметров и свойств;
- расчет показателей урона от скиллов, взаимодействия скиллов, создание конечных автоматов для анимаций(объем), условий взаимодействия скиллов, програмирование шейдеров (для Unity есть Shader Graph, он упрощает в разы все);
- создание гибкой и крутой боевой системы, с расчетом времени нажатия кнопок, задержкой между ударами, различными сериями, привязка направления движения к удару. с этим любой проект превращается в зубодробительный слешер с крутой боевкой, но если нам это не нужно то задача становится в разы проще. Как пример любая игра из серии Batman ,Devil May Cry, Street Fighter , Witcher;
С - Создание УЛЬТРАСЛОЖНЫХ ФИШЕК:
- создание AI Director, это АИ который сам натравливает на тебя врагов в зависимости от того КАК ТЫ ИГРАЕШЬ , меняет погодные условия, регулирует динамику происходящего. Подобная система есть в Left 4 Dead. Это удобно для того чтобы подстраиваться под игрока и делать его жизнь невыносимой, объем работы очень большой;
- создание самообучающегося исскуственного интеллекта противников, использование нейросетей для обучения AI. Вот она настоящая боль, требуется огромный объем вычислительных мощностей для создания умных противников неимоверной крутизны.
Заставить все это работать как единый механизм - MISSION IMPOSSIBLE
У нас есть живой мир с симуляцией погодных условий в котором игрок и персонажи влияют на окружение, вырубают леса, охотятся, убивают друг друга, строят дома, торгуют и тд. Есть сложный мир в котором ночью монстры нападют на деревни , бандиты грабят караваны и насилуют женщин. Когда на улице жарко у торговцев портится рыба на солнце, навоз от коров начинает невообразимо вонять и дебафать персонажа на какую нибудь дичь и тд. Дождь делает скалы скользкими и с них легко сорваться. Наше оружие у нас прямо из рук может выхватить монстр, сломать его и тогда нам придется ломать ему лицо руками.. А что дальше?
Как во все это ИГРАТЬ а не страдать, как вести повествование? АИ режиссер справится с сценами и будет создавать экшен там где игрок есть, но это слишком большая и сложная комплексная система, для того чтобы использовать ее где угодно, как все это упростить, но оставить мир живым и интересным?
Например. Вася пошел в магазин, купил 2 сникерса (мы не видели как он туда ходил), вышел из магазина и встретил Петю,Петя попросил у Васи один сникерс, Вася не захотел делиться и пошел домой. В итоге сейчас мы говорим с Петей о том что Вася жлоб и не делится ништяками. Мы не видели этой ситуации, но мы знаем о ней. Откуда? Нам рассказал Петя.
Вывод.
Нам не нужно быть очевидцем события, нам нужно ЗНАТЬ о них, иными словами нам нужна информация.
Т.е игра должна донести до нас что Вася жлоб, через Петю. Нам будет достаточно просто скрипта и заранее заготовленных сцен , заранее заскриптованных сцен, заранее ПРОПИСАННЫХ , пусть их будет 200-300 событий, но это проще чем заставить игру СОЗДАТЬ эти события.
Ведь игре нужно будет учитывать характер НПС (!) их показатели и МОТИВЫ (никто не говорил что будет легко) симулировать действия и ВЫБОР НПС (!) , затем сообщать о результате события игроку, создавать условия на месте действия (раскидать трупы дроп и тд.)
И еще все это должно быть НАРРАТИВНЫМ , т.е вписываться в сюжет и не противоречить созданной ИГРОВОЙ РЕАЛЬНОСТИ. Т.е если средневекового рыцаря забили фаллосами инопланетяне, это здорово, но если это не игра по лицензии South Park , то подобное событие не должно существовать в НАШЕЙ ИГРОВОЙ ВСЕЛЕННОЙ.
Именно это ключевой момент для создания УБЕДИТЕЛЬНОСТИ происходящего.
Поэтому в многих ММО трудно вжиться в роль, есть голдселлеры, куча лишенго в чате и прочие радости.
О том как все это систематизировать, отрезать лишнее, оставить лучшее и при этом сохранять единство вселенной в следующем материале.
UPD
Я не ответил на вот эти вопросы. Решил сделать большой материал и разобрать на конкретных примерах, для тех кто не любит читать будут красивые картинки.
Для начала - почему мана? почему хп? везде одно и тоже, когда появится
НОРМАЛЬНЫЙ рандом а не ВКР от которого глаз не дергается только у мертвых? Почему нельзя взять и сделать офигенную симуляцию жизни окружающих персонажей?
Глава 6. Руководство по созданию крутых MMORPG для новичков
Источник: www.gamedev.ru/gamedesign/articles/killer_mmorpg_guide
Автор: Дмитрий Литовченко
Эта глава создана с целью раздачи ссылок и экономии набранного другими программистами текста на форуме. Надеюсь, я смогу говорить более точно и справедливо от имени всех разгневанных разработчиков. Однако знайте, что в конце я постараюсь закончить всё на позитивной ноте.
Если вы читаете эту главу, ожидая настоящего руководства по созданию концепта, дизайну, программированию, работе с сетью, отладке, полировке, маркетингу, распространению, управлению, обеспечению безопасности и постоянной разработке нового контента для вашей MMO, которая выходит через несколько месяцев, тогда вы также можете захотеть позвонить на бесплатный номер 1-800 чтобы заказать чудесные таблетки для потери веса и книги о том, как вы можете (ДА ВЫ МОЖЕТЕ!) стать миллионером посредством онлайн аукционов.
Вот, первое, что вы заметили в предыдущем параграфе (это на самом деле было всего лишь одно предложение), это количество враждебности. На самом деле такой ответ не сильно отличается, а в чём-то и гораздо более мягкий ответ, чем ответы самых профессиональных и опытных разработчиков, которым доводится читать посты про «дизайнера MMO» на форумах едва ли не каждый день. Каждый раз когда мы возвращаемся на форум, появляется очередной человек, без опыта программирования (или с минимальным), объявляющий, что его новая MMO FPS RPG будет новым убийцей WoW или Oblivion. Итак, перед тем, как мы программисты заработаем плохую репутацию за то, что мы пессимистичные интернет-головорезы, дайте мне объяснить почему мы отвечаем то, что мы отвечаем.
Вот краткий пример типичного поста про MMO:
Автор: ((куча разных людей))
Всем привет,
Я и мои друзья собрались вместе и мы готовим план для новой и интересной MMORPG.
Прямо сейчас дизайн на бумаге, но мы планируем скоро начать программирование,
у нас есть пара вопросов:
Какой язык программирования использовать?
Есть ли где-то сборники уроков по созданию игр и программированию сети?
Какой движок выбрать для MMO?
Наша новая идея ((вставьте название концепта, который уже был сделан 10000 раз))
и мы думаем, это будет действительно круто. Я дизайнер игры, и несколько человек мне
помогают, но нам нужны программисты. Если Вы хотите присоединиться, пишите нам на
убогий.адрес@бесплатнаяпочта.ру
Вместо того, чтобы пройтись по примеру сверху вниз, я сначала обращу ваше внимание на более общие проблемы.
Это *оскорбляет* нас, как программистов
Игры ещё не являются зрелым средством массовой информации, и многие люди не принимают их всерьёз. По разным причинам бесчисленные люди думают, что программирование игр — лёгкая работа для бездельников, когда на самом деле — это одна из самых сложных трудовых карьер, по которой может пойти человек. Результат очень поощряет, но только потому, что это настолько безумно сложно. Такой тип сообщения на форуме буквально оскорбителен для нас, потому что сказать «у меня нет опыта в программировании, но я легко сделаю MMO», на самом деле звучит как «То, чем вы, парни, гордитесь, *таааак* легко сделать.»
Это является чуть ли не основной причиной, почему мы настолько враждебны. Даже если вы не сказали это открытым текстом, мы видели такое же отношение к нам столько раз, что мы через время просто начинаем представлять себе невидимые слова и читать между строк, даже если вы не имели этого в виду. Итак, мы пояснили защитный ответ, но есть ещё другие вещи, которые нас тоже утомляет повторять, такие как:
Вы не являетесь дизайнером, и вам он не нужен
Писатель? Хорошо. Дизайнер характеров и персонажей? Хорошо. Дизайнер уровней? Да. Дизайнер? Нет.
«Дизайнер» — это один из самых общих существующих терминов, и весьма мало людей знают, что означает это слово. Идея игры, где вы находитесь на Луне, в виде ниндзь и сражаетесь с крабами-мутантами это НЕ дизайн, это концепт (и к тому же весьма убогий в этом случае). Дизайн вычёсывает всевозможные аспекты игры очень мелкой гребёнкой и продумывает все мелочи.
Возьмём для примера систему укрытия от огня противника в Gears of War:
Что определяется, как укрытие.
Может ли укрытие «сломаться», прийти в негодность?
Какие анимации понадобятся персонажу, чтобы присесть (встать) в укрытие, стрелять оттуда, перезарядиться, выйти из укрытия, и т.д.
Какие клавиши игрок должен нажать, чтобы присесть за стену или встать за угол?
Как насчёт выйти из укрытия?
Как не дать врагу, идущему из-за вашей спины, убить вас, когда вы в укрытии и не видите, что происходит сзади?
Предыдущий вопрос не может быть решён универсально, поэтому для каждого игрового уровня нам нужно убедиться, что такая ситуация не возникнет.
Как вы укроетесь от Берсеркера? (проблема, с которой, я думаю, они не очень хорошо справились)
Берсеркеры — слепые существа, чувствующие запах и тепло, атакующие на звук, могут с разбегу пробить обычную кирпичную стену
Как насчёт предотвращения случайного использования укрытия, когда вы этого не хотите? (Проблема, на самом деле, не была решена в первой части GoW)
Этот список может продолжаться до 60 или 70, но я остановлюсь здесь.
Я бы мог целый день продолжать обсуждать один аспект игры, и это всего лишь ничтожная часть всей игры. Очевидно, я не могу перечислить всевозможные аспекты дизайна MMO, но вот в одной статье была попытка это сделать.
Итак, вы решили сделать MMORPG? А хорошо ли вы всё продумали?
Это хорошо составленный и достаточно длинный список, но даже в нём далеко не всё раскрыто.
Итак, мы разобрались, что объём дизайна для хорошей игры ошеломляет. Но давайте посмотрим, почему, как самостоятельному разработчику, вам даже не потребуется дизайнер...
Команда, которую вы собираете.
Если вы потратили ваше время на прочтение статей, и особенно той статьи, ссылка на которую была дана чуть выше, я с уверенностью скажу, что вы — один из тысячи. Но не более. Вы один из тысячи, и это значит, что найти кого-то ещё с напором и целеустремлённостью, чтобы удержать проект на плаву, будет невероятно трудно. Вы можете найти другого участника через Интернет, а если очень повезёт, троих целеустремлённых людей. С таким количеством людей и потребностью в программистах и художниках, вам не хватит ресурсов чтобы выделить роль «дизайнера».
Я знаю, о чём вы думаете, я когда-то тоже про это подумал впервые... что вы с вашими друзьями сделаете это вместе. Давайте я скажу настолько чётко и понятно, насколько это возможно, — это ЭПИЧЕСКИ плохая идея! Я потерял нескольких друзей при нелицеприятных обстоятельствах, следуя такой логике, пожалуйста, не делайте такой же ошибки. Это всегда плохая идея смешивать серьёзное дело и дружбу, и у меня рухнули и сгорели два проекта из-за этого.
Хорошие участники команды ищут хороших лидеров.
Не поймите меня превратно, вполне реально собрать хорошую команду, но вам понадобится осязаемый продукт. Хорошие разработчики и программисты умны, и они, по своему опыту, ищут лидеров, которые не бросят проект на полпути. Лучший способ сделать это — с помощью прототипа, на который можно посмотреть, играбельная демо-версия является большим плюсом. Разработка играбельной части игры очень увеличит ваши шансы собрать сильную команду вместе.
Но давайте закончим с этим вопросом, потому что я сбился с темы.
Если Вы задаёте пространные вопросы о языках программирования и движках, вы не готовы создать 3D игру, не говоря уже про MMO.
Это простейшее правило жизни, если программист спрашивает «Какой движок мне подходит?», тогда вероятно он не имеет ни малейшего представления как ими (движками) пользоваться и что они из себя представляют. Зная насколько сложны движки, за этим вопросом последуют множество других вопросов по выбранному движку.
Этот вопрос на самом деле бесполезно задавать, поскольку в мире нет доступных публично движков, позволяющих выдержать масштабы настоящей MMO, это проблема железа серверов, а не программного обеспечения. Не смущайтесь, существуют движки, позволяющие принять больше подключений, чем обычный мультиплейер, но ничего отдалённо приближающегося к масштабам MMO.
Примечание: Как я упомянул ниже, мне следовало подчеркнуть разницу между глупыми вопросами о движках, обычными вопросами о движках и обычными вопросами новичков. Вы можете спросить «какой движок мне использовать», но лучше всего задать такой вопрос с предоставлением информации о вашем проекте. Не существует движка-повелителя, выкованного в огне Роковой Горы, который бы делал всё, что может вообразить простой смертный. На каждый сценарий имеется движок, примерно подходящий под его потребности. Это нормально — задавать вопросы о движках, но указывайте ваши потребности и цели. Если вы новичок, и вам требуется хорошая инструкция как научиться программировать, просмотрите некоторые старые темы и статьи на форуме, перед тем, как задавать вопросы на форумах. Задавать вопросы хорошо, но оглянитесь вокруг, скорее всего на них уже есть ответы.
Не существует уроков «как сделать MMO».
Если бы такие существовали, это был бы исторический документ. Даже более простые однопользовательские игры не могут быть описаны простым пошаговым уроком, из-за массивного количества работы, знаний и опыта, который вкладывается в них, и просто не может быть передан эффективно в форме текста. Это как сравнить чтение про футбол с реальной игрой в футбол. Как читать про страну или жить в ней.
Все эти аргументы даже не должны были прозвучать, потому что:
Это просто бесцельно и непрактично
После некоторого количества дебатов, многие согласились, что теоретически (с небольшой целеустремлённостью) возможно создать MMO, но невозможно:
Собрать базу игроков достаточно большую, чтобы квалифицировать проект как MMO.
Позволить себе серверное оборудование и «грубую» компьютерную силу, чтобы выполнять код сервера быстро и надёжно.
Управлять оборудованием и программным обеспечением, а также обеспечивать защиту от хакеров.
Управлять созданием дополнительного контента, чтобы поддерживать развитие и жизнь MMO.
И как только вы учтёте все эти факторы, то поймёте, что просто непрактично создавать такую игру вообще.
Теперь, раз идея друзей и людей играющих вместе является привлекательной, есть гораздо более простое решение для этого:
Создайте многопользовательскую игру
Есть огромная (или может, массивная) разница между MO и MMO. Поддержка сетевой игры сложная, но определённо не невозможная, и часто встречается в играх, написанных одним программистом, или маленькими командами. Многопользовательская или совместная сетевая игра очень даже возможна, и я бы рекомендовал вам взяться за такой проект, хоть, вполне вероятно, вы и не закончите игру (это просто сухие цифры статистики), но это послужит отличным опытом. С другой стороны, работа над MMO оставит вас смущёнными, с небольшим головокружением, невозможностью продвигаться вперёд, и массой потраченного времени в конце.
Но прежде всего, повторю что-то, что надо повторять постоянно:
Устанавливайте себе реальные цели
Pong -> Крестики-нолики -> Тетрис -> Mario -> doom
Поднимайтесь постепенно по этой «карьерной лестнице». Делайте мелкие, играбельные части этих игр, которыми можно делиться с игроками, и смотрите, сколько сил это отнимает. Я бы оценил среднее время, которое требуется людям, чтобы сделать нечто подобное в 10-13 месяцев, учитывая, что они уже были знакомы с компьютерами в общем. Как в любом деле — начинай с малого, двигайся к большому.
Когда-то я слышал, как кто-то сказал «Если вы стартовали на Луну и промахнулись, то вы летите к звёздам», и мой ответ был «А, вы имеете в виду тот марсианский зонд, который промахнулся мимо точки посадки, разбился и сгорел?»
Идея в том, что чрезмерные амбиции убивают проект, и мы все с этим знакомы. Когда я был моложе, я начинал несколько проектов, и примерно на 20% каждого из них, я понимал, что я ничего нового больше не узнаю, и если его не закончить то потраченное время казалось потерянным. Я запомнил этот урок и теперь ставлю меньшие и более реальные цели, чем те, что я ставил раньше. В результате я наконец-то нашёл удобную мне скорость изучения новых технологий, и когда остаётся ещё много нового материала для изучения, я знаю, что это очень поможет ускорить работу. И я знаю, что это поможет вам (ДА, ВАМ!) сделать то же самое.
Оригинал (английский): A guide to creating killer MMORPG's
Перевод: © kvakvs.
Глава 7. Создание собственной ролевой системы, или что нужно помнить чтоб не родить V.T.N.L.
Обещанного, как говорится, три года ждут, но я все же успел пораньше. Итак, обещанный пост про системы собственного изготовления.
Итак, по какой-то неизвестной мне причине вы решили создать собственный набор правил. Первое на что стоит обратить внимание – не изобретаете ли вы велосипед. Нет, серьезно. Если вы хотите игру про страдания вампиров в современности с линиями крови кланами и жизнью на грани обычного мира – возьмите Vampire: the masquerade. Если в правилах существующей системы чего-то не хватает или она просто не имеет перевода, то время затраченное на введение нужного комплекта хоумрулов и локализации все равно будет меньше чем на переизобретение системы. В случае с переводом в сети вы, скорее всего, сможете найти группу единомышленников и распределить работу между собой. Существует такой термин – Heartbreaker. В свое время на волне популярности D&D была выпущена прорва разной степени успешности проектов, которые по сути и духу были копией D&D и та толика оригинальности, которая в них была, терялась на фоне множества схожих элементов. Естественно, большинство из этих проектов кануло в лету и не оправдало времени потраченного на их разработку.
Следующим шагом стоит определиться, для чего вы делаете систему. Если это домашний проект, который нужен для вас и ваших игроков, то в принципе, вы не ограничены ничем. Если вы хотите создать систему имеющую коммерческую ценность, здесь вас ждет множество сложностей. Для начала затруднительно издавать игру самому, а издательств готовых принять систему у неизвестного человека, да еще и отчислять ему худо-бедно разумные деньги, на просторах СНГ раз-два и обчелся. Следом идут заморочки с авторскими правами. Здесь вас могут ждать подводные камни на каждом шагу. Например, знаменитая контора Games Workshop пыталась запатентовать волчьи шкуры на доспехах, им это не удалось, тем не менее могут найтись более умные и хитрые патентные тролли. На дальнейших проблемах я не буду останавливаться, потому что ролевая игра такой же продукт как любая иная настолка , техника или, допустим, книга. Создание и продвижение своего продукта труд тяжкий и неблагодарный, а статей по этому поводу написано множество.
Итак, теперь к сути. Еще до того как вы начнете что-то делать, сразу говорю, отбросьте мысль об универсальности. Не пытайтесь оцифровать все аспекты поведения персонажей, NPC и мира в целом. Почему? Потому что вы сделаете F.A.T.A.L. Эта система в основном знаменита количеством внимания, уделяемого различным сексуальным аспектам жития персонажей, однако редко кто добирался от этого пункта. Почему? Потому что создатели F.A.T.A.L. действительно попытались оцифровывать все мыслимые и немыслимые заявки. В итоге нашлось не слишком много желающих продираться сквозь множество таблиц ради того чтобы бросить кость на Anal Circumference. F.A.T.A.L. стал легендарной игрой в которую никто не играет. Вряд ли вы хотите такой судьбы для своего детища.
Из предыдущего пункта закономерно вытекает следующий – не гонитесь за количеством. Я понимаю что хочется чтобы в вашей системе была сразу же сотня рас, пара сотен классов, арсенал в несколько тысяч разнообразных орудий смертоубийства, заклинаний и полезного шмота. Но вы не сможете этого сделать. Не составит особого труда накидать сотню вариантов оружия ближнего боя, прикинуть их урон и характеристики и свести их в табличку. Однако вложенный труд не оправдается. Чаще всего результатом будет либо длинный список примерно одинакового оружия, либо тот факт, что часть списка будет иметь серьезные преимущества перед остальными пунктами. В качестве живого примера могу обратить ваше внимание на то, что большинство крупных систем в стартовом наборе содержит относительно скромное количество контента. Можно сказать, что это происки маркетологов, чтобы оставить простор для заработка на дополнениях. Отчасти это справедливо. Но подумайте сами, будет ли интересно новому игроку долго выбирать между скаббардом, шашкой, абордажной саблей и еще десятком представителей клинкового оружия, которые в игромеханическом смысле практически идентичны. Вы, безусловно, можете заморочиться и дать каждому орудию убийства точные характеристики и область применения соответствующую историческому прототипу, однако здесь встанет вопрос балансировки всего этого счастья. Оно вам надо? Если вы хотите разнообразия, проще будет ввести общие правила для оружия разделив его на типы, как стандартный пример – колющее, дробящее, режущее. Таким образом, вы упростите балансировку и избавите себя от необходимости сравнивать трезубец с катаной. Дальше стоит ввести несколько свойств для оружия – клинковое, тяжелое и древковое к примеру. Собрав свойства и типы в одну таблицу вы получите простой конструктор, который позволит оцифровывать любое нужное вооружение. Это же относится и к магии и к стрелковому оружию.
Расы. Здесь очень многое зависит от сеттинга, если вы хотите вести игру в мрачных реалиях окопной войны, начала двадцатого века, эльфы и барды достаточно плохо впишутся в подобные реалии. Конечно, при должной фантазии и таланте можно и подобное устроить, но рассчитывайте свои силы, иначе получите цирк вместо вселенной. Касательно рас здесь тоже можно сделать конструктор, однако далеко не всегда стоит давать его игрокам, лучше использовать его для своего удобства. Основная опасность в конструкторе – создание игроками рас, которые будут ломать вашу любовно выписанную вселенную. Однако для вас такой конструктор может стать мощным инструментом, выпишите себе некоторые свойства – примерный рост, вес, общий размер, склонности. А дальше оцифровывайте представителей ваших рас по этой таблице. Чем больше свойств тем уникальнее расы, тем сложнее их сбалансировать. Ну и конечно можно обойтись без рас, заменив их национальностями, предысториями или чем-нибудь еще, суть одна, сделать каждого персонажа изначально уникальным.
С классами можно поступить, так же, как и с расой, однако я бы посоветовал попутно ознакомиться с системами без классов. Отличный пример – Dark Heresy 2.0 от Fantasy Flight Games. На первый взгляд данная система предлагает стандартный выбор из трех элементов – прошлое персонажа, его родной мир и роль. Однако если посмотреть внимательно, основное что дает этот выбор – склонности персонажа и нескольо стартовых талантов. Как только придет время распределять опыт, игрок обнаруживает, что ему доступны все варианты талантов и умений, вопрос лишь в цене, которую как раз определяют эти самые склонности. Естественно это создаст некоторые проблемы с балансировкой, но в то же время даст возможность игроку создать именно того персонажа которого он сам пожелает.
Здесь же стоит уточнить про систему повышений, большинство сразу вспомнит стандартные уровни из D&D. Однако это не единственный вариант. Вполне возможно полностью или частично отказаться от уровней. В пример частичного отказа можно привести все те же вархаммеровские линейки от Fantasy Flight Games – Rogue Trader и Dark Heresy (в данном случае речь идет о первой редакции). В этих системах уровни заменены на ранги, ранг повышается когда персонаж тратит некоторое количество очков опыта. Казалось бы никаких отличий? Но нет. После каждой сессии персонаж получает опыт который может потратить немедленно, однако только на те умения и способности что указаны в табице текущего и предыдущих рангов. Начиная с системы Black Crusade, FFG отказались от системы рангов, сменив его на упомянутую выше систему склонностей, аналогично линейке World of Darkness от White Wolf Publishing, игрок получая опыт может тратить его немедля и без ограничений по уровню. Для балансировки такой системы служат склонности и пререквизиты скиллов и талантов.
Навыки таланты и прочие вещи. Для того чтобы определиться со списком, подумайте о том какие задачи будут решать персонажи. Исходя из обычной деятельности персонажей, стоит строить список улучшений персонажей. Здесь главное – не переборщить. Например в Pathfinder, в сравнение с его прародителем – D&D 3.5, объединили навыки spot, listen, search в один – perception. Это чертовски логичный ход, особенности персонажей можно отобразить бонусами и штрафами к навыку, а уменьшение списка навыков уменьшает количество информации в и без того сложной системе. Есть вариант поступить еще проще – привязать разрешение заявок к базовым характеристикам персонажей, избежав системы скиллов вовсе. Здесь все зависит от желаемой глубины оцифровки. С базовыми харатеристиками тоже можно поступить по разному. Чаще всего они присутствуют в том или ином варианте. Но вариантов этих великое множество. К примеру в FATE существует система аспектов, которая не является привычным комплектом дискретных характеристик, а скорее описывает персонажа в духе «большой и сильный».
Здесь стоит упомянуть о том, что есть две грани ролевых игр – нарратив и механика. Так или иначе, все РПГ балансируют где-то между этими крайностями. Нарратив это повествовательная часть, повинующаяся фантазии и задумкам мастера и игроков, то, что должно привести игроков к использованию собственно механики. Например, ваша заявка «я подхожу к двери и осматриваю ее на предмет ловушек», это нарратив, за ней последует проверка навыка поиска ловушек, предполагаемая механикой системы. Словески полностью отбрасывают механику, оставляя все заявки на откуп фантазии игроков и мастера, тяжелые системы вроде GURPS наоборот стараются оцифровать максимум действий персонажей. Нельзя сказать однозначно какой подход лучше. Очень многое зависит от идеи игры и желаний тех, кто в нее играет. Нарратив дает куда больший простор для действий, позволяет решать нестандартные заявки, но куда сложнее балансируется и часто вызывает спорные ситуации. Механика позволяет избегать споров и давать конкретный ответ на стандартное действие. Важно соблюсти баланс составляющих.
Что касается механики, важнейшее что вам нужно сделать – продумать систему разрешения заявок. К примеру, Паладин Василиус хочет покарать зомби словом своего божества. Механика должна подсказать Василиусу что и как он должен проверить чтобы определить успешность своих действий. Чаще всего заявки разрешаются кубиками. Вот несколько вариантов – World of Darkness бросается соответствующее проверяемому навыку количество костей d10 против выбранной мастером сложности. Сложность определяет значение на кубике которое определяет успех. Количество успехов и провалов определяет насколько хорошо или плохо персонаж прошел тест, вызывая соответствующие последствия. D&D – бросается кубик d20, к которому прибавляются модификаторы навыка, против заявленной мастером сложности. Если число на кости + модификаторы больше или равно сложности, заявка пройдена. Dark Heresy 2.0 – Бросается кубик d100, против значения характеристики + бонус навыка и модификаторы броска которые назначает мастер. Если значение на кубе меньше чем проверочное, заявка успешно пройдена с одной степенью успеха, за каждую разницу между числом десятков проверочного значения и числом десятков на кубе персонаж получает дополнительные степени успеха или неудачи, если бросок провален. Также существуют системы где проверки проходят без броска кубов, а например простым сравнением характеристики со сложностью или с помощью карт влияющих на ситуацию. Если вы хотите придумать свою систему разрешения заявок, ваша основная задача сделать ее максимально зависимой от персонажа. Повышения навыков и характеристик должны увеличивать шанс успешного исхода заявок, иначе у игрока нет стимула играть, приобретать опыт и прокачиваться.
Ну и последнее на сегодня – вы делаете игру не только для себя. Кто-то будет играть в нее, иначе зачем она нужна? Если у вас уже есть люди которые хотят водиться по вашей системе – используйте их. Создавайте партии для тестирования, спрашивайте, слушайте их советы и мнения. Все это поможет вам взглянуть со стороны . Не бойтесь манчкинов и оптимизаторов, они, на данном этапе, ваши лучшие друзья. Они найдут и ткнут вам в нос каждую дыру в балансе которую только можно найти. Покажут вам баги которые можно использовать для получения нечестной выгоды или слабые места мира, которые позволяют ломать повествование. Не стесняйтесь , пусть вашу игру обругают, пусть вас пошлют нахер, но это гораздо лучше, чем получить тот же результат, потратив много времени и труда на разработку. В качестве примера – V.T.N.L., маловнятное произведение одного российского толкиениста, по его словам, игра делалась 13 лет, при этом доступна была узкому кругу друзей. Так же создатель игры намерено оградил себя от общения с иными системами. Что в итоге? Получился стандартный хартбрейкер, практически без собственных идей, зато чуть более чем полностью построенный на рандоме и бросках дайсов по любому поводу. Естественно, ознакомься он с опытом других, дай народу попробовать раннюю верси, он был бы справедливо послан нахер, расстроился бы и, возможно, никогда бы не завершил проект. Но разве 13 лет потраченных ровно с тем же результатом лучше? В общем и целом, главное - хорошая игра, та в которую кто-то играет.
Глава 8. За пределами массива
Источник: https://habr.com/ru/post/500244/
Усталость
Смотрю в код и совершенно не понимаю, что он делает. Мысли путаются, вижу знакомый синтаксис и набор конструкций, но информация на экране монитора абсолютно не несет для меня никакой смысловой нагрузки. Читаю код построчно, делаю даже пометки в черновике, пытаясь понять алгоритм, но вскоре все сваливается в бессмысленную кашу. Слишком мало кофе или слишком много? Последнее время у меня к нему выработался иммунитет. Выпиваю его словно воду и кажется, что эффект нулевой, но без него никак. Дедлайн наступает на пятки. Руководство дает о себе знать все чаще. Еще один сорванный дедлайн и, пожалуй, мне предложат искать новую работу. От психологического давления и ограниченных сроков исправлять баги становится только тяжелее. Как же много багов и легаси кода, пытаюсь разложить по полками и размотать этот клубок, но все тщетно.
Я слишком глуп для этой работы. Может сказывается отсутствие математической базы? Или может просто нет таланта. Наверное, у меня другой склад ума. Смотрю по сторонам и вижу беззаботный смех моих коллег, кажется, что им дается все намного легче. Код на кончиках пальцев. У меня все не так. Хотя это пройдет, я точно это знаю. Как только я закрою этот проект, появится легкое чувство эйфории, так бывает всегда. А потом, снова окунувшись в очередное болото программного кода, ты теряешь веру в себя. Это “колесо сансары” и я из него не выйду никогда.
Сегодня уйду с работы вовремя. Когда наступает такой момент психологического истощения, лучшее что можно сделать — это отправиться домой, принять душ и хорошенько выспаться. Главное не открывать лэптоп. Никакого ютуба и сериалов. Это не отдых. Или что еще хуже, можно обнаружить себя на рассвете, лихорадочно прочесывающим “stackoverflow” в поисках обхода очередного бага в библиотеке. После чего ты внезапно вспоминаешь, что на самом деле собирался выспаться.
Рабочий день закончился, пожалуй, прогуляюсь до дома пешком. На улице прохладно, осень дает о себе знать. Тем лучше. Это освежит мне мозги. Сегодня никаких походов в магазин, в холодильнике осталась пачка пельменей, они и пойдут в ход.
Наверное, самое больше проклятье программиста — это то, что он может работать и без компьютера. Мысленно программируя и решая очередную проблему. Порой отвлечься, и переключиться ты просто не в силах. Замороженные пельмени слиплись в единый ком, я смотрю на эту картину и почему-то думаю о “связанных списках”. Наблюдаю за тем, как варятся пельмени и на бурлящую воду. Одни пузырьки очень быстро сменяют другие. Подумал о “сортировке пузырьком”. Не самый эффективных метод сортировки, подумал про себя. Все. Хватит! У меня уже едет крыша. Нужно срочно перестать думать о работе, иначе я просто сойду с ума. Быстро поужинать и в душ, срочно в душ. Все будет завтра, а сегодня я безмерно устал.
Моя усталость настолько сильная, что не помню, как ложился спать. Мне кажется, я не уснул, я просто провалился в беспамятство. Хоть не забыл поставить будильник. Все же завтра снова на работу. Но это будет завтра. Обычно такой сон идет по одному сценарию: ты просто закрываешь глаза и, кажется, через мгновение открываешь их, но уже утром.
Измененное состояние сознания
В этот раз я проснулся посреди ночи. Первая мысль, которая пришла мне в голову — сколько сейчас времени? По ощущениям это глубокая ночь. Мозг отказывается обрабатывать информацию и норовит снова провалиться в сон. Пытаюсь потянуться за телефоном. Что за бред? Я не могу этого сделать. Мое тело не слушается, кажется, я не могу пошевелиться. Пытаюсь прийти в себя. Такого ведь просто не может быть. Что со мной? Снова делаю значительные усилия. И.…, ничего. Просто не могу привести в действия не единый мускул на теле. При этом чувствую свое дыхание. Да, я определённо дышу. Сердцебиение учащается. Кажется, меня охватывает паника. Точно не знаю, но по ощущениям у меня появляется испарина на лбу, и я становлюсь мокрым. Сердце практически выпрыгивает из груди. Тело полностью обездвижено, но сознание при этом ясное. Я умираю? Что мне делать? Пытаюсь закричать, и понимаю, что сейчас это мне тоже не под силу. Видимо для этого должны быть тоже задействованы какие-то мышцы. Так, так, наверное, нужно успокоиться. Мысленно пытаюсь привести в норму частоту сердечных сокращений. Пытаюсь замедлить дыхание. «Спокойно, спокойно», — мысленно повторяю я себе. Кажется, сердцебиение постепенно приходит в норму. Но что дальше? Я даже не могу никуда позвонить. Через сколько меня найдут? Через неделю? Месяц? Я просто умру с голода. Нет, не от голода, от жажды. Кажется, дыхание постепенно успокаивается, а сердце уже не пытается выпрыгнуть из грудной клетки. Просто лежу и смотрю в темноту, не в состоянии поднять веки. Они бесконечно тяжелые.
Не знаю сколько времени прошло. Может час, может больше. Кажется, я начинаю слышать какие-то звуки. Может прихожу в себя? Этот звук усиливается, нет скорее он приближается. Он напоминает шум прибоя. Интересно, что за окном моей однокомнатной квартиры может происходить, что издает такие звуки, да еще и посреди ночи? Звук становится все ближе. Похоже он движется с невероятной скоростью и скоро настигнет меня. В какой-то момент он становится совсем рядом. Нет, это точно не похоже на шум моря. Рев невероятно громкий, он меня пугает. Сейчас что-то произойдет. Интересно, какая вероятность, что прямо на многоквартирный дом падает самолет? Ничто другое в голову не приходит. Что еще может издавать такой всепоглощающий рёв? Хлопок. Мое тело пробило током. Неприятно ощущение по всему телу. Боли нет, но это настолько неприятно, что, наверное, боль переносилась бы легче. Ток пульсирует по всему телу, его частота увеличивает с каждой секундой. Хлопок. Меня куда-то выкинуло.
Другая реальность.
Я стою посреди какой-то комнаты. Это точно не моя квартира. Слишком темно, а у меня всегда проникает свет от уличных фонарей и рекламных вывесок. Это сон? Или я умер? Если это сон, то сознание слишком ясное. Правильней сказать, что оно кристально чистое как никогда. Теперь я полностью чувствую свое тело. На мне моя одежда и кроссовки. Я потер свои ладони друг о друга, чувствую их тепло. Поднимаю глаза и вижу вдали, что-то похожее на светящийся монитор. Это что шутка? Подхожу ближе, да это определенно монитор, на вскидку 29 дюймов по диагонали. Нигде не могу разглядеть фирмы производителя. Никогда не видел такой раньше. Он абсолютно без каких-либо рамок. Только сплошной дисплей. Не вижу ни проводов, не системного блока. Только стол, на котором он стоит и кресло. С виду удобное. Вокруг кромешная темнота. Только в радиусе десяти, восьми метров легкое освещение. Быть может это от экрана монитора, но оно довольно объемное, вряд ли весь свет исходит от него. Посмотрел вокруг, других источников света я не вижу. Оглядываюсь чтобы осмотреться, может быть в этой условной комнате есть что-то еще? Да точно, какой-то небольшой шкаф, он находится справа от стола, на котором стоит монитор. Подхожу ближе и понимаю, что это не шкаф — это прозрачный холодильник. Внутри подсветка желтого цвета. Пытаюсь разглядеть содержимое и вижу, что это холодильник с напитками. В отличии от мониторов эти напитки очень даже узнаваемы. Как же хочется пить, это то, что мне сейчас нужно. Холодильник забит банками с Coca-Cola и Pepsi. Очень медленно и осторожно открываю дверцу холодильника. Протягиваю руку и беру банку с Pepsi. Рука сразу чувствует смену температуры. По ощущениями в холодильнике градуса четыре. Баночки с напитками покрыты конденсатом и капельками воды. Беру одну из банок и чувствую приятный холодок тонкого алюминия. Осязание настолько реально, что сложно передать словами. Открываю банку с характерным шипением и делаю глоток. Тут же чувствую знакомый сладкий вкус. Газировка приятно обжигает горло. Этот вкус очень яркий, наверное, такое же ощущение я испытывал в далеком детстве впервые попробовав этот напиток. Если я на том свете, то пока мне здесь неплохо. Хотя признаться, если у меня, когда и были мысли о его существовании, то представлял я его себе несколько иначе. Надеюсь на компе есть игры, не код же здесь писать вечность.
Закрыл холодильник и обнаружил уже слева от стола еще один шкаф. Да, на этот раз это был действительно шкаф. В три раза больше и немного выше, чем холодильник. И похоже больше здесь ничего нет. Походил с банкой в руке по ограниченному пространству. Да, определенно это все что здесь есть. Подошел к шкафу. Это книжный шкаф, он сверху донизу забит книгами. И это не фэнтези или поэзия. Книги очень узнаваемы: Дональд Кнут “Искусство программирования” — четыре тома, Бьерн Страуструп “Язык программирования C++”, Томас Кормен “Алгоритмы. Построение и анализ”, Макконнелл “Совершенный код”. Похоже здесь вся основная литература по Computer Science. То, до чего всегда не доходили руки. Да кого я обманываю, просто мне было лень. Повернулся и справа мой взор снова приковал экран. Почему-то до этого момента мне не приходило в голову посмотреть на изображение монитора. И стало понятно почему. Там был темный экран. Вернее, там была консоль, где красовалось приглашение ввести login. На столе была еще клавиатура. Мыши не было. Да, в Doom похоже не поиграть. Конечно, об этом я думал не всерьез. На самом деле меня беспокоило другое. Где я? Если это странный сон, в котором я нахожусь словно в реальности, то как мне проснуться? Если меня уже нет в живых, то что совсем этим делать, не сидеть же мне здесь вечность?
Немного потупив в монитор, я сделал еще глоток охладительного напитка и поставил баночку на стол. “login… login..”, — проговорил я вслух. Что будет, если введу правильные учетные данные? Что будет дальше? Можно, конечно, встать и пойти прочь от этого места. Но куда? В кромешную тьму? Как-то не хочется. И если меня выбросило именно сюда, значит с моей стороны нужны какие-то действия. Не газировку же попить… Впрочем этой возможностью я уже воспользовался. Ничего не изменилось. С другой стороны, все могло бы оказаться намного хуже.
Ну предположим логином может быть root. Почему нет. Каким он может быть еще в данных обстоятельствах. А вот что делать с паролем? Откуда мне его знать? Никаких загадок или подсказок, ничего нет. На предложение ввести пароль, я нажал просто “Enter”.
Access denied.
На моем лице появилась ухмылка, да, это было бы слишком просто. Я решил походить и подумать. Подошел снова к холодильнику и уже не особенно осторожничая взял новую банку напитка. В этот раз это была Coca-Cola. И почему эти напитки здесь такие вкусные? Словно я их пробую впервые. Задумчиво подошел к книжному шкафу. Перебирая в голове варианты. Хотя какие могут быть варианты. Может среди книг есть ответ? Поставил банку на стол. Кстати, где здесь мусорная корзина? Взял первую попавшуюся книгу Кнута. Книга как книга, новенькие страницы. И пахнет она тоже новой, и даже корешок при открытии приятно хрустит. Взял еще несколько с полок, ничего необычного. Сел за стол и наобум ввел еще несколько вариантов пароля.
Access denied.
Access denied.
Access denied.
Видимо я что-то упускаю. Я откинулся на спинку кресла и закрыл глаза. И через мгновение на моем лице появилась улыбка. Почему мне не пришла эта мысль раньше? Если предположить, что это сон, хоть и очень странный, и пугающе реалистичный, значит все, что здесь есть, это плод моего воображения. Почему бы там не быть моему собственному паролю от моего домашнего лэптопа? Это же еще проще чем отсутствие пароля! Быстро ввожу логин: root, пароль: ********* и моя рука замирает над клавишей “Enter”. А что, если я просто проснусь? Что если мне был дан какой-то шанс, а я им не воспользовался? Книги… Я ведь даже не попробовал их почитать. Указательный палец мгновенно несколько раз нажал клавишу «Backspace». Я быстро встал и подошел к книжному шкафу. Взял тяжеловесную книгу Кормена “Алгоритмы. Построение и анализ”, медленно подошел к столу, где стоят мониторы, сел и открыл первую страницу. Сколько же я пытался прочитать, а главное понять эту книгу. Брался за ее чтение, потом бросал, предпринимал новые попытки ее прочитать, но мне она оказалась не по зубам. Но здесь все иначе. Я проглатывал страницу за страницей с невероятной скоростью и полным погружением. Не знаю как это объяснить, но я не читал текст. Когда мы в детстве учимся читать, то мы сначала учим буквы, затем учимся читать слова, а слова складывать в предложения. Но это был какой-то иной уровень восприятия информации. Мне достаточно было посмотреть на страницу, как все укладывалось по полочкам в моей голове. Это были знания и опыт одновременно. Мне казалось, что со мной разговаривает старый приятель, которого я знаю всю жизнь. Нет, это был даже не приятель, а я сам, из будущего, который разобрался давно в этой теме и решил мне объяснить настолько понятно, как не объяснил бы никто иной. Будто эта книга написана специально для меня, она знает меня. Она мой лучший друг. Не прошло и получаса как книга была прочитана, оставив сладкое послевкусие. Когда ты прочитал лучшую книгу в своей жизни и после ничего другого читать не хочется. Ты думаешь о том, что вряд ли тебе удастся найти что-то лучше, что-то более стоящее. Следующими были классика Дональда Кнута. Усваивать информацию у меня получилось все быстрее. Через некоторое время я поймал себя на мысли, что перелистываю по несколько страниц за раз, ни чуть не теряя нить повествования. На четыре тома у меня ушло всего 20 минут, не больше.
Почему здесь так мало книг? Я не хочу чтобы они заканчивались, я как ненормальный проглатывал одну за другой. Меня переполняли эмоции, эти книги были лучшими и самыми захватывающими произведениями из когда-либо мною прочитанных. Я был одержим, меня ничего в жизни настолько не захватывало. Я просто купался в потоке информации, я упивался ею, она наполняла меня смыслом и жизненной энергией. Спустя четыре часа в шкафу не осталось непрочитанных мною книг.
Испытание внутри системы.
Настало время для ввода пароля. И откуда у меня была уверенность, что моя догадка с паролем верна? Но я почему-то в этом не сомневался. Чтобы там ни было, я к этому готов. Немного волнуясь, я наконец ввел логин и пароль, затем без промедления нажал “Enter”.
Я был внутри системы. На мониторе появился исходный код какой-то программы. Это был код на языке программирования “C++”. Объем кода был небольшим. И в глаза мне сразу бросилась одна из функций, которая на вход принимала двумерный массив. Выше этот массив был определен. И от его названия у меня пробежал холодок по спине, а потом бросило в жар.
Переменная называлась deathArray. Быстро встав из-за стола, я попятился назад. Оглядевшись, мне показалось, что в комнате светлеет. Да, здесь действительно становилось все ярче. Спустя три минуты в комнате стало светло как днем. Посмотрев вперед, я не поверил своим глазам. Перед моим взглядом простиралось огромное красно-зеленное поле. Со странным ярким газоном, который состоял из клеточек, примерно метр на метр. Часть клеток были зеленого цвета, а часть из них были ярко-красными. Вид красной травы выглядел зловеще и пугающе. Клетки располагались в хаотичном порядке. Хотя стоп, нет.
Они выглядели в точности как массив на экране монитора, который был заполнен нулями и единицами. Теперь я понял: зеленым клеткам на поле соответствовали единички, а красным соответствовали нули. Судя по всему, мне предстояло дописать функцию, которая поможет успешно пройти это поле. Но у меня остались вопросы, которые требовали немедленных ответов.
Что будет, если наступить на красную клетку? Нужно ли думать над алгоритмом внутри функции или можно просто пройти поле не наступая на красную клетку? А может на самом деле нельзя наступать на зеленую? И самое главное, что за пугающее название массива deathArray?
Будем действовать по порядку. Для начала разберемся с первым вопросом. Я медленно обошел стол и сделал несколько шагов в сторону поля. Трава на клеточках была сочной и ярко-зеленой, но касаться ее, как и становиться на сами клетки, мне не хотелось. Нужно как-то проверить какие из клеток на поле являются опасными. Я снял кроссовки, взял один и кинул на зеленую клетку. Ничего не произошло. Хорошо. Предположим, зеленая клетка действительно является безопасной. А что с красной? Взяв в руку второй кроссовок, я кинул его на красную клетку и тут же вздрогнул от резкого хлопка. Он просто взорвался, превратившись в пыль. Значит моя теория с цветом оказалось верна. Это конечно было логично, но на себе проверять, хоть и весьма очевидную теорию с цветами совсем не хотелось.
Дальше. Что мешает мне пройти всё поле, просто не наступая на красные клетки? Но что-то мне подсказывало, что пройти его нужно как можно быстрее и нужно писать алгоритм поиска именно кратчайшего пути. Основными аргументами в его пользу были — название массива и размер поля. Размер самого массива был 3000x3000 элементов. То есть, если предположить, что размер ячейки 1 квадратный метр, то минимальное расстояние, которое мне придется преодолеть — это 3 километра, а на деле расстояние, которые необходимо было пройти могло увеличиться в несколько раз. Да и вообще, у меня нет никакого желания задерживаться на этом поле надолго.
Я взял из холодильника новую банку Pepsi и сел писать код. К слову, книжный шкаф уже куда-то пропал. Чтобы со мной было, если бы я просто беспечно ввел логин и пароль? Ведь я не понимал до этого момента как работают алгоритмы поиска путей. Никогда еще так старательно я не писал код. Возможно, задача не самая сложная и программисты в какой-нибудь компании как Blizzard сталкиваются с такими задачами каждый день и щелкают их как орешки. Но, во-первых, я не из игровой индустрии, а, во-вторых, от этого зависела моя жизнь.
На написание алгоритма внутри функции у меня ушло около 30 минут. И еще час я посвятил проверке. Вроде все верно. Хотя слово “вроде” неуместно, когда речь идет о жизни и смерти. Все верно. Настало время запуска. Я смял руками пустую жестяную банку и бросил на красную клетку, она тут же исчезла с характерным звуком, превратившись в пыль. Нужно действовать. Прочитав комментарии в начале программы, которые содержали инструкции по запуску, я запустил ее на исполнение.
За пределами массива
Результат не заставил себя ждать. Запуск программы привел в движение клетки на поле. Их высота друг относительно друга стала меняться. Так стало понятно, что это на самом деле не клетки, а кубы. Одни стали на полметра возвышаться относительно других, тем самым выстраивая траекторию пути, которая была рассчитана моим алгоритмом. Кубы один за другим меняли свою высоту, все это сопровождалось громким гулом, что только придавало им массивности. Через некоторое время они полностью перестроились. Получилась траектория из кубов, которая возвышалась над остальными и по которой мне и предстояло пройти. И я побежал.
Не знаю, что именно меня заставило перейти на бег. Это был какой-то внутренний порыв, но как оказалось мои чувства мне не изменили. Слегка оглянувшись назад, я заметил, что та часть поля, которую я пробежал, куб за кубом падали стремительно вниз. Я никак не мог понять, падали они только после того, как оказывались позади меня, или скорость, с которой они проваливаются, была выше моей, и тогда я просто упаду вниз. И к моему несчастью это был второй вариант. Я бежал так быстро, как только мог, стараясь не потерять равновесие. Несколько раз меня пошатнуло на поворотах, и я чуть не угодил на красный квадрат. Силы заканчивались, а бездна метр за метром подбиралась ко мне. Казалось, сейчас я наступлю на очередной квадрат и упаду вниз вместе с ним. Если я хоть где-то ошибся в расчетах, и моя траектория окажется не самой оптимальной, мне конец. В груди начало невыносимо колоть, дыхание окончательно сбилось. Я продолжал бежать во что бы то ни стало. Так просто я не сдамся. Сколько я пробежал? Мне казалось, что финиш должен быть уже совсем близко, но я его не видел. В глазах начинало темнеть, я закашлял. «Еще чуть-чуть, еще совсем чуть-чуть», — мысленно подбадривал я себя. Казалось, что куб, на который я наступаю, тут же проваливался. Это была разница в секунду, стоило мне хотя бы немного замедлиться, и меня бы ждала неминуемая гибель.
Когда силы практически были на нуле, а огонек надежды почти погас, я увидел конец поля. Траектория полностью выпрямилась, мне нужно было бежать только по прямой. У меня открылось второе дыхание. Я бежал что есть сил. Кубы продолжали падать почти у меня под ногами. Но меня тревожило другое. Граница, к которой я так стремился оканчивалась обрывом. Я наконец добежал до самого финиша и резко остановился. Бездна, от которой я так яростно убегал, теперь была с обоих сторон. На самом финише я успел повернуться на 180 градусов, кубы подо мной провалились, и я ощутил чувство падения спиной вниз.
Я вздрогнул, как сумасшедший, хватая ртом воздух. Сердце трепыхалось. Открыл глаза и не мог поверить. Я дома. Лежу в своей кровати. В голове еще сцена из моего сна, которая никак не хочет меня отпускать. Но все позади.
P.S. На работу я прибыл вовремя. Чтобы закончить свой сложный проект, мне понадобился всего час. В итоге сдали его заказчику на неделю раньше. Заказчик остался очень доволен полученным результатом. Спустя несколько месяцев, я уволился из компании в которой работал, потому что получил офер в Google. Как я потом узнал, я прошел собеседование с наивысшим количеством баллов за всю историю компании. Но это уже совсем другая история…
Глава 9. Кем быть в 2020-е
9.1. Что стоит изучать, чтобы оказаться востребованным сейчас и в ближайшем будущем.
1 Мая — праздник труда. Его начали отмечать в XIX веке, когда слово «трудящийся» означало человека, в поте лица работающего на фабрике или пашущего землю. Уже в XX веке само понятие труда стало меняться, а в нынешнем столетии от традиционного взгляда остались почти что одни воспоминания. Вместе с привычным взглядом на труд уходит уверенность в будущем: на кого учиться самому и учить детей, какие навыки приобретать, какую жизнь планировать для себя? В нашем обзоре рассказываем, как не остаться без работы сегодня и преуспеть в ходе надвигающейся Четвертой промышленной революции.
Труд сегодня: картина дня. Что имеем на день сегодняшний? «В России абсолютная нехватка технических специалистов в сегменте компьютерной разработки. По разным оценкам компаний и министерства труда, нам не хватает от миллиона до 3 миллионов IT-специалистов в самом широком смысле слова», — цитирует РБК управляющего партнера компании Odgers Berndston Романа Тышковского. Самый «штучный товар» на рынке труда — профессионалы в вопросах информационной безопасности. Поэтому зарплаты спецов, обеспечивающих кибербезопасность, могут «плясать» от полумиллиона рублей. Деловые издания утверждают, что рынок корпоративных услуг в этой сфере вырастет с 82 млн долларов в 2016 году до 103 миллионов в 2021-м.
А вот видение союза «Молодые профессионалы», проанализировавшего данные отборочных чемпионатов по профмастерству среди студентов вузов: бесспорный лидер по востребованности — специальность веб-разработчика, на второй позиции — предпринимательство, на третьей — инженерный дизайн CAD (системы автоматизированного проектирования). В числе конкурентоспособных компетенций — «сетевое и системное администрирование», «графический дизайн», «информационные кабельные сети», а также — в сфере обслуживания — «туризм», «администрирование отеля», «ресторанный сервис». «Таким образом, эпохе, когда самыми популярными в нашей стране являлись дипломы юристов и экономистов, пришел конец. При этом именно специалисты в области IT-технологий, а не юристы с экономистами, как это было когда-то в прошлом, являются сейчас и самыми высокооплачиваемыми в нашей стране», — комментирует деловой еженедельник «Эксперт».
Зарплаты хороших специалистов по кибербезопасности могут начинаться от 500 тысяч рублей в месяцOleksiy Maksymenko / Global Look Press
По данным рекрутинговой компании HeadHunter, как в обеих столицах, так и в регионах рейтинги профессий по уровню зарплат действительно возглавляют программисты (60-110 тыс. рублей) и системные администраторы, профи в сферах внутреннего аудита (40-100 тыс. рублей), технадзора в строительстве (70–80 тыс. руб.), менеджеры по развитию бизнеса (60-80 тыс. рублей). В категории высокооплачиваемых также бизнес-аналитики, оптимизаторы бизнес-процессов, руководители в сфере продаж: в кризисный период уметь повышать эффективность проектов и продавать дорогого стоит. Востребованными и высокооплачиваемыми остаются, что бы ни говорили СМИ, экономисты и юристы, а кроме того — агенты по продаже и аренде недвижимости, девелоперы, специалисты в маркетинге и рекламе, инженеры-производственники.
По сведениям Росстата, самые высокооплачиваемые в нашей стране — финансисты и страховщики (зарплаты — от 150 тыс. рублей), работники нефтедобычи и нефтепереработки (140 тысяч), ученые-исследователи, разработчики медицинских препаратов, космонавты и авиаторы (в среднем около 100-110 тысяч). К слову, с начала этого года «Аэрофлот» повысил зарплату командирам экипажей, пилотирующих дальнемагистральные самолеты Boeing 777 и Airbus A330, до 650 тыс. рублей, на среднемагистральных самолетах, таких как Boeing 737, Airbus A320, зарплата незначительно меньше — в среднем 635 тыс. рублей.
По мнению Forbes, в перечень наиболее востребованных кадров следует добавить технологов, операторов и наладчиков станков с числовым программным управлением, разработчиков блокчейн-технологий и специалистов по их поддержке (внедрение, обучение и т. д.) — «тех, кто создает новые высокотехнологичные продукты». На 120-150 тысяч рублей в месяц, а то и больше, могут рассчитывать специалисты по налаживанию коммуникаций и формированию эффективных «междисциплинарных» команд внутри компаний и корпораций.
Виртуальная реальность стремительно развивается, специалисты в этой сфере востребованы.
Появляются в России и совсем пока экзотические профессии, устремленные в будущее, причем хорошо оплачиваемые уже сейчас: разработчик виртуальной (VR) и дополненной (AR) реальности (зарплата — от 50 тыс. рублей), менеджер по применению робототехники в искусстве (примеры проектов: беспилотник, рисующий картины, автоматизированное световое шоу из костюмированных дронов; зарплата — от 70 тыс. рублей), биогеронтолог (сбор и анализ данных о здоровье клиента, составление индивидуальных рецептов продления жизни с использованием искусственного интеллекта; зарплата — от 120 тыс. рублей), кибер-криминалист (выявление киберпреступлений и преступников; 60-120 тыс. рублей), архитектор системы искусственного интеллекта — 60-300 тыс. рублей.
Если судить по темпам роста зарплат, то по итогам прошлого года в лидерах оказались такие отрасли, как электроника, приборостроение, бытовая и компьютерная техника (+8%), товары народного потребления (+7%), IT и интернет (+6%), СМИ и реклама (+5%). Академия народного хозяйства и госслужбы отмечает быстрый рост зарплат в прошлом году в сельском хозяйстве (+24% по причине импортозамещения), образовании (+23% благодаря предвыборному исполнению «майских указов» президента), ЖКХ и сфере соцуслуг (+21,8%). «Также выросли зарплаты в здравоохранении, на обрабатывающих производствах и на предприятиях, занимающихся добычей полезных ископаемых». (Для сравнения: в ведущей, американской, экономике среди отраслей с самыми быстрорастущими зарплатами — математика страхования, ядерное проектирование, химическая инженерия, судостроение, геофизика, когнитивистика).
Напротив, сокращение зарплат зафиксировано в сфере строительства и недвижимости, телекоммуникаций и связи (-1%), фармацевтике (-2%). Самые низкие зарплаты (несмотря на их рекордный рост) — в упомянутом сельском хозяйстве, а также в обслуживании населения (официанты, грузчики и т. д.) и розничной торговле (30–40 тыс. рублей), у уборщиков (20-30 тысяч). С задержками зарплаты чаще остальных сталкиваются занятые на производстве изделий из металла, строители и транспортники, посчитали в Росстате.
9.2. Пропуск в будущее
Мы, как и все человечество, входим в период Четвертой промышленной революции — эру «зеленой» энергетики, распределенной генерации, аккумуляции и транспортировки возобновляемой, неисчерпаемой энергии, таких же — повсеместных — источников информации, экономики сотрудничества, взаимопомощи и обмена, криптовалют, вездесущего интернета и — на его основе — «больших данных» и «облачных» хранилищ, управляемых с их помощью «умных» жилищ и городов, новых материалов с небывалыми свойствами и 3D-печати, нанотехнологий, генной инженерии, киборгов и искусственного интеллекта, робототехники, беспилотного транспорта, виртуальной реальности и цифрового бессмертия. Эти и многие другие «чудеса» изменят нашу жизнь и наш мир до неузнаваемости, причем совсем скоро. Естественно, ключевым образом трансформируется и рынок труда.
Профессии, связанные с искусством, не потеряют своей актуальности.
По данным, приведенным в книге президента Всемирного экономического форума в Давосе Клауса Шваба «Четвертая промышленная революция», о будущем могут не беспокоиться, например, хореографы, антропологи и археологи. Авторы книги «Вторая эра машин» Эрик Бриньолфсон и Эндрю Макафи успокаивают сантехников, поваров, дантистов. HeadHunter — электриков, а также программистов, разработчиков мобильных приложений и игр. Газета «Ведомости», ссылаясь на исследование кадрового агентства «Юнити», дает как минимум пять лет технологам пищевого производства, биохимикам, финансовым аналитикам и стратегам в сфере поиска и управления персоналом. «Психоаналитик или психолог не станет интерфейсом в ближайшем будущем или вообще никогда. В этой области машинное обучение в нынешнем виде ломается. Этика запрещает психоаналитикам писать сессии, значит, не на чем учить машину. В психологии и психиатрии вообще нет шансов внедрить хоть какое-то машинное обучение», — считает директор по стратегическому маркетингу «Яндекса» Андрей Себрант. Соответственно, то же можно сказать, к примеру, о воспитателях и следователях. Также в реестре живучих профессий — массажисты, философы, социологи, филологи.
Чтобы выжить, профессиям «с биографией» приходится приспособляться и эволюционировать. «Даже те профессии, которые раньше не предполагали глубокого знания технологий, теперь обязывают к этому. Маркетолог должен понимать, как работают алгоритмы «Яндекса», финансист обязан разбираться в IT, потому что новые инструменты, тот же блокчейн, обеспечиваются высокотехнологичными решениями. Даже операторам, работающим в службе доставки пиццы, скоро придется разобраться в том, как работают дроны и как ими управлять. Технологии так прочно вошли в нашу жизнь, что мы все должны научиться мыслить как инженеры, — пишет основатель сервиса по поиску работы Worki Павел Гужиков. — Следующий тренд революции 4.0 — развитие горизонтальной карьеры. Инженеру-технологу, например, кроме узкопрофессиональных требований вроде разработки составов и способов получения композиционных материалов, нужно уметь работать с документацией и знать английский язык, чтобы читать профильную литературу и не отставать от мировых разработок. Современный технолог должен постоянно учиться. И, поработав на одном предприятии, он может уйти в смежную отрасль, освоив новый пласт знаний».
А вот как описывают в Forbes современные требования к PR-менеджерам: «Такой специалист должен уметь заниматься маркетингом в социальных сетях, отслеживать негативные комментарии и отвечать на них, сглаживать конфликты, делать людей лояльными сети. Он евангелист, пропагандист и психолог в одном лице. Среди ключевых показателей эффективности SMM-пиарщика могут появиться показатели, которые есть сейчас у менеджеров магазина: конверсия, трафик, средний чек и т. д.».
Появление беспилотного транспорта породило новые профессии.
Бесспорно, перспективны юные, только становящиеся массовыми профессии: биоинформатик и биоинженер, генный инженер, разработчик искусственного интеллекта и нейросетей, инженер-робототехник, нейропсихолог, эксперт по облачным вычислениям, инженер по солнечной — и вообще альтернативной — энергии, агрокибернетик, проектировщик «умной» среды, инженер 3D-печати и разработчик материалов для нее, пилот дрона. Развитие беспилотного транспорта породило профессии маркировщиков реальности (они «переводят» для беспилотников сотни километров дорог и тысячи часов видеосъемок объектов вдоль них; в одной только Индии этим заняты сотни тысяч работников, получающих за монотонный труд по 200 долларов в день) и разработчиков соответствующего программного обеспечения.
9.3. Живые и мертвые
Как видим, «в живых» останутся профессии, связанные с исследованием, воображением, инноваторством и изобретательством, пластикой и мелкой моторикой, сложными коммуникациями, интуицией и подтекстом, умением принимать решения в условиях неопределенности и многозадачности, экспромтом — тем, что присуще исключительно человеку и недоступно машине, какой бы человекоподобной она ни была.
В то же время огромное количество традиционных профессий, прежде всего связанных с рутинным, алгоритмизируемым трудом, неважно, интеллектуальным или физическим, под угрозой замены автоматами и сетями, в этом ряду и те, что на данный момент считаются престижными: это библиотекари и архивисты, почтальоны и курьеры, клерки, диспетчеры и работники регистратур, кассиры и кондукторы, рекламщики, продавцы товаров, услуг и объектов, ретейлеры и торговые представители, маркетологи и мерчандайзеры, страховые агенты, аналитики и консультанты, чиновники, фискалы, администраторы, секретари, рекрутеры и кадровики, бухгалтеры, аудиторы, юристы, адвокаты, нотариусы, переводчики, корректоры, нефтяники и горняки, работники обрабатывающих и конвейерных производств, строители, водители и машинисты, грузчики, охранники, полицейские, агрономы, уборщики… И даже, казалось бы, такие незаменимые и творческие «человеческие» профессии, как медсестры и сиделки, терапевты и хирурги, учителя и журналисты, садовники и дизайнеры.
В течение 6-7 лет роботы могут заменить каждого четвертого работника.
По некоторым прогнозам, через 6-7 лет машины заменят в России каждого четвертого работника. Счет потерь идет на миллионы и даже десятки миллионов рабочих мест. «Уже по текущему анализу в ближайшее время по таким специальностям, как бухгалтеры, юристы, административные сотрудники, люди, работающие в системе управления и учета кадров, на рынке труда должно будет оказаться около 3 миллионов человек, которые будут заменены новыми информационными технологиями», — сообщал в прошлом году министр по вопросам Открытого правительства Михаил Абызов. «Есть статистика, согласно которой через 15 лет без работы останутся около 15-20% всего работающего населения (примерно 10-15 млн человек — авт.). По другой статистике, на 100 исчезающих рабочих мест создаётся только одно», — рассказывает основатель рекрутингового онлайн-проекта SuperJob Алексей Захаров. «В России сегодня в индустрию грузоперевозок, с учетом косвенной занятости, вовлечено порядка десяти миллионов человек. Напрямую — порядка 3-3,5 миллиона. Поскольку они создают огромный спрос на различные дополнительные услуги (заправки, автосервисы, гостиницы, придорожные кафе), даже с минимальным мультипликатором 3 мы получаем 10 миллионов. Возможно, что больше. Со средним размером домохозяйств 2,5 мы получаем, что у нас в стране под социальный нож пойдут 25 миллионов человек, — полагает популярный блогер Петр Шкуматов.
Это значит, что миллионам соотечественников, а также их подрастающим детям жизненно необходимо заглянуть вперед и готовить себя к профессиям будущего (некоторые прогнозы обещают, что 65% нынешних школьников будут работать по специальностям, у которых сегодня нет даже названия) — изучать СМИ и литературу, искать подходящие учебные заведения и онлайн-курсы.
Перечислим лишь некоторые из нарождающихся профессий: энерго-инноватор (изобретение хранилищ и способов транспортировки возобновляемой энергии), архитектор энергонулевых домов (самостоятельно обеспечивающих себя энергией), энергоаудитор (устранение энергопотерь и оптимизация энергопотребления), экоаналитик в строительстве (снижение воздействия жилых, бизнес- и промышленных объектов на окружающую среду), дизайнер носимых энергоустройств (одежды, обуви, аксессуаров, украшений, генерирующих энергию), сити-фермер (производство сельхозпродукции на крышах зданий), оператор автоматизированной сельхозтехники, эколог-оптимизатор (восстановление видов растений и животных, экосистем), специалист по преодолению системных экологических катастроф (загрязнения атмосферы, сокращения площади лесов, глобального потепления, опустынивания и т. д.), экопроповедник, координатор образовательных онлайн-платформ, тьютор и игропедагог, digital-комментатор культурной среды («переводчик» устаревших произведений литературы и искусства на современный «язык» восприятия), режиссер индивидуальных туристических маршрутов, разработчик персональных пенсионных планов, аналитик данных интернета вещей (интерпретация «больших данных»), специалист по хранению памяти (очистка перегруженной человеческой памяти), дизайнер тела (индивидуальное протезирование), эксперт по робоэтике (юристы нового поколения — посредники в конфликтах людей и роботов), учителя, трэвел-агенты, медсестры, хирурги… для роботов.
В стремительно меняющемся, беспрецедентно динамичном и конкурентном мире «на убой» не пойдут те молодые и взрослые, кто обладает не только нужными знаниями, но и актуальными качествами и умениями. «Воображение, распознавание закономерностей и сложные формы коммуникации — это когнитивные области, где у людей до сих пор имеется весомое преимущество, которое наверняка сохранится в ближайшем будущем», — формулируют авторы «Второй эры машин».
Вслед за отечественными педагогами, социологами, психологами добавим: быть успешным сегодня и потом значит быть открытым, восприимчивым к новизне, любознательным, с тягой к постоянному обучению, адаптивным, стрессоустойчивым, с быстрой реакцией, внимательным, с цепкой памятью, мыслящим критически и нестандартно, способным к исследованию, изобретательству, проектированию, инициативным, воодушевляющим, предприимчивым, общительным, этичным — ответственным, пунктуальным, честным, доброжелательным, «человеком команды». Плюс обязательные навыки программирования: в XXI веке не обладать ими все равно что в прошлом не уметь читать и писать. Ну, а главное — почувствовать самому или дать почувствовать ребенку, к чему «лежит душа». Причем до возраста 12 лет, когда, считают ученые, выключается генетическая программа обучения.
Глава 10. Как стареть в IT
Источник: https://habr.com/ru/post/318914/
Автор оригинала: Don Denoncourt
После нескольких лет насмешек над предрассудками в области информационных технологий я — будучи белым мужчиной с совсем не седыми, густыми волосами — начинаю сталкиваться с предубеждением по отношению к моему возрасту. Это правда, дискриминация по возрасту реальна.
С 2008 года количество жалоб на дискриминацию по возрасту выросло до 25 000 в год. Можно возразить, что мы везде вынуждены «крутиться» сейчас и всегда найдётся кто-то, кто пожалуется на какую-то несправедливость. Конечно, ОК! Давайте не будем принимать во внимание жалобы. Просто посмотрим на средний возраст сотрудников известных IT-компаний. Фейсбук: 28. LinkedIn: 29. Гугл: 30. Чтобы увидеть объективно — средний возраст работника в США составляет 42 года. Это намного выше среднего возраста в названных выше компаниях. Даже сам Марк Цукерберг однажды публично высказался на каком-то мероприятии в Стэнфорде: «Я хочу подчеркнуть важность быть молодым и технически подготовленным. Молодые люди просто умнее».
Мне осталось 3 года до 60-ти, и я, конечно, повышенно чувствителен к этой теме. Имея представление о том, что несёт с собой седина в усах, я нахожусь в хорошем положении, чтобы развенчать продвигаемый подход «молодые умнее». Позвольте мне указать на то, что я делал на протяжении всех моих десятилетий работы — да, десятилетий, множественное число, — чтобы оставаться трудоспособным, и поделиться с теми, кто становится старше (а это касается всех), что можно сделать, чтобы избежать списания, как только вы перевалите за 30.
Нет родины для человека в возрасте?
«Молодые умнее». Чепуха! Это значит, что компании должны были не принимать на работу Санди Мец, Кента Бека или Роберта Мартина (Дядя Боб)? Все они — ветераны с 30-летним опытом работы. «Они просто аномалии.» Не думаю!
Шесть лет назад с помощью Джона Стелера я разработал kettlerusa.com. Я сделал интерфейсную часть на Groovy и Grails, а Джон — серверное приложение на RPG. Джон является самым лучшим программистом из всех, с кем я работал. В то же время Джону совсем немного оставалось до весьма солидной круглой цифры возраста. Но взглянем на возраст Джона с позиции небольшой истории. Я регулярно проверяю работу сайта kettlerusa.com, покупая на нём самый дешёвый продукт — шарики для настольного тенниса. Я нередко забываю отменить свои заказы, из-за чего получаю множество пакетов с этими шариками. В то же время, я хорошо помню «Капитана Кенгуру», который был популярным детским сериалом с 1955 года до середины 70-х. На его героя, Капитана Кенгуру, регулярно обрушивались шарики для пинг-понга в результате проделок его друга. Как-то в разговоре с Джоном я назвал мой растущий запас шариков для пинг-понга Капитаном Кенгуру. Естественно, я полагал, что Джон смотрел этот сериал. Но, когда я увидел, что он смущён моим использованным названием, я описал ему несколько сценок из фильмов. Ответ Джона показался неожиданным: «Дон, я вырос, когда ещё не было ТВ. Это было начало 50-х.» Да, Джон был не только из эпохи до Node.js, до Ruby, до Java и до интернета — он был даже из эпохи до ТВ. И тем не менее нет лучшего программиста, чем он, — в RPG или подобном. Даже включая провозгласивших себя «более умными» 30-летних и более молодых.
Да. OK. Он работает с RPG. Хотите пример, где программист пишет на чём-то отличном от «антикварного» RPG? Как насчёт HTML5, JavaScript и C#? Тогда прочитайте мой блог о Джиме Станицком — именно он ввёл меня в эту область в начале 80-х.
20 лет опыта против 20 раз по году.
Когда я слышу, как кто-то говорит о 20-ти годах опыта, мне любопытно — это, действительно, так или на самом деле было по 1-му году опыта 20 раз. Я знаю очень много разработчиков, которые использовали знания, полученные в первый год работы, затем в течение всей остальной карьеры. Это я видел на рынке IBM AS/400 RPG с 40-50-летними людьми, но такую же картину я наблюдал и с некоторыми 30-летними разработчиками на Java. В начале 2000-х я ездил по стране, проводя семинары по Java для разработчиков на RPG. Я ожидал, что эти разработчики знают современные модульные методы программирования на RPG, но оказалось, что большинство из них использует по-прежнему методы старой школы RPG. Они прекратили увеличивать свой основной набор навыков – и стали намного меньше приобретать новых. Затем в 2008-10 годах я обучал Java-разработчиков в компании Circuit City работать с Groovy и Grails. Этот народ был в возрасте около 30-ти, и их вполне устраивал старый добрый Java с его «пишите всё сами», «не озадачивайтесь фреймворками» и т.п.
Моя позиция, конечно, не в том, чтобы выяснить, что эти более молодые разработчики были умнее меня или нет. Проблема в том, что многие программисты позволяют себе застыть. И самая главная проблема, что после десятикратного выполнения одних и тех же операций в течение многих лет эти программисты забывают, как учиться. Мало того, что догнать технологию, ушедшую на десять лет, может оказаться чрезвычайно трудным делом — это может оказаться почти невозможным, если забыто, как обучаться.
Если планировать оставаться в ИТ-области более 10-ти лет, то необходимо учиться всю жизнь. Я всегда был учеником на протяжении всей жизни. Я изучал и разрабатывал многие языки программирования, структуры и стратегии. В результате я приобрёл навыки, необходимые для обучения. Показательный пример: мне говорили, что невозможно выучить второй язык, будучи в возрасте за 50. И вот я говорю вам: это неправда. Я начал учить итальянский, когда мне было 52 года. Теперь я читаю и слушаю ежедневно рассказы на итальянском и двигаюсь через «разговорный» язык. И в результате для меня изучать другой язык программирования или какую-то структуру — простое дело.
По-большому счёту вы только то, что сделали за последние 2 года.
Кент Бек предположил, что при последовательном использовании парного программирования возможности программистов несильно отличаются по прошествии двух лет работы. Ясно, что это действует в окружении, где методы и навыки можно легко использовать совместно. В окружении, где знания ветеранов становятся общими. Моей первой реакцией, когда я впервые услышал это несколько десятилетий назад, была следующая: 1) попарно и иным образом сравнивать себя с другими разработчиками как можно чаще, и 2) не думаю, что мой многолетний опыт гарантирует конкурентоспособность или более высокую зарплату.
Я часто говорю, что я по существу — только то, что я сделал за последние два года. Я мог бы рассказать о всех моих работах за тридцать лет, таких как, например, замена использования системы перфокарт System/3 на AS/400, написание отладчика для Кобола или… Но, боюсь, вам будет скучно. То, что может заинтересовать вас, я сделал лишь в последние два года. Среди них: разработка поисковой системы с открытым кодом ElasticSearch и обучение работе с ней, конфигурирование многих приложений на AWS OpsWorks, установка Docker для множества клиентских приложений, перевод приложений Rails 2.x на Rails 4.2, апгрейд Ruby 1.9 до 2.2 и повышение эффективности использования Git и — более точно — GitHub.
Забудьте мой возраст. Я готов поспорить, что мой список работ за последние два года, как минимум, не хуже, чем у любого 20-30-летнего. Главный вопрос здесь: что я могу назвать моими достижениями за два года, начиная с данного момента времени?
Как разработчику подвести «двухлетний баланс». Учиться, использовать и снова учиться.
Подойдите к этому году, как если бы он был вашим первым годом работы в качестве разработчика, и усвойте всё, что сможете. Восстановите в себе энергию, которая была у вас в первый год программирования. Вспомните тот драйв, когда вы хотели доказать себе и коллегам, что вы «крутой» в этой ИТ-области. Начните снова читать техническую литературу, пробовать новые методы и просите коллег научить вас. Вновь ощутите волнение от совместной работы с другими разработчиками при выработке новых знаний. Постоянно учитесь и исследуйте все формы обучения, в т.ч.:
Подкасты. Мне нравится Greater Than Code и The Bike Shed.
Интернет-трансляции. Программисты на Ruby продолжают предпочитать RailsCasts, а я в последнее время получаю удовольствие от Ruby Tapas.
Журналы и информационные бюллетени
Я подписан на следующее: InfoQ, Ruby Weekly, DZone Daily Digest.
Имею также подписку на ThoughtWorks Radar, чтобы знать самые передовые методы.
Интерактивные онлайн-курсы. Я был инструктором Rails на CareerFoundry, но есть сотни вариантов.
Конференции и семинары. Старайтесь побывать на одной конференции в год. Помните, что часто можно узнать больше в холле конференц-зала, чем слушая сами выступления.
Если вы не можете поехать на конференцию, то пользуйтесь тем фактом, что многие заседания доступны онлайн. Рекомендую сайт confreaks.tv/conferences, содержащий заседания десятков конференций.
Блоги. Отслеживайте несколько качественных блогов – таких как, например, Corgibytes и Giant Robots Smashing на Other Giant Robots — где можно получать сообщения о новых постах. Регулярно ведите свой собственный блог, размещайте посты. Каждый может предложить решение проблем или может выдать подход, который поможет другим. Дополнительно — написание постов на блоге способствует закреплению знаний.
Также не пожалейте времени, чтобы понять, какой тип обучения вам больше всего подходит. Вы лучше обучаетесь по книгам (мой случай) или вам требуется аудитория? Вы учитесь лучше на слух? Но, независимо от вашего стиля учёбы, старайтесь узнавать что-то новое каждый день.
Отсутствие занятости даёт возможность учиться.
Отсутствие работы не является оправданием отсутствия попыток разобраться с новыми методами и технологиями. Не требуется наниматься на работу, чтобы получить опыт. Запустите ваш собственный интернет-проект. Облачные хостеры могут быть полностью или почти бесплатными в отсутствие многих посетителей. Выйдите с какой-нибудь дурацкой идеей и реализуйте её. Поместите решение публично на GitHub, чтобы другие смогли увидеть его. Выполните полный цикл от серверной базы данных и, может быть, небольшой NoSQL до простого внешнего интерфейса. Затем переместите этот внешний интерфейс на одностраничное приложение, как Ember или React или Angular. Добавьте проверку с обработкой карт.
Ниже приведена, возможно, неважная идея для стартапа, но она могла бы дать вам опыт реального мира: виртуальный лимонад. Создайте сайт, на котором любой, используя текущее положение своего телефона, сможет увидеть находящиеся поблизости магазинчики с лимонадом. Это значит, что понадобится войти в географическую информационную систему (GIS) и базу данных по таким магазинчикам. Надо будет написать серверную и клиентскую программы. Затем потребуется обеспечить возможность клиентам зарегистрировать свой магазинчик с вашим сервисом. Может быть, выдавать им уведомления о ком-то, кто ищет их магазинчик, чтобы они могли ответить, что они открыты. Возможно, вы не станете следующим Цукербергом, однако вы, несомненно, получите всю гамму навыков действий на этом рынке.
Будьте в форме и оставайтесь здоровым, но не парьтесь слишком сильно насчёт внешнего вида.
Я не думаю, что надо — как рекомендуют некоторые консультанты по трудоустройству — стараться выглядеть моложе, экспериментируя с краской для волос или пластической хирургией. Но что от вас требуется, так это ощущение вашей энергии. Чтобы оставаться соответствующим в отрасли, которая, как кажется, ориентирована на молодых людей, крайне важно быть энергичным и активным. И избыточный вес 50-летнего подхрипывающего курильщика не даёт серьёзных оснований ожидать проявления витальности и энергии.
Год или около того назад я проводил двухнедельный обучающий семинар примерно с десятком разработчиков в возрасте около 30 лет. Обучение шло на 22-м этаже, и каждый день, возвращаясь с общего обеда, я поднимался по лестнице. В первые два дня один-два человека присоединялись ко мне, но затем такие желающие пропали. Довольно трудно будет перевести вас в разряд «отработавших», когда не удаётся удержаться рядом с вами.
Не прилагайте чрезмерных усилий, чтобы просто доказать свою точку зрения. Будьте самим собой. Только — лучшей частью самого себя. Фитнесом может быть простая ежедневная энергичная прогулка. Вполне можно надеть наушники и слушать какой-нибудь технический подкаст на этой прогулке. Я смотрю Интернет-трансляции, занимаясь на тренажёре в фитнес-центре, и слушаю подкасты, раскатывая на моноцикле. Я предпочитаю дневную тренировку: благодаря ей голова в середине дня проясняется, и я чувствую себя обновлённым, возвращаясь к работе во второй половине дня.
Не думаю, что надо идти на какие-то экстремальные меры, чтобы выглядеть моложе. Я мог бы выглядеть моложе, просто сбривая мои седые усы (волосы на моей голове по-прежнему густые и имеют лишь несколько серых вкраплений). Но я заслужил эти белые волосы и морщинки; для меня они — признаки наработанного жизнью опыта. Я хотел бы, чтобы кто-нибудь как-то сказал мне: «Эй, восьмидесятые звонили, они желают получить свои усы назад.» «Прекрасно,» — посмеялся бы я. — «Эти усы достались мне заслуженно из восьмидесятых, поэтому я не отдам их.»
Будьте интересными.
Неважно, сколько вам лет, но если вы лежебока, то вы будете скучны в любом общении. Будьте интересным… для самого себя. Каждый получает какое-то удовольствие от своих увлечений. Не имеет значения, если другие думают, что ваше хобби или ваша страсть — странные или не совсем нормальные. Например: я держу пчёл и катаюсь на одноколёсном велосипеде. Я также знаю реконструкторов гражданской войны – я согласился бы заниматься этим делом лишь за немаленькую сумму, но эти люди восхищают меня. Я уверен, что, если у вас ещё нет хобби, то у вас есть увлечения, которые пока просто не превратились в хобби. Наличие хобби является по существу забавной формой обучения на протяжении всей жизни.
Не стоит скрывать свой возраст.
Я полагаю, что необходимо сразу дать чёткую информацию потенциальным работодателям о вашем возрасте, чтобы можно было сразу отсеять работодателей с возрастной дискриминацией. В каком окружении вы желали бы работать: где на вас смотрят как на мёртвый груз или где ценят вашу энергию и опыт? Ниже два первых предложения из моего сопроводительного письма в Corgibytes: «Ваша команда ищёт специалиста, имеющего „7+ лет опыта разработки программного обеспечения“ и „программиста на Polyglot, имеющего опыт 5+ лет по языкам программирования и 2+ по фреймворкам“. Что вы скажете насчёт 7+ лет C/C++, 7+ лет Java, 2+ лет PHP и затем 3+ лет Ruby (не говорю уже о 7+ годах RPG и Кобола, иначе вы можете заняться арифметикой и подсчитать мой возраст)?» Таким образом, я дал ироничную информацию о моём возрасте в первом же параграфе.
Спокойно идите на снижение зарплаты ради получения новых возможностей.
Я проходил через значительное снижение зарплаты три или четыре раза в своей карьере. Речь идёт о 10-20 тысячах долларов в год (10-15%). И это не потому, что я терял работу. Я оставлял рабочее место, потому что не видел для себя возможности профессионального роста на занимаемой должности. Я также отказывался от мест с высокой зарплатой, когда чувствовал, что они помешали бы моему профессиональному развитию. Некоторые из моих переходов на другую работу оказались, возможно, плохим выбором, закончившись тупиком, но я уверен, что всегда уходил от какого-то проекта, накопив ценные на этом рынке знания.
Я видел, что очень многие люди сосредоточиваются на каких-то технологиях (например, Lotus Notes и Domino), а через 10 лет обнаруживают, что они больше не нужны на этом рынке. Даже если вы получаете высокую зарплату, не позволяйте техническому миру идти мимо вас. Будьте уверены, что вы владеете новейшими технологиями. И, если вы не можете делать это на вашей текущей позиции, то, возможно, пришло время двигаться дальше.
Оставайтесь вечно молодым.
Как я сказал раньше, да, дискриминация по возрасту присутствует и весьма заметно. Наши тела стареют, и некоторые люди — как, например, Цукерберг — будут использовать это против нас. Но самой большой ошибкой было бы согласиться, что наш ум и дух также стареют. Здесь то, где мы можем оставаться «молодыми».
Боб Дилан сказал это лучше всего:
«Пусть у тебя получится построить лестницу к звёздам И преодолеть каждую ступеньку. Пусть ты останешься вечно молодым. Пусть ты, наконец, всё-таки повзрослеешь И станешь справедливым и верным. Пусть всегда тебе ведома удет истина. И ты будешь видеть сияние вокруг себя. Пусть всегда ты будешь отважным, сильным, с гордо расправленной спиной. Пусть ты останешься вечно молодым. Вечно молодым, вечно молодым, Пусть ты останешься вечно молодым.» Заметьте, что, когда Боб Дилан выпустил свой 33-й альбом «Together Through Life» («Вместе по жизни»), который стал хитом в Британии, ему было 68 лет.
Комментарии (в количестве 203) см. в приложении Б.
Глава 11. Хобби – это не работа?!
Мне порой смешно слышать фразу «Лучшая работа – это высокооплачиваемое хобби». Я вижу её практически каждый день в гавно пабликах, и слышу эту фразу от гуру тренеров. Но по факту эта фраза ложь!
У меня по жизни было много хобби. Видео-аудио-фото монтаж, фотографирование, видеосъемка, ремонт компьютеров, создание сайтов и ещё многое другое.
По началу я уделял на это занятие пару часов в день-неделю. Но когда я пытался с этого зарабатывать, мне приходилось уделять по 7-12 часов в сутки. И я не мог делать то что я хочу, я делал то что хотели увидеть клиенты. И это просто убивало интерес на корню.
Хобби превращалось из творческого процесса в рутинную работу, и как такового отдыха я не испытывал от слова совсем! Приносило ли мне это деньги? Да, конечно. Даже сейчас на своей официальной работе я большую часть времени уделяю именно тем инструментам, которые раньше для меня были как хобби. Но стало ли мне легче от этого? Нет! Я не вижу разницы, занимаюсь ли я созданием сайта, или я просто перебираю данные в рабочей таблице. Я просто делаю работу на автомате и устаю от использования любого рабочего инструмента.
Почему так происходит?
Всё очень просто! Как говорил ранее на Хобби я тратил пару часов в день-неделю, я делал то что я хочу и как я это вижу. Я мог забросить делать один сайт и перейти на другой, потому что к тому душа не лежала. А в работе это не так. Ты должен укладываться в дедлайн, ты делаешь именно то, что хотят увидеть клиенты, твоё мнение уходит даже не на второй а на пятый план.
Какое же правильное Хобби?
Поняв всю глубину проблемы, поняв то, что я не отдыхаю уже больше года, я для себя решил отделить один инструмент, который я не буду использовать как работу никогда. Это будет лишь творческий процесс не зависящий от другого мнения кроме моего. И не важно приносит ли он мне деньги, нравится ли он кому нибудь кроме меня. Я не гонюсь за призванием или наживой, это лишь мой душевный отдых.
Выбор инструмента был лёгкий — это созданием музыки. Это увлекательный творческий процесс, который полностью захватывает всё моё внимание, с помощью которого я могу выплеснуть все свои застоявшиеся эмоции.
Помимо этого я завёл себе собаку, стал путешествовать и ввести свой блог вконтакте и YouTube канал.
Я прекрасно понимаю что я делаю это не ради денег, а только ради того, чтобы отдыхать от трудового дня. Чтобы мой мозг переключался от рутинной работы и настраивался на творческий порыв.
Выводы.
Никогда не верьте людям, которые говорят фразу, которую я озвучал в начале главы. Эти люди мошенники, или глупцы, которые пытаются дать Вам волшебную таблетку по решению всех проблем. «Просто» в жизни никогда не бывает. Жизнь — это борьба. Выживает лишь сильнейший. Не бывает лёгких денег, как и выбора, с которым Вы сталкиваетесь ежедневно. Деньги это инструмент капиталистов, счастья они априори принести не могут. Деньги это чума нашего века, из-за которого мы просто обязаны делать то что не любим, ради того чтобы просто выжить. Снимите розовые очки и примите данный факт как истину, и жизнь станет чуточку осознанней.
Комментарии к блогу см. в приложении В.
Приложение А. Список игровых движков
1. Ogre3D
Ogre – это графический объектно-ориентированный движок с открытым исходным кодом (Object-oriented Graphics Rendering Engine), который написан и поддерживается небольшой командой, с участием в его разработке Ogre-сообщество. Движок работает под наиболее распространенными ОС и на практически любом железе.
2. Zombie Engine
Бесплатный игровой движок с открытым исходным кодом, основанный на технологиях другого популярного движка Nebula Device 2. Движок достаточно развит и представляет технологии практически коммерческого качества. Он поддерживает сразу две популярные графические библиотеки - OpenGL и Direct3D. Имеется поддержка шейдеров, карт рельефа/нормалей, обработка теней и освещения в реальном времени. Создать игру в Zombie Engine сможет практически любой пользователь, не вдаваясь в тонкости программирования.
3. Torque 3D
Продвинутый игровой движок, оснащённый полным набором инструментов и интерфейсом программирования приложений для множества основных платформ: PC, Mac, Xbox 360, Wii, iPhone, а также для web.
4. Proton
Мощный инструмент для разработки 2D и 3D игр на C++ и OpenGL. Можно подключить к Irrlicht Engine.
5. Alternativa3D
Это браузерный 3D-движок на базе Adobe Flash, разработанный российскими разработчиками. Преимущества 3D-движка на Flash очевидны, ведь Flash-plugin установлен примерно у 95% пользователей, это привычная, кроссплатформенная технология. Благодаря Alternativa3D становится возможным отображать в браузере трехмерные миры и объекты, разрабатывать трехмерные игры и виртуальные туры. Поставляется в виде SWC-библиотеки, загрузить которую могут все, зарегистрированные на сайте AlternativaPlatform пользователи. Для некоммерческого использования библиотека предоставляется бесплатно, при условии размещения ссылки на AlternativaPlatform.
6. Esenthel Engine
Это универсальный 3D-движок для создания игр любого жанра, будь то 3D FPS, ARPG, RTS, Стратегии и головоломки или даже MMORPG. Движок поддерживает самые современные графические фичи. Тулсет движка очень лёгок и прост в использовании, он позволяет автоматически обрабатывать и импортировать нужные ресурсы для игр, создавать бесконечные миры, полностью настраивать игровые объекты.
7. LOVE
LOVE, несомненно, шикарный движок для создания 2D игр, позволяющий быстрого создавать игры при помощи скриптового языка Lua.
8. S2 Engine
S2 Engine представляет собой полный комплект для разработки игр и сред виртуальной реальности. Одна из его лучших черт является высокое качество графической подсистемы на основе технологии, которая позволяет проектировать тень на любых поверхностях и любых объектов в сцене любой сложности. Это возможно с помощью "системы трафаретов теневых объемов", оптимизированная для приложений в режиме реального времени.
9. Leadwerks
Это современный игровой 3D движок, базирующийся на OpenGL. Из главных особенностей данного движка можно отметить то, что он поддерживает продвинутую систему освещения, качественные тени, OpenAL и EAX звук, имеет встроенную реалистичную физику Newton, игровой редактор Leadwerks Sandbox и пр.
10. CopperCube 5
3D-движок от Ambiera. Этот 3D-движок предназначается для создания качественных презентаций и игр на технологии Flash или Windows. Движок позволяет вам удобно создавать как небольшие презентации, так и полномасштабные игры, экспортируя их в swf-файл или exe-файл.
11. Blitz3D
Это мощный и необычайно легкий в использовании язык программирования для создания компьютерных игр. Вы сможете создавать 3D, 2D-пазлы, приключения, RPG. Blitz основан на таком популярном языке программирования, как BASIC. Компилирует удивительно быстрый код. Инструмент идеален как для профи, так и для начинающих.
12. Marmalade
Инструментарий от одноимённой британской компании, предназначенный для разработки 2D/3D игр и приложений. Он позволяет, не меняя программного кода, охватить множество платформ и устройств. Несколько кликов мыши и приложение, созданное в нативной (C++) или гибридной (HTML5) среде, будет портировано на iOS, Android, Windows Phone 8, BlackBerry, Windows, Mac, а также на другие платформы, в т.ч. на некоторые SmartTV – LG, Roku и Tizen.
13. GameBryo
Это, написанный на C++, кросс-платформенный компьютерный игровой 3D-движок, который был создан компанией Numerical Design Limited (NDL), на основе движка NetImmerse. До того, как NDL поглотила компания Emergent Game Technologies движок назывался просто GameBryo, а теперь - GameBryo Element. Данный движок подходит для разработки игр на всех современных платформах. Его технологии дают практически безграничные возможности для создания проектов любых жанров и сложности.
14. Unreal Engine 4
Профессиональный набор инструментов и революционных технологий от Epic Games для мультиплатформенной разработки игр AAA-качества, а также анимационных фильмов. UE4 позволяет реализовывать проекты с ошеломительной визуализацией для мощных машин, а также оптимизированные игры для мобильных систем. Движок включает в себя ряд передовых технологий, внедренных как библиотеки: NVIDIA PhysX, Autodesk Gameware, Enlighten, Umbra, Oculus VR и др.
15. Unigine
Первоклассный игровой движок, который предназначен для разработки любых типов проектов благодаря своей структуре и удобному тулсету. Движок развивается вот уже несколько лет, и его главная цель – внедрение передовых графических технологий для создания виртуальных миров. Высоко оптимизированный рендеринг гарантирует отличное качество и скорость. Движок написан на C++. Используется очень мощный скриптовой язык UnigineScript. Имеется встроенная быстрая трехмерная математика, реалистичная физика. Поддерживает практически все навороты коммерческих движков, отлично развивается и главное стоит недорого. Рекомендуется для профессиональных проектов.
16. FIFE
Это движок для разработки 2D изометрических игр, на котором можно создать игру почти любого жанра, будь то RTS или RPG. Но движок больше известен своей совместимостью с играми Fallout 1 и 2 – может редактировать их карты, создавать новые – понимает форматы данных игр. Ведь, он основан на движках, использованных в серии Fallout игр. Требуется знание языка Python. Для создания игр имеются инструменты, в частности редактор карт, в котором можно строить локации, загружать готовые, сохранять созданные.
17. OpenBOR
OpenBor – это свободный движок позволяющий создавать игры в стиле Beat 'em up, на котором была создана игра Beast of Rage, вышедшая на такие платформы как: PC, Dreamcast, PlayStation 2, Xbox, PSP, GP32, Amiga.
18. Quake II
Это полный исходный код игры и движка первой полностью трехмерной игры Quake II от id Software. Компания id Software официально выложила на своём сайте открытые исходные коды своей игры и её движка для общего доступа. Теперь и вы можете свободно скачать открытый Quake II и воспользоваться наработками и возможностями когда-то лучшего 3D-движка.
19. Spring
Открытый (доступен исходный код) проект, распространяемый по лицензии GUI. Это движок стратегической игры в реальном времени (RTS). Каждый желающий может внести свой вклад в развитие проекта. Пока движок на бета-стадии.
20. ShiVa 3D
Это профессиональный трёхмерный движок, позволяющий создавать игры любого типа, сложности и жанра. На нём можно создавать игры разных жанров: FPS, платформеры, адвенчуры, MMORPG, гоночные симуляторы, шутеры и пр. По техническим особенностям движок отвечает всем современным требованиям, обладает практически всеми возможностями, которые отвечают времени.
21. Chrome Engine
Коммерческий движок от польской фирмы Techland, разработанный специально для разработки игр AAA класса, использующий одни из самых новейших технологий XXI века. На этом движке разрабатывались всемирно известные игры, такие как Call of Juarez, GM Rally, Mortyr 3 и многие другие.
22. Horde3D
Это небольшой 3D движок с открытым исходным кодом. Он написан для предоставления качественного 3D-рендеринга, ошеломляющих визуальных эффектов, для разработки игр следующего поколения. Движок мало весит и хорошо оптимизирован. При этом Horde3D имеет простой и интуитивно понятный интерфейс под любой язык программирования и для работы с анимацией персонажей в отличном качестве. А в комплект входят различные инструменты и библиотеки, в числе которых: редактор ландшафтов, редактор сцен, а также семплы и прочее.
23. Panda3D
Это открытый 3D-движок, в котором вся игровая логика программируется на языке Python. Данный движок свободен в любых целях, даже в коммерческом использовании. Linux сборка работает с OpenAL. Поставляется дополнительная библиотека утилит: конвертеры форматов, создатель шрифтов, запаковщик игр, шифровальщик данных и многое другое. Имеется отладка для работы с багами.
24. Irrlicht Engine
Irrlicht – это открытый игровой 3D движок, разработанный немецкими разработчиками. Irrlicht может работать с OpenGL и DirectX. Движок Irrlicht поддерживает платформы - Windows, Linux, Mac OS X, Solaris и SDL-платформы.
25. G3D Engine
Это открытый низкоуровневый графический 3D движок, использующийся для разработки качественных трёхмерных игр или симуляторов. Движок облегчает использование графических возможностей OpenGL, весьма хорошо оптимизирован, и предоставляет ряд весьма ценных особенностей.
26. JMonkeyEngine
jME - открытый высокопроизводительный графический Java движок, которому возможно подключение других рендер-систем. Используется OpenGL. Движок поддерживает LWJGL и JOGL, OpenAL, FMOD и т.д.
27. Grit
Игровой 3D-движок и тулсет на основе 3D-рендера открытого движка Ogre. Неплохо оптимизирован и заточен под создание 3D-гонок с большими открытыми мирами, а также под другие игры с большими пространствами. Он отлично подходит для разработки игр типа серии GTA, Saints Row, Crysis, Fallout 3, Just Cause 2, Mafia 2, Burnout.
28. DX Studio
Это полностью интегрированная среда разработки для создания интерактивных 3D-приложений с использованием DirectX. Система включает в себя трехмерный движок в реальном времени и инструменты для редактирования – весь диапазон средств предлагается в одной IDE. Имеются встроенные спецэффекты: системы частиц, тени в реальном времени, трехмерный звук и пр.
29. HeroEngine
HeroEngine - это 3D-движок, разработанный Simutronics Corporation, для создания MMO игр. Движок использовался в разработке известной MMORPG "Star Wars: The Old Republic", от BioWare. Также Bethesda Softworks разрабатывает на данном движке свою "The Elder Scrolls: Online".
30. Crystal Space
Свободный комплект программного обеспечения для разработки 3D игр и приложений в реальном времени. В Crystal Space есть всё необходимое для реализации игр. Система кросс-платформенная, с пакетом необходимых утилит, поддерживает множество языков программирования.
31. Dark BASIC
Это среда разработки игр, в которой можно создавать игры любого жанра в 2D или 3D пространстве, используя простейший специализированный язык программирования. Даже если вы ранее не программировали, то с DarkBASIC вы можете легко начать, что обеспеченно отличной справкой для новичков. При помощи данного инструмента вы можете создавать профессиональные коммерческие игры, и вполне рентабельные по качеству. поддержка популярных форматов.
32. Andorra 2D
Это двухмерный графический движок для Delphi и Lazarus, предоставляющий разработчику простой API для разработки своих проектов. Andorra 2D может использовать как DirectX, так и OpenGL без знаний их API. Отличается высокой производительностью!
33. Nebula
Nebula SDK – это кроссплатформенный (Win, Linux, Irix, Mac, Xbox) 3D движок для разработки визуальных приложений и игр. Nebula является свободным игровым движком с открытым исходным кодом. Он написан на С++, а в качестве рендера использует Direct3D9 или OpenGL. Для программирования требуются знания в поддерживаемых скриптовых языках: Tcl, Python, Lua.
34. GLScene
Это бесплатный для коммерческого и некоммерческого использования OpenGL-ориентированный графический движок для Дельфи с открытым исходным кодом. С его помощью программирование трёхмерной графики становится более простым и быстрым.
35. Retribution Engine
Движок имеет открытый исходный код (лицензия GPL), а разработанные на нём игры могут свободно распространяться. Игровой движок включает в себя редактор уровней и редактор моделей. Поддерживаются многие форматы моделей, в том числе форматы .x и md2. Анимированные модели так же поддержаны.
36. OpenSceneGraph
OpenSceneGraph – это открытый кроссплатформенный пакет для разработки компьютерных игр, графических презентаций и виртуальных миров. А также набор инструментов для работы с движком. Движок полностью написан на C++, основывается на технологиях OpenGL, что дает ему большие возможности для вывода графического изображения, которое на достаточно хорошем современном уровне.
37. HPL1 Engine
HPL1 Engine - игровой 3D движок созданный компанией Frictional Games. Движок поддерживает платфорты Windows, GNU/Linux, Mac OS X, и распростроняется под свободной лицензией GNU GPL. Движок имеет встроеную физику Newton Game Dynamics, в комплекте с движком идут всяческие редакторы карт и эффектов...
38. GameStart
Кроссплатформенный игровой 2D/3D-движок, позволяющий разрабатывать игры любого жанра на Windows и Android. Для программирования игр используется C-подобный скриптовой язык Squirrel. С движком поставляется удобная среда разработки инструментами.
39. Haaf's Game Engine
Простой в освоении мощный 2D-движок, использующий аппаратное ускорение. Движок подойдет для всех, кто желает быстро и легко создать свою коммерческую игру хорошего качества. Жанр игр, созданных на этом движке, никак не ограничивается, вы можете создать в 2D всё, что вам заблагорассудится: логический пазл, многослойный платформер, стратегию или любой другой, не меняя код движка. Вам не нужно знать о программировании под DirectX – вы не должны ничего знать о программировании системы и не нуждаетесь в дополнительных библиотеках.
40. ZDoom
ZDoom является расширенной переработкой для Win32 официального движка популярной игры DOOM, исходный код которой был распространен разработчиками. Движок работает под Windows 95/NT 4.0 и добавляет новые особенности, которых не было в первоначальном варианте, изданном id. Данный движок распространяется исключительно бесплатно. ZDoom был создан Рэнди Хейтом (Randy Heit), при использовании разработок id Software.
41. Ethanon Engine
Ethanon Engine свободный инструмент для разработки 2D игр. EE лучше всего подходит для 2D игры с видом с сверху, например TDS, но он также может быть использован для разработки игр других стилей, таких как платформеры и shoot'em up игры.
42. Cafu
Cafu Engine (Ca3D-Engine) – современный 3D графический движок и набор инструментов для разработки игр. Cafu Engine применим при разработке различных 3D приложений, включая игры, симуляции, тренинги и архитектуру.
43. Skyline
Игровой движок от компании Aurasoft, базируемый на свободном графическом 3D-движке Ogre. Это движок ориентирован не только для опытных программистов, но и на игроделов, которые имеют минимальные знания в программировании. Программирование игровой логики производится на популярном скриптовом языке LUA. Используется свободная физическая библиотека Bullet.
44. Shark3D
Middleware-программное обеспечение, предоставляюие широкие возможности для разработки 3D игр на ПК и консоли.
45. Dreemchest
Dreemchest- это бесплатный игровой движок для создания 2D игра на платформы Android, iOS, Flash, Windows, MacOS X, написанный на С++, с использованием скриптовых языков Lua и AS2.
46. GZDoom
GZDoom – это открытый проект основанный на другом подобном проекте ZDoom. На данном движке вы можете создавать 3D FPS игры по типу и подобию игры DOOM! Для осуществления вашей идеи имеются практически все особенности оригинала и множество новых. Движок отличается многими особенностями, среди которых OpenGL рендеринг, 3D-этажи, динамический свет, скайбоксы стиля Quake2/Unreal, текстуры в режиме true color, поддержка 3D-моделей и пр.
47. MegaGlest
Это бесплатная открытая кросс-платформенная 3D стратегия/движок, где участвуют и противостоят две стороны: механическая и магическая. Но Glest это и движок, на основе которого можно создавать новые игры-стратегии, основанные на изменении XML и ряде других инструментов. На данный момент уже существует некоторое количество игр, которые используют движок Glest.
48. Open Sonic
Open Sonic является свободной игрой жанра беги-и-прыгай, которая базируется на вселенной всеми известного хита от Sega - "Sonic the Hedgehog". Движок игры представляет собой достаточно красивую двухмерную графику с некоторыми дополнительными фичами геймплея, которые не характерны оригиналу.
49. Truevision3D
Это SDK: недорогие инструменты, движок и всё остальное для разработки и создания 3D игр. Данный интерфейс создан для использования большими студиями, индии-разработчиками и для всех, кто заинтересован использовать недорогой, но очень мощный 3D-движок с качественным инструментарием и поддержкой. Так как TV3D поддерживает много языков, включая VB6, VB.Net, C#, Delphi, C++, APL и BlitzMax, вы можете использовать язык, который ваши разработчики уже знают. TV3D SDK включает в себя инструменты призванные для облегчения разработки игр: ModelView, ParticleEditor, PackageBuilder, SFxE, а так же для конвертации 3D моделей и дополнительные плагины.
50. Doomsday
Данный движок предназначается для того, чтобы создать оригинальные игры Doom, Heretic и Hexen только с использованием современных технологий, типа поддержки трехмерных моделей и пр. Может пригодиться для модинга игр Doom I/II, Heretic и HeXen.
51. GemRB
GemRB - это свободно распространяемый порт движка Infinity Engine от BioWare.
52. Unity
Unity 5 – это передовой игровой движок от компании Unity Technologies, позволяющий разрабатывать не только 3D-игры, но и 2D-игры. По мнению большинства инди-разработчиков игр на данный момент это лучшая платформа разработки игр. У этого движка имеются все необходимые инструменты для полноценной разработки игр AAA-класса под 21 популярную платформу. Движок Unity любим во всей игровой отрасли за глубину и качество оптимизации, а также за скорость и эффективность рабочих процессов – это позволяет пользователям Unity быстро создавать высококачественный контент.
53. Risen3D
Risen3D дальнейшее развитие движка Doomsday (JDoom), который в свою очередь базируется на оригинальном движке Doom I/II. Поддержка 3D моделей в формате Md2! Активация действий с помощью R3D скриптинга. Использование детализированных текстур в высоком разрешении. Вы увидите водные всплески, движущиеся небеса, услышите окружающие звуки, и крадущихся хитрых монстров, а также другие поражающие воображение элементы, если вспомнить оригинальные возможности Doom.
54. CryEngine V
Передовой игровой 3D-движок от компании Crytek, предоставляемый без обязательных лицензионных платежей. На данный момент это один из самых инновационных игровых движков, который подходит для разработки игр AAA-класса с самой мощной 3D-графикой и, соответственно, с самыми новыми возможностями во всех остальных составных: аудио, физика, управление, VR и пр. Вы можете использовать его бесплатно в коммерческих или некоммерческих проектах, зарабатывать на них и не обязаны ничего платить.
55. jPCT
Свободный 3D-движок для Java, который позволяет использовать OpenGL и Software рендеры на выбор. Данный движок подходит для разработки мощных 3D-приложений для десктопа, Интернета и Android. А небольшие игры на нём пишутся весьма просто и удобно.
56. FBA
Это интегрированная среда разработки софта и игровых программ для Windows PC и Pocket PC. Для создания игр вам не нужно знать сложные языки программирования и пользоваться сложными инструментами - FBA Creator вам в этом поможет, предоставив процесс разработки в удобном виде.
57. AndEngine
AndEngine - это бесплатный и полностью свободный игровой 2D-движок для разработки игр под игровые системы на базе операционной системы Android от Google. Движок работает с графическим интерфейсом OpenGL. Программирование в нём производится на популярном языке Java.
58. StemCell Game Engine
Stem Cell Engine представляет собой полнофункциональную платформу для создания игр и 3D приложений AAA класса. Движок разработан с целью сокращения времени разработки и стоимости, при этом дизайнеры и художники получат все инструменты, необходимые для создания богатых и захватывающих игр. Большим плюсом технологии Stem Cell Engine является - современная графика, в режиме реального времени, а так же реалистичная физика и 3D объемные звуки. Это всего лишь несколько из многих особенностей движка. Расширяемость - упрощает разработку, за счет поддержки плагинов, и дает пользователю бесконечные возможности для обогащения StemCell Engine. Мощная система скриптинга - CellBuilder которая в свою очередь проста в использовании и клиент Driven Architecture позволяют пользователю создавать свои приложения, не копаясь ни единой строчки кода.
59. Bos Wars
Bos Wars – это свободная и открытая стратегия или игровой движок стратегии в реальном времени по типу и подобию War Craft II. Футуристическая стратегия в реальном времени, геймплей которой предполагает экономическое развитие игрока и сражение с компьютерными противниками. Подойдёт для всех, кто желает создать 2D-стратегию.
60. 3D Game engine
3D-движок для PC с открытым кодом, который автор начал делать достаточно давно, и забросил. Имеются некоторые особенности: трехмерное небо, трехмерные объекты (танки, самолёты, лодки), и другое. Движок доступен в нескольких версиях для разных платформ: DOS, Linux. Так же доступен и исходный код. Движок разрабатывался на 486DX33 машине, что сейчас уже не актуально.
61. Green Elf Game Engine
GEGE - игровой движок, отличный выбор для быстрого создания 2D игры любого типа и жанра. Простота в использовании, многофункциональность и высокая скорость выполнения отличительные черты этого движка. Написан на C++ с использованием DirectX 9.0c.
62. nGENE
nGENE Tech – это свободный объектно-ориентированный игровой 3D-движок, написанный на C++. На данный момент движок на стадии развития, поэтому в нём мало возможностей для реализации игровых элементов, однако он весьма продвинут с графической точки зрения. Скриптование на LUA и XML. Физический движок - PhysX.
63. EDuke32
EDuke32 - это исходный порт классического PC-шутера от первого лица Duke Nukem 3D.
64. Lightfeather
Открытый 3D-движок для разработки игр на Mac, Windows и Linux. Он использует API DirectX 9, что позволяет реализовывать весьма неплохую 3D-графику. Вы можете использовать его для создания 3D-презентаций или игр любого жанра и направленности.
65. Nytro Game Engine
Nytro Game Engine - кроссплатформенный высококачественный движок для разработки игр ААА класа на РС и консоли. Удобный WYSIWYG редактор и встроенные инструменты для работы с GUI, физикой, системами частиц, AI, шейдерами, анимацией, моделями и текстурами, позволяют сократить время разработки до минимума, при максимальном качестве.
66. TERRA
Неплохой открытый 2D/3D-движок для разработки TERRA Game Engine. Игры можно разрабатывать на множество популярных платформ, таких как Windows, Linux, Mac OS X, IOS, Google Android и др.
67. Marauroa Engine
Arianne - многопользовательский движок для разработки MMORPG игр в реал-тайм. Сервер этого движка написан на Java и использует в качестве базовой концепции Python.
68. World Forge
Forld Forge - движок с открытым исходным кодом, позволяющий создавать 3D MMOG. Главное достоинство этого движка - это как раз то, что можно создавать действительно качественные онлайн игры.
69. LawMaker Game Engine
LawMaker Game Engine является кросс-платформенным высокопроизводительным 3D движком реального времени, специально разработанных для нынешнего и следующего поколения игр, будь то разработка для современных игр и/или игр будущего - LawMaker Game Engine разработан в соответствии с потребностями разработчиков и требованиями геймеров по всему миру.
70. Doom 3
Это официальные доработанные исходные коды известной игры "Doom 3". Данные исходники на писаны на языке программирования C++ и распространяются по свободной лицензии GPL. Предлагаемый пакет не содержит никаких 2D/3D графических и звуковых ресурсов оригинальной игры, так как они распространяются по коммерческой лицензии EULA.
71. Ninfa3D
3D движок, который отлично подходит для разработки трёхмерного приложения типа игры или презентации. Движок обладает немалым списком современных особенностей, в том числе и передовые графические фичи. Этот движок основан на другом популярном движке – Irrlicht. В частности, используется Irrlicht как графическая основа. OpenAL для 2D и 3D звука, физика Newton 2.0 Archemedia.
72. PixelLight
Открытый 3D-движок предназначенный для кросс-платформенного создания игр, презентаций и других графических приложений на PC под управлением операционных систем Windows и Linux. Движок и его исходные коды распространяются по лицензии LGPL.
73. Existence Engine
Для всех любителей 3D FPS – движок Existence Engine, в котором, помимо открытого исходного кода, присутствует очень удобный редактор карт. Движок абсолютно бесплатен и к тому же его размер занимает чуть больше 20-ти мегабайт. В последней версии Built 2.0 графика на уровне Doom 3 и Quake 4.
74. Corona
Corona SDK – это движок для разработки 2D-игр и графических приложений для платформ iOS и Android. Благодаря использованию скриптового языка Lua, создавать игры на Corona SDK очень просто.
75. Sylphis 3D
Sylphis 3D - открытый игровой движок, весьма мощный инструмент для создания 3D игр. Тем не менее этот движок достаточно прост в использовании. Sylphis 3D использует графическую API OpenGL, благодаря которой можно реализовать неплохую графику.
76. Genesis3D
Движок работает с картами уровней в собственном формате, основанном на BSP-trees. Вместе с движком прилагается собственный редактор карт - очень рулезная штука. Но кроме этого, можно создавать уровни в некоторых редакторах от Quake.
Genesis3D оперирует моделями персонажей и предметов в собственном формате. Чтобы создать свою модель, вам потребуется 3DStudio MAX версии 2 или 3 с установленным Character Studio 2.x, а также плагин-конвертер, поставляемый вместе с Genesis3D.
77. Jolt3d!
Это 3D движок с открытым исходным кодом, предназначенный для создания 3D презентаций, игр. Его главная цель состоит в удобстве и легкости использования, поддерживая многие форматы графики, видео, аудио и 3D-моделей. Работает с DirectX - поддерживает DirectX 9.0c. Дополнительно к движку поставляются инструменты для редактирования соответствующих элементов.
78. LKI-Creator 3D
ЛКИ-Creator 3D – это доработка движка LKI-Creator, который предназначался для 2D-игр. Движок может послужить отправной точкой для начинающего игродела, который хочет создать свою 3D игру с использованием DirectX и Delphi. Данный трёхмерный пакет предоставляет многие возможности. Движок поддерживает и отлично отображает текстурированные 3D-модели от 3D Studio Max.
79. eXgine
eXgine - это отечественный некоммерческий 3D движок, использующий Delphi. Движок подойдет для создания любого типа и жанра игр в 3D. eXgine полностью бесплатен, т.е. Вы сможете использовать его в любых своих целях совершенно бесплатно, даже в коммерческом проекте.
80. Frank Engine
Frank Engine является движком для разработки 2D игр с использованием C++. Использует лицензию MIT. В движок включено все, чтобы создать полнофункциональную игру. Движок имеет грамотно составленную документацию, а также простую игру, поставляемую в качестве примера.
81. SoftPixel Engine
SoftPixel Engine - это бесплатный игровой движок на C++ под платформы Windows, GNU/Linux, Apple Mac OS X, Apple iOS, и Google Android. SoftPixel Engine интегрирован с современными графическими библиотеками DirectX (9 и 11), OpenGL, OpenGL ES.
82. RealmForge
Игровой 3D-движок, базирующийся на основе графической технологии популярного открытого 3D-движка Ogre. Новые версии этого движка называются Visual3D Game Engine, однако предшествующая ветка RealmForge всё ещё актуальна в силу открытости и прочих преимуществ.
83. 3DSTATE Engine
3DSTATE Engine - сравнительно неплохой движок, главными достоинствами которого является поддержка многих ЯП (C/C++, C#, Delphi, Visual Basic 6, VB.NET) и соответственно компиляторов(Microsoft Visual C++, Microsoft Visual C# .NET, Borland C++ Builder, Borland Delphi, Microsoft Visual Basic, и Microsoft Visual Basic .NET). Также он бесплатен для некоммерческого использования.
84. Linderdaum
Открытый объектно-ориентированный 3D игровой движок написанный на C++. Движок имеет OpenGL рендер. Он задуман не только как библиотека классов, но и как комплексное интегрированное решение для разработки интерактивных 3D игр. Linderdaum 3D Engine использует OpenGL 2.0 и шейдерный язык GLSL, а также имеет множество современных фич, например таких как HDR, процедурные текстуры, поддерживает попиксельное освещение и тени, пост эффекты, LSS рендеринг, иерархическую и скелетную анимацию, XLML GUI, OpenAL аудио, скрипты и т.д.
85. FOnline
Изометрический игровой 2D-движок и набор инструментов для разработки онлайновых ролевых игр, который был выпущен в 2010 году. В состав SDK FOnline входит сервер, клиент игры и инструментарий к ним (редакторы карт, диалогов, объектов и пр.), позволяющий создавать свои проекты на базе движка.
86. Qfusion
Qfusion – это бесплатный 3D-движок, основанный на модификации популярного игрового движка id Tech 2.. Движок позволяет загружать графику (уровни, модели, текстуры) из Quake III и поддерживает скелетальный моделинг.
87. Jet3D
Jet3D - это открытый игровой движок, написанный на языке C++ и использующий его для программирования. Jet3D позволяет создавать современные 3D игры с различными графическими эффектами и с 3D звуком.
88. Demoniak3D
Demoniak3D является инструментом для разработки 3D приложений и широко используется как разработчиками игр, так и дизайнерами и телевизионными студиями. Движок предназначен для быстрого создания игр и 3D презентаций с помощью: XML, Lua Scripting и OpenGL Shading Language. Demoniak3D также имеет такие встроенные функции как: физика на основе Ageia PhisX, 2D/3D звук, сеть, SQL или GPGPU поддержка.
89. Mark IV Engine
Mark IV 3D Battlefield Simulation Engine - это трёхмерный движок для создания танковых сражений (боевой симулятор), который свободно распространяется. Движок хорошо заточен для использования всевозможной техники. Отмечается неплохой искусственный интеллект и графика.
90. RiBox3D
RiBox3D – это мощный бесплатный игровой 3D-движок для разработки качественных трёхмерных игр. Движок обладает отличным набором функций, и предназначен для быстрой и гибкой разработки игр. В движке RiBox3D используется графический API OpenGL. А распространяется он в виде DLL-библиотеки.
91. WindMill
Построенный на базе DirectX движок для создания двухмерных игр любого жанра. Главное достоинство - простота использования. Движок ориентирован на начинающих программистов, поэтому SDK включает довольно подробное руководство разработчика с множеством примером. Движок включает функционал для отображения 2д графики и текста, обработки ввода с клавиатуры и мыши, проигрывания звука, быстрого и удобного создания пользовательского интерфейса, работы с сетью.
92. Ardor3D
Ardor3D - это открытый 3D-движок, который основан на технологии Java. Ardor3D распространяется по лицензии libpng/zlib, и всем желающим доступны исходные коды.
93. Devana
Devana - исходник браузерной игры по-типу травиана. Движок разрабатывается небольшой командой разработчиков и имеет лицензию GNU GPL. При написании исходника использовался PHP и JS. Движок достаточно популярен среди разработчиков, и в сети можно найти много стилей и модов для этого исходника.
94. SpriteCraft
Это спрайтовый игровой x86/DirectX движок для эффективного и легкого создания качественных 2D-игр. Используя SpriteCraft, даже начинающий разработчик игр может быстро написать игру на подходящем для него языке программирования. Если вы хотите создавать ваши игры без написания тонн кода, разрабатывать игры легко и быстро, писать игры на вашем любимом языке программирования и в вашем любимом стиле, то SpriteCraft - это именно то, что вам нужно!
95. Maratis Engine
Портативный, простой и удобный игровой движок для художников и независимых разработчиков. Полностью свободен для коммерческого и некоммерческого использования.
96. Lumberyard
Бесплатный и открытый игровой движок от компании Amazon для разработки 3D/2D-игр AAA-класса, интегрированных с облачными сервисами AWS и Twitch от указанной компании. Движок базируется на технологиях передового игрового 3D-движка CryEngine от компании Crytek.
97. Apocalyx
APOCALYX - 3D движок основанный на OpenGL, OpenAL и других свободных библиотеках. Движок включает и обеспечивает свободный доступ к библиотекам, типа физического движка ODE, датчика столкновений ColDet, библиотеки анимации Cal3D, LUA-scripting, чтобы описывать и управлять сценами без перекомпиляции, C-Scripting, AngelScript для прекрасного управления искусственного интеллекта.
98. Godot
Бесплатный кросплатформенный игровой движок/конструктор для создания 2D и 3D игр с открытым исходным кодом от студии Okam. Конструктор так же кросплатформенный, т.к. написан на самом движке. Поддерживаемые платформы: Windows, Linux, Mac, Android, BlackBerry, HTML5 и список обещает расширяться. Движок имеет свой встроенный скриптовый язык GDScript.
99. GloryLands
Web-базируемая MMORPG, удобный движок для разработки онлайновых мультиплеерных ролевых игр с элементами стратегии в браузере. Этот движок полностью написан на PHP/MySQL. В данном движке используется 2D графика.
100. AppGameKit
Среда разработки игр от компании The Game Creators, спроектированная таким образом, чтобы на ней можно было создавать игры сразу на разные платформы, типа iOS, Mac OS, Windows, Samsung Bada и MeeGo. Данная среда подходит как для профессиональных разработчиков, так и для инди-разработчиков, которые занимаются созданием игр как хобби.