Войти
Исаев ВикторСтатьи

Devastator - как рождалась идея и сам проект

Автор:

Здравствуйте, уважаемые читатели. Сегодня я расскажу о том, как создавал демо-проект на конкурс Shooter’s (шутеров) сайта Gamedev.ru.



Приступим. Прежде всего, нужна идея. Мне понравилась игра UT2003 – ее спортивность и азарт, поэтому я хотел сделать нечто подобное, но все же отличающееся по своему виду и геймплею. Если вы делаете игру на конкурс и в одиночку (и у вас нет достаточных навыков) то советую по максимуму упростить задачу – так у вас выйдет что-то близкое к хорошему качеству.

Графика

В своей игре я использовал антигравитационные платформы. Вы спросите – почему? Ответ прост – у них не нужно анимировать различные части, и, следовательно, экономия на моделировании объекта.

Так как у меня не было художественного образования, плюс я плохо рисую, то я решил использовать свои сильные стороны для создания текстур. Я выбрал интересный стиль, назовем его «полигонная обводка» - такой способ текстурирования, когда каждый полигон имеет свой цвет, и он обведен в рамочку определенного цвета. Это очень легко добиться с помощью Adobe Photoshop.

Пример затекстурированной модели и текстуры:

Чтобы игра меньше лагала и хорошо работала, я старался экономить полигоны, о чем, мне потом не раз говорили. Получились так называемые лоу-поли модели. У таких моделей повышенная «угловатость».

Код

Код – это сильных ход. Вся игра строиться на коде. Есть два способа программирования – сверху вниз, и снизу вверх. Сверху вниз – когда вы описываете всю игру через функции, процедуры, а уже потом описываете их. Снизу вверх – когда вы пишете функции, процедуры для игры, а уже потом из них составляете игру. Лично я использую подход снизу вверх, потому что игра тогда получается как дерево, которое растет и обрастает новыми ветками и листочками.

Для написания игры на конкурс лучше воспользоваться готовым движком (а-ля Blitz3D), либо же своим уже написанным (только продвинутые программисты). Желательно, чтобы движок не вызвал у вас неприязни, и вам нравился синтаксис языка. Мне лично синтаксис Basic нравиться гораздо больше C++.

Звуки

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

Тем, у кого нет слуха (например - я) очень подойдет программа Fruity Loops – очень много достаточно разных инструментов и звуков для создания необходимой мелодии или звукового эффекта.

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


DEVASTATOR

Я решил сделать игру в форме турнира – летающие машины крушат друг друга, используя различные виды вооружения. Летающие машины выбраны только по одной веской причине – у нее может не быть движущихся элементов, поэтому ее моделировать и программировать будет очень просто. Башни машин – вообще просто конусы. Ну и пушки тоже статические, не анимированные. Для игры на издание, это серьезный минус.

Так как каждая машина состоит аж из 3х частей, то на это должно быть обоснование. Поэтому я сделал так – шасси влияет на количество обшивки, энергии, брони, величины скорости и скорости поворота. Компонент башня дает определенные бонусы, причем как положительные, так и отрицательные. Оружие дается базовое, при старте или респауне, а другое – нужно подбирать во время боя.

Вот части корабля:

Основания




Базис – основные цвета зеленый и белый.
    Скорость: 0,15
    Скорость поворота: 2
    Броня: 0
    Обшивка: 100
    Энергия: 250

Спринтер – основные цвета светло-синий и синий
    Скорость: 0,3
    Скорость поворота: 4
    Броня: 0
    Обшивка: 75
    Энергия: 150

Технодрага – основные цвета оранжевый и серый.
    Скорость: 0,2
    Скорость поворота: 3
    Броня: 1
    Обшивка: 125
    Энергия: 200

Крейсер – основные цвета болотный и светло-бирюзовый.
    Скорость: 0,1
    Скорость поворота: 1
    Броня: 5
    Обшивка: 200
    Энергия: 200

Защитник – основные цвета фиолетовый и темно-серый.
    Скорость: 0,15
    Скорость поворота: 2
    Броня: 2
    Обшивка: 160
    Энергия: 160


Башни




Нейтрон – основные цвета  зеленый и белый.
  Бонусы:
    Скорость: 0
    Скорость поворота: 0
    Урон: 0
    Скорость снаряда: 0
    Частота огня: 0
    Броня: 0
    Энергия: 0
    Обшивка: 0

Ротатор – основные цвета светло-синий и синий
  Бонусы:
    Скорость: +50%
    Скорость поворота: +50%
    Урон: 0
    Скорость снаряда: 0
    Частота огня: 0
    Броня: -2
    Энергия: 0
    Обшивка: -25%

Технаж – основные цвета оранжевый и серый.
  Бонусы:
    Скорость: 0
    Скорость поворота: 0
    Урон: -25%
    Скорость снаряда: -50%
    Частота огня: +50%
    Броня: +2
    Энергия: 0
    Обшивка: 0

Протектор – основные цвета болотный и светло-бирюзовый.
  Бонусы:
    Скорость: -50%
    Скорость поворота: 0
    Урон: 0
    Скорость снаряда: 0
    Частота огня: -25%
    Броня: 0
    Энергия: +25%
    Обшивка: +50%

Усилитель – основные цвета фиолетовый и темно-серый.
  Бонусы:
    Скорость: 0
    Скорость поворота: -50%
    Урон: +100%
    Скорость снаряда: +50%
    Частота огня: 0
    Броня: 0
    Энергия: -50%
    Обшивка: 0


Орудия




Импульсатор – основные цвета зеленый и белый.
    Урон: 5
    Скорость снаряда: 1
    Время перезарядки: 20

Рельсотрон – основные цвета светло-синий и синий
    Урон: 25
    Скорость снаряда: 3
    Время перезарядки: 50

Миноукладчик – основные цвета оранжевый и серый. (Оставляет мины, которые живут некоторое время ожидая врага. Если не дожидаются – самоуничтожаются.)
    Урон: 100
    Скорость снаряда: 0
    Время перезарядки: 250

Гравипушка – основные цвета болотный и светло-бирюзовый. (Помимо обычного выстрела, создает поле, в котором замедляется скорость стрельбы и перемещения судна.)
    Урон: 50
    Скорость снаряда: 0,1
    Время перезарядки: 150

Бластер – основные цвета фиолетовый и темно-серый.
    Урон: 2
    Скорость снаряда: 1
    Время перезарядки: 5



Параметры корабля (итоговые) считаются по следующему принципу:
Скорость = Скорость + Скорость*БонусСкорости
Время перезарядки = Время перезарядки - Время перезарядки*БонусЧастотыОгня
Броня = Броня + БонусБрони
А остальные параметры считаются как скорость.

Приведу несколько примеров:

Крейсер + Протектор + Рельсотрон
Параметры:
  Скорость: 0,05
  Скорость поворота: 1
  Урон: 25
  Скорость снаряда: 3
  Время перезарядки: 62,5
  Броня: 5
  Энергия: 250
  Обшивка: 300

Спринтер + Технаж + Гравипушка
Параметры:
  Скорость: 0,2
  Скорость поворота: 3
  Урон: 25
  Скорость снаряда: 0,05
  Время перезарядки: 75
  Броня: 3
  Энергия: 200
  Обшивка: 125



Теперь поговорим о уровне.

Уровень


Уровень представляет (или должен представлять) платформу, с различными коридорами и заграждениями. Перемещаясь по нему, игроки могут собирать капсулы здоровья/энергии, увеличивая соответствующий параметр. Он не генерируется, а считывается из файла. Файл представляет собой набор циферок, которые считываются, и в зависимости от строки и столбца определяется положение объекта. Очень прекрасный способ.

Пример уровня:

000000000000000000000000000000
011111000000004000030000111110
010000000000000000000000000010
010300100001000002000000000010
010000100001000000000000000010
010000100201005000000000000010
000000100001000000011111000000
000000100001000000010001000000
000000100001000400000301003000
000000100201000000010001000000
000300100001000000011111000000
000000100001000000000000000000
000000100001000000000000020000
000000000000000000050000000000
000000000000000000000000000000
000000400000011111111111000000
000000000000000001110000000000
000100000100000001110000004000
000110001100000401110200000000
000011011000000001110000000000
000001010000000001110000000000
003001010000011111111111003000
000005000000000200000000000000
000001111110000000005000000000
010000000000000000000000000010
010003000000000000000000000010
010000000200000003000000200010
010000000000000000000000000010
011111000000040000000000111110
000000000000000000000000000000

Как читать такое? Легко:
0 – пустая клетка.
1 – блок.
2 – аптечка.
3 – телепорт.
4 – энергия.
5 – оружие.

А вот как выглядит: (моно текстурный, который был в самом начале, и каким он стал после)


Если приглядитесь, то заметите сходство между текстовым вариантом уровня, и визуальным)
Алгоритм считывающий такое очень удобен, поэтому можно бездумно загонять любой такой уровень 30 на 30 символов.

С уровнем вроде все понятно. Теперь немного о графике.


Графика



В игре использовано много фейковых эффектов. Взрывы - это спрайты, на которые наложена анимированная текстура. Тени под машинами - фековые, это тоже спрайт. Особенно хороши взрывы корабля, когда устремляется к верху поток частиц. Это тоже спрайт.

Однако снаряды это уже не спрайты. На них еще наложена шкура - верхний меш, который является визуализирующим. А сам проверочный объект невиден.
Ну и спрайт для свечения тоже наложен на снаряд. Эффекты, чтоб их)

Для текстурирования уровня я использовал следующие текстуры:
Текстуры для пола:
Изображение
Текстуры для блоков:
Изображение

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

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

С графикой вроде все ясно. Теперь о геймплее.


Геймплей


Я сделал так, чтобы машины генерировались случайным образом - это бы не давало игроку заскучать, хотя наверное было бы правильно сделать так, чтобы он мог выбирать. Наверное да. Но как сделано, так сделано. Управление я сделал без стрейфа, о чем сильно поплатился в последствии, хотя на мой взгляд в данном типе игры он не нужен (именно в моей!). Перемещая машину, мы собираем красные бочонки и синие, которые дают соответственно здоровье и энергию для щита.

Оружия были сделаны разного калибра - например базовое можно применять хоть как, но оно самое бесполезное.
Рельсотрон хоть и редко стреляет, и недостаточно сильно, зато его снаряд летит очень быстро.
Миноукладчик ставит мины - очень хорошо зажимать врага в узком месте, или когда отступаешь. 
Гравипушка стреляет медленными, убойными снарядами, которые тормозят врагов в радиусе действия. Хороша против медленных противников.
Ну и бластер обладающий ошеломительной скорострельностью, и очень низким уроном. Очень хорош, чтобы сбивать слабых и быстрых противников.

Можно было конечно еще доработать игру, но все есть предел же. Лично я не до конца использовал свой потенциал - игра могла бить рекорды, если бы была сетевой. Так к этому все располагало - разное оружие, респауны, карта. Все. Я просто не использовал потенциал. Кстати, на конкурс не было предоставлено ни одной сетевой игры!



Надеюсь вы нашли эту статью познавательной и интересной)) Спасибо за внимание!

23 декабря 2010

Комментарии [11]