| [GcUp.ru] |
| Форма входа |
| Меню сайта |
| Categories | |||||
|
| Главная » Статьи » Создание игр |
| Предисловие от переводчика В последнее время очень широкое распространение в мире игр получили многопользовательские онлайновые игры (MMOG — massive multiplayer online game), которые рассчитаны на огромно-большое количество игроков. Конечно, все слышат только об успешных проектах, которые собирают серьезные финансовые доходы. Это и привлекает большинство новичков в игрострое в этот жанр. Однако, мало кто реально представляет себе, какие проблемы и задачи стоят при создании такого рода игр, какими знаниями надо обладать и т.п. В результате – взявшись сразу за создание такого проекта, новичок быстро понимает насколько все сложно и запутанно. И бросает все, разочаровавшись. Цель данной статьи – дать начальное представление желающим сделать свою игру в стиле MMOG, о том, какими знаниями надо обладать, что нужно уметь и к чему быть готовым. Ведь не секрет, что если человек пробует что-то раз и результат отрицательный — то повторно возвращаться он к этому вряд ли будет. Поэтому хотелось бы предостеречь еще раз желающих окунуться в мир создания таких игр и предложить им еще раз все обдумать и взвесить. Может, стоит начать с более простых игр, чтобы просто получить требуемый минимальный опыт? Статью такого типа мне хотелось написать уже давно, но я не обладал достаточным опытом в этой сфере. В просторах Интернета мне попалась статья Radu Privantu, который является основателем и руководителем проекта Eternal Lands (www.eternal-lands.com). С его письменного разрешения я перевел эту статью на русский язык. В статье говорится о создании MMORPG (ролевой игры), но я думаю, что описанное в ней относится ко всем типам массивно-многопользовательских онлайновых игр. Автор статьи: Radu Privantu. Руководство для начинающих создателей MMORPG игры Шаг 1. Оценка своих знаний: 1. Знание как минимум одного языка программирования. Сейчас среди разработчиков наиболее популярный язык С++, по причине его преимущества в эффективности и скорости. Visual Basic, Java или C# также могут быть использованы в этом качестве. 1. Клиент-серверное взаимодействие и архитектуру построения таких систем. Шаг 2. Создание эскиза разработки Основная архитектура программы: Сначала, попробуйте сосредоточиться на создании простейшей клиент-серверной модели, где будут введены следующие возможности: Задача сохранения информации о персонаже на первый взгляд выглядит довольно простой, но это не так. Например, есть два способа это сделать: использовать базу данных или использовать файлы. Далее в таблице приведены преимущества и недостатки для каждого из вариантов: Базы данных Преимущества: Можно легко добавлять или модифицировать поля. Легко допустить ошибки. Например, выполнение запроса с забытым оператором ’where’. Это может иметь катастрофические последствия, особенно если у Вас есть только старые (или нет совсем) бэкапы Преимущества: Очень быстрый доступ (чтение/запись) Может быть довольно проблематичным добавить новые поля, если вы предварительно не продумали формат и структуру файла Шаг 3. Разработка внутреннего протокола для передачи игровых данных * Смещение 0: 1 байт, определяющий передаваемую команду. Смещение 1: 2 байта, длина передаваемых данных. Следующий вопрос для принятия решения – какую модель использовать на сервере: «неблокируемые сокеты, однопоточное приложение» или «блокируемые сокеты, многопоточность». Оба метода (много- и однопоточный) имеют свои преимущества и недостатки. Многопоточный: Однопоточный: В моей компании, мы пошли по пути однопоточного приложения, потому что у меня просто не было достаточно ресурсов и для того, чтобы справиться с созданием многопоточного решения. Шаг 4. Клиент В 2D, обычно у Вас есть frame буфер, который представляет собой большой массив пикселей. Формат этих пикселей может различаться для различных видеокарт. Некоторые работают в режиме RGB, другие – в BGR режиме и т.д. Число бит на цвет также может различаться. Это относится к 16-ти битному видеорежиму. 8-ми и 24 битные видеорежимы более просты, но у них есть свои проблемы (8 бит – дают всего 256 цветов, в то время как 24-х битные режимы более медленные). Также Вам нужно будет сделать свои функции для работы со спрайтами, самостоятельно делать сортировку объектов для отображения их в правильном порядке. Конечно, вы можете использовать OpenGL или Direct3D для двухмерной игры, но обычно, это того не стоит. Не все владеют видеокартами с 3D ускорителями, поэтому использование для двухмерной игры 3D библиотеки дает Вам только потери в обоих случаях: не все смогут играть в игру, и Вы не будете использовать возможности создания хороших теней, камер, и других замечательных вкусностей, специфичных для трехмерных приложений. Создание трехмерного клиента, как я говорил, легче, но требует определенных базовых математических знаний (особенно тригонометрии). Современные графические библиотеки очень мощные, и предлагают реализации базовых операций бесплатно (Вам не нужно заниматься сортировкой объектов; можно легко изменять цвета и/или текстуры для объектов; объект будет освещен в зависимости от своего положения относительно источников света, если вы рассчитаете нормали для него; и прочее). Кроме этого, 3D дает Вам гораздо больше свободы в творении и передвижении. Недостатками данного решения можно назвать то, что не все смогут играть в Вашу игру (Вы будете удивлены тем, как много людей не имеют видеокарт с 3D ускорителем), и что пререндеренная графика всегда будет выглядеть лучше, чем графика отрендериваемая в реальном времени. Шаг 5. Безопасность В целях безопасности скорость передвижения игрока рассчитывайте на сервере, а не на клиентской стороне. Сервер должен следить за временем (в миллисекундах) когда игрок выполнял последние передвижения, и если запросы на перемещение приходят чаще, чем установлено порогом, то эти запросы должны быть проигнорированы. Не стоит создавать запись в логе для таких запросов, так как они могут возникать из-за сетевых задержек (например, из-за лагов все данные от игрока за последние 10 секунд были приняты сразу). Проверяйте дистанции. Если игрок пытается торговать с другим игроком, который находится за 10 биллионов километров от него (или более того – на другой карте) – сохраняйте в лог такие события. Если игрок пытается посмотреть или использовать объект игры, который находится далеко от него – также записывайте это. Будьте осторожны с использованием поддельных ID. Например, это обычная практика назначать ID (идентификационные уникальные номера) каждому игроку. ID может назначаться игроку при входе в игру, или он может быть постоянным (назначается при регистрации игрока). Если ID назначается игроку при входе в игру (или при создании монстров), вполне возможно использовать позицию (индекс) в массиве игроков в качестве ID. Итак, первый игрок который залогинится получит ID 0, второй – ID 1, и так далее. Скорее всего у Вас будет установлен лимит, скажем, в 2000 индексов для списка игроков. Таким образом, если клиент пришлет команду вроде: «посмотреть на актера с ID 200000» - это приведет к падению сервера, если по неосторожности выполнение такого действия приведет к неправильному обращению к памяти. Итак, делайте проверки вроде: «если актерID<0 или есть актерID>=максимального значения индекса, тогда сделать запись в логе и отключить игрока». Если Вы создаете программу на С или С++, позаботитесь также об определении индекса типом ‘unsigned int’ и проверяйте верхнюю границу, или если Вы почему-то определили индекс как тип ‘int’ (по умолчанию тип ‘int’ – знаковый), помните о необходимости проверки на <0 и >= max значению. Невыполнение этого правила приведет к большому количеству ошибок для Вас, и разочарованию для игроков. Аналогично, проверяйте координаты на выход за границы карты. Если у Вас реализован на сервере в некотором виде поиск пути, и клиенты перемещаются путем указания позиции на поверхности, убедитесь, что они не указывают места за пределами карты. Шаг 6. Создание команды Как минимум 3 программиста: 1 для разработки сервера, и 2 для клиента (или 1 для клиента, 1 для инструментария вроде плагинов для художников, редактора мира и т.п.). Хорошо если у Вас будут до 6 программистов, больше 6 – уже слишком много. Все это зависит от Вашего умения руководить. Как минимум будет нужен 1 художник, но лучше 2 или 3. Если Вы создаете трехмерную игру, то потребуется 3D художник, 2D художник (текстуры, интерфейс и пр.) и аниматор, а также руководитель отдела художников. Если Вы плохо знакомы с художественной разработкой, то опытный художник поможет арт-отделу оставаться единым и скоординированным. Ну что, у Вас есть художник и будем надеяться идея как должна выглядеть игра. Теперь время начинать воплощать эти идеи в жизнь. Когда у вас появится частично работающий серверный и клиентский движок, и несколько скриншотов для демонстрации (или что-нибудь лучше, например, возможность игрокам войти в мир, походить и осмотреться вокруг, поговорить с другими игроками в игре), многие захотят присоединиться к Вашей команде. Желательно, пока Вы не используете в Вашем клиенте уникальные разработки и технологии сделать клиентское приложение open source (программа с открытым исходным текстом). Многие программисты предпочтут присоединиться (в качестве волонтеров) к такому проекту, чем к проекту с закрытым исходным кодом. Сервер же в свою очередь должен быть с закрытым исходным кодом (исключая тот случай, что Вы разрабатываете полностью open source MMORPG). Еще пара советов: не хвастайтесь (не афишируйте) Вашей игрой до тех пор, пока у Вас не будет хоть что-то для демонстрации. Одна из самых раздражающих вещей – когда новичок оставляет сообщения вроде «требуется помощь», приглашает большое количество людей в команду, рассказывает о том, какая классная игра будет. Но пройдя дальше по линкам на такой проект (обычно он располагается на бесплатном хостинге) вы увидите потрясающее меню, содержащее в себе секции вроде «Скачать», «Скриншоты», «Концепт-арт», «Форум» и пр. Вы нажимаете на ссылку «скачать», и получаете красивую картинку «в процессе разработки» (или ошибку 404 в худшем случае). Когда Вы нажимаете на ссылку «скриншотов» - получаете аналогичный результат. Если у Вас нет файлов на скачивание, не создавайте ссылку «Скачать». Если нет скриншотов – не создавайте и этот линк тоже. Лучший вариант – это не тратить свое время на создание сайта до тех пор, пока у Вас не будет готово как минимум 10% проекта (как кода, так и арта). Шаг 7. Развеем мифы Я не согласен с этим. В то время как создание игр 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 намного сложнее сбалансировать, чем в игре для одного игрока. В одиночной игре Вы можете постепенно улучшать оружие, так что игрок постепенно продвигаясь вперед, может получать лучшее снаряжение, при этом бросать (или продавать) старое. В многопользовательской игре такой подход провален, так как каждый будет пытаться получить лучшее оружие, игнорируя худшее. Множество игроков предпочитают не использовать оружие вначале, а сохраняют финансы для приобретения потом сразу лучшего из возможного вооружения в игре. Разработка экономики заслуживает написание собственной статьи. Заключение Об авторе | |
| Всего комментариев: 1 | |