Методы программирования от Майкла Д. Макграт
Майкл Д. Макграт (Michael D. McGrath), Dynamix/Sierra
Майкл Макграт - инженер-программист компании Dynamix. Он работал над созданием популярного симулятора воздушных сражений времен Первой мировой войны Red Baron 3D, а в прошлом участвовал в ряде других проектов, включая Netrek (свободно распространяемая программа) и Extreme Warfare (Trilobyte). Майкл предлагает вашему вниманию несколько советов, касающихся программирования и разработки игр, и перечисляет наиболее распространенные грубые ошибки, встречающиеся в игровой индустрии.
Сначала разработка, затем программирование
Лучший способ никогда не закончить игру - это сесть и попытаться сходу написать ее программу. Само собой, большинство дипломированных программистов способны на такой подвиг, но если вам не удалось завершить работу за относительно короткий промежуток времени, вас ожидает кошмарная перспектива использовать уже написанный код в качестве «руководства для разработки». Хороший дизайнер детально продумывает каждый аспект своего продукта задолго до того, как кто-то приступит к написанию кода, поскольку технические (и не только технические) решения, которые приходится принимать в процессе разработки, в значительной мере определяются конкретной задачей. Мне приходилось слышать о проектах (а иногда и принимать в них участие), которые никогда не были завершены или выбивались из графика не потому, что программисты не знали, что они делают, а потому, что ведущие инженеры и дизайнеры, очевидно, не имели представления, что именно они создавали, практически до момента выпуска игры. Проекты следует продумывать заблаговременно, в противном случае - готовьтесь платить за свое небрежение в будущем.
Но люди есть люди, и всегда, даже среди ваших коллег, найдутся такие, которые не понимают важности этого аспекта. Поэтому, прежде чем начинать проект, хорошенько присмотритесь к тем, с кем собираетесь работать, и убедитесь, что они разделяют ваши взгляды. К сожалению, многие из начинающих программистов, стремящихся в игровую индустрию, особенно те, кто бросил вуз ради того, чтобы поскорее начать писать игры, обладают совершенно недостаточными навыками программирования, необходимыми для эффективной работы над крупными игровыми проектами. Эти люди рано или поздно понимают, что программирование - всего лишь инструмент, используемый инженерами для реализации проектов. Инженерные навыки действительно необходимы. Практически каждый в этой индустрии является по крайней мере компетентным программистом. Что возвращает нас к подпункту 1 совета «А»: закончите учебу, если вы еще не сделали этого.
Научитесь сначала думать, а потом действовать.
Изучите свою аудиторию и конкурентов
Тем, кто не играет в игры, не следует пытаться их писать. Вообще, если вы не играете в игры, не стоит заниматься чем-либо, связанным с индустрией игр, за исключением, быть может, косвенной поддержки. Знание законов, по которым живет индустрия, образа мышления аудитории и возможностей, которыми обладают конкуренты, критически важно для создания высококачественных, успешных игр. Кроме того, необходимо понимать, в каком именно жанре вы можете проявить себя как разработчик. Определите, за какими играми вы готовы просиживать сутки напролет, - это как раз тот жанр, работая над которым вы принесете максимум пользы.
Не настаивайте на том, что сможете создать успешный шутер от первого лица, если всю жизнь играли в летные симуляторы и лишь недавно впервые попробовали пострелять, и вам это понравилось. Для работы над любой игрой необходимо знать все последние достижения в этом жанре и быть в состоянии оценить любую предлагаемую идею. Только в том случае, если вы можете предаваться воспоминаниям о «старом добром времени» с людьми, которые с первого дня поклоняются данному конкретному жанру, вы готовы нести свой шедевр в массы. Иначе вас хватит лишь на очередной клон, и вы затеряетесь в переполненном рыбешками море, чтобы в итоге быть съеденным какой-нибудь акулой, которая в отличие от вас всегда готовила уроки.
Это относится ко всем, но особенно к программистам. Программисты вдыхают в игру жизнь, и ни замечательная текстура, ни трехмерная графика, ни эпический сюжет не помогут, если программа не представит все это игроку должным образом. Чтобы понять, как подать эту замечательную историю, вы должны хорошо знать все прошлые работы, причем как победы, так и поражения. Другого пути нет и никогда не будет. Точка.
Когда программисты и другие члены команды трудятся над игрой, которая интересна лично им, дело идет быстрее и лучше. Для команды, работающей над проектом, я бы приравнял наличие подобного энтузиазма таланту и мастерству, вместе взятым. Запомните, это (в значительной степени) позволит создать высококачественный продукт.
Техника - это еще не все
Не следует думать, что вы сделаете все самостоятельно только потому, что можете писать программы с бешеной скоростью, по 1000 строк в день, и любите игры. Написать компьютерную игру - это все равно, что рассказать историю, - и хотя самого «рассказчика» создают программисты, без хорошего сюжета для рассказа не обойтись. Яркое художественное оформление, захватывающий сюжет, надежный движок, качественные режимы многопользовательской игры, не говоря уже о вдохновляющей музыке, - для хорошей игры требуется многое. И чтобы, взявшись за проект, довести его до конца, вам необходимо вникнуть во все эти детали, или хотя бы уверенно в них ориентироваться.
А чтобы постичь все тонкости представления различных элементов игры, вам необходимо понять их реализацию в среде, которую вы используете для того, чтобы рассказать историю. Однобитный графический поток позволяет получить замечательную частоту кадров, однако я сомневаюсь, что кто-нибудь по достоинству оценит визуальные эффекты вашей игры, решись вы использовать подобное программное ядро. Отчасти понимание того, что значит правильно рассказать хорошую историю, приходит с опытом - обычно возрастающим, если вы не ленитесь играть в чужие игры.
Наконец, необходимо уметь работать с людьми, которые помогают вам (как любой член команды, создающей игру) рассказывать эти истории. Вам необходимо иметь хорошие инструменты, необходимо научить остальных всему, что они должны знать, чтобы работать с вашей технологией, а прежде всего вам необходимо иметь терпение и решительность для того, чтобы выполнить все вышеперечисленное. И сохранять их до конца.
В нашей индустрии нет места для начальников-наполеонов, а также людей с высокомерным или замкнутым характером. Само собой, подобные типы появляются время от времени, но их игра находит свое последнее пристанище на полке для уцененных товаров (там же, к сожалению, заканчивается их карьера, а также карьера тех, кто с ними работал)... или, еще хуже, игра вообще не выходит на рынок. Если вы вдруг почувствуете, что работаете на кого-то, а не с кем-то, немедленно уходите, потому что в «смертельной схватке» на поле боя, именуемом «рынок игр», вы - на проигрывающей стороне.
Майкл Макграт поясняет свои советы на примере игры Red Baron II компании Dynamix и проблем, так замучивших ее программистов.