Miners Truck. Разработка игры на заказ

После размещения игры про ДедаМароза на FGL, ко мне обратился один спонсор с просьбой разработать игру для него по его «проекту». Вся сила проекта заключалась в картинке с изображением гигантского грузовика и ссылкой на страницу с игрой про грузовики и про перевозку грузов.

Это моя первая Flash игра на заказ и с реалистичной физикой. Цель игры - не растерять груз, загруженный в грузовик, пока везем его из шахты на завод.

Фото карьерного грузовика

Фото гиганского грузовика. Подобные грузовики обычно работают на открытых угольных карьерах. Эту картинку мне прислал спонсор в качестве ТЗ :)

Вообще, это какое-то забавное совпадение, поскольку он врядли понимает по-русски, и тем более, врядли читает мой блог. Не смотря на смешной бюджет (для меня), я все же решился взяться за работу по двум простым причинам: а) я же тоже собирался делать игру про грузовики и перевозку грузов, и подумалось мне, что это не так уж и плохо, если за мои эксперименты и за наработки по игровому движку мне точно заплатят; б) все клиенты, с которыми я запланировал заниматься работой в ближайший месяц, неожиданно куда-то сдулись и я был свободен. Срок на разработку я установил себе сам, мне показалось что 2-3 недели будет достаточно, чтобы сделать игру подобного типа с требуемым количеством уровней.

Это моя первая игра с реалистичной физикой. Конечно, я не любитель изобретать велосипеды, поэтому долго не раздумывая я взял для этой игры всем известный физический движок Box2D, тем более ранее я уже с ним немного баловался. Тут я готов взять свои слова обратно по поводу сроков разработки игр :) Нет, реально, оказывается если брать готовый проверенный физический движок и на нем делать несложную физическую игру, то получается все очень быстро и увлекательно. За неделю плодотворной работы мне удалось собрать не просто глючную альфадемку, а полноценный кусок игры.

?значально мне подумалось, что я много времени потрачу на разбор полетов с физикой, но к моему удивлению, в этом плане все прошло очень гладко. Популярность движка дает свой плюс в виде подробной документации (даже на русском языке), большое сообщество и массу примеров. Так что неожиданные проблемы и интересный опыт меня ждали как раз там, где я и не подозревал :) А это: как создавать для таких игр уровни?

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

Набросок ландшафта

На данном скриншоте можно отчетливо видеть, что составляемая поверхность из отдельных графических фрагментов — это большая головная боль для создания незаметных переходов между тайлами и большое ограничение на ландшафт игрового уровня. Кстати, вначале была идея сделать очень не ровную поверхность, но эксперименты показали что ездить по такой поверхности не весело как-то :(

Полночи я смотрел разнообразные игры в этом жанре с целью выяснить, каким образом строятся игровые уровни в них. Даже одну игру попробовал расковырять и к своему удивлению не обнаружил внутри уровней вообще :) В любом случае время даром не прошло. Вывод из увиденного был только один, каждый игровой уровень — это отдельное большое изображение с любовью отрендеренное в 3D, нарисованное во Flash или в любом другом графическом редакторе. То есть, игровые уровни должны создаваться непосредственно во Flash IDE без всяких редакторов уровней. ? это был самый интересный момент в разработке, потому что Flash имеет ограничения рабочей области для рисования и естественно никакущую производительность для такого объема не оптимизированной графики. В общем история о том, как я боролся с созданием уровней и их оптимизацией тянет на отдельный увлекательный пост ;)

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

Грузовик в изометрии

Грузовик в изометрии

?так, за неделю активной работы мне таки удалось собрать играбельную версию с одним уровнем. За это же время я подготовил практически всю игровую графику и посадил её на физический движок. Вообще в игре запланировано 6-8 уровней, на протяжении которых игроку прийдется возить на грузовике какое-то хитрое ископаемое фиолетового цвета. Поскольку в ископаемых блоках имеются небольшие округлые вкрапления, как в игре «Santa Is Coming», я предполагаю, что возить нам прийдется секретно-добываемое сырье для самых вкусных конфет :D Но на самом деле это не важно, каждый игрок сможет сам себе придумать для чего нужны эти фиолетовые кирпичи, добываемые в пещере. Среднее время прохождения игры предполагается в районе 15-20 минут.

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

Когда речь идет об оговоренной сумме, объемах работы и сроках — мне лично тянуть не зачем, быстро и хорошо сделал — быстро и хорошо получил деньги — таков мой подход к работе как фрилансера. Чтобы закончить игру, мне по плану нужно еще примерно полторы недели, чтобы все довести до блеска. Так что, если спонсор не будет тупить с оплатой, то игрушку мы сможем полноценно погонять уже через пару недель ;)

 

Не продешеви! Бери тысячи 2 долларов как минимум за игру.

Максим
3 Февраля 2010
— 16:16
#

действительно, либо забавное совпадение, либо очередное свидетельство тому, что желания/мысли материальны )))
P.S. арт, в общем как и всегда, потрясающий!!

LegendMAN
3 Февраля 2010
— 17:02
#

Ой, клевая какая графика! Как всегда, пятерка.

Не подкинешь ссылочку о бокс2д (желательно по-русски)? Я ее вообще еще не ковырял, а хотелось бы.

Сашка
3 Февраля 2010
— 17:38
#

Если это забугорный спонсор то наврятли поймет наши знаки дорожного движения :)

?ван
3 Февраля 2010
— 20:06
#

@?ван, наши дорожные знаки не особо отличаются от дорожных знаков в других странах — это как мировой стандарт с некоторыми отличиями. В данной игре значение знаков вообще не принципиально, они используются больше как оформление ;)

Ant.Karlov
3 Февраля 2010
— 21:00
#

Вот ссылка на Box2D (русский мануал)
http://docs.google.com/View?id=dfh3v794_41gtqs6wf4#d0e496
Чтобы не пугаться это ссылка дока на C++ версию (так как box2D изначально пишется для C).
Есть порт для Flash и так как автор сохранил АП? с оригинала потому ничего принципиально не меняется.
А вот адрес порта:
http://box2dflash.boristhebrave.com/

VirtualMaestro
3 Февраля 2010
— 21:01
#

@Сашка, Box2D v2.0.2 Руководство, за перевод можно сказать спасибо товарищу с форума GameDev.ru. Только хочу заметить, что примеры приведенные в данном документе, если я не ошибаюсь, на языке C++. Но общие принципы работы с физическим движком очень хорошо доступны. Для более глубокого изучения движка все равно прийдется по бороздить англоязычные форумы.

Ant.Karlov
3 Февраля 2010
— 21:05
#

Напиши как ты делаешь привязку визуальных объектов к физике. В смысле вручную каждый объект привязываешь или как то автоматизировав дело или может еще как ?

VirtualMaestro
3 Февраля 2010
— 21:08
#

@VirtualMaestro, хехе, почти одновременно ответили :)
Кстати, мне кажется или новая версия движка Box2D имеет явные проблемы с обработкой столкновений? Объекты сильно дергаются, проваливаются и скачут... например в той версии с которой я сейчас работаю такого нет.
? еще, в новой версии кое какие моменты движка принципиально изменены, поэтому в некоторых местах старая документация может не соответствовать действительности.

Ant.Karlov
3 Февраля 2010
— 21:09
#

@VirtualMaestro, у b2PolygonDef есть атрибут userData — туда можно сохранять ссылку на клип который представляет собой визуальное воплощение объекта. Далее перебирать все физические объекты и проверять этот атрибут на наличие в нем клипа, если он там есть, то присваивать ему положение и разворот физического тела. Но иногда, когда параметров о теле нужно хранить больше, то туда можно записывать ссылку на свой объект-класс в котором производить вычисления и хранить все необходимые данные игрового объекта.

Ant.Karlov
3 Февраля 2010
— 21:14
#

всё-таки видишь как получилось, переживал что зря не одел кастрюлю, и оказалось, что переживал напрасно :)

yailenko
3 Февраля 2010
— 21:31
#

@yailenko, аха :) Вообще оказалось, что таких игр уже вагон и маленькая тележка. Просто я был не в теме.

Ant.Karlov
3 Февраля 2010
— 22:40
#

Здорово! Очень вкусно все выглядит - не терпится поиграть. А по поводу идей, все верно, они материальны )) Стоит только чего-то захотеть по-настоящему и так или иначе шансы начинают подворачиваться под руку ;)

flazm
3 Февраля 2010
— 23:13
#

Мои поздравления с первым долгосрочным спонсором:)

Bakame!
4 Февраля 2010
— 09:19
#

По поводу рисования уровней для box2d игрушек. Скачиваем бесплатный векторный редактор inkscape, рисуем в нем "физическую составляющую" уровня (физические элементы в виде векторных примитивов), экспортируем в SVG. SVG - это открытый xml-based формат, его можно загрузить и распарсить из actionscript. Останется только совместить физику с графическим артом - и все.
Подробнее - здесь http://www.ezqueststudios.com/blog/creating-levels-box2d/

ksanster
4 Февраля 2010
— 11:41
#

Если я правильно понял то имеешь ввиду новую версию 2.1a (alpha) . То там действительно есть лаги в производительности и скорее всего в просчетах, но это только альфа потому ничего страшного. Автор говорит что этот движок будет более мощным и быстрым чем 2.0.2
Я давно слежу за этим движком но только не давно начал его щупать и потому для меня старая версия это 2.0.2, а новая это 2.1 alpha :))
Если ты имеешь ввиду другое то напиши пожалуйста в какой версии какие не соответствия и изменения и где могут быть нюансы (если это не много писать :))). ?ли может быть есть линк какой-нить.

VirtualMaestro
4 Февраля 2010
— 14:51
#

Я не совсем это имел ввиду, наверное плохо объяснил :)
?мею ввиду что наверное геморно вот так создавать (если конечно объектов много будет) объекты - сначала рисуешь, потом как то определяешь границы шейпов внутри тел, потом делать привязку... Если бы какой нибудь редактор, там нарисовал графику, потом сразу на этой графике нарисовал области шейпов, а потом сохранил (может быть в XML или SWC может быть еще как нибудь) как готовый объект - с графикой и физикой. Потом каким то парсером проходишся и автоматом создаются уже готовые объекты ... Ну как то так :)) мутно объяснил, мысль еще не до конца сформировалась как это сделать :)
Главная идея в том чтобы создавать все игровые объекты (с графикой и физикой) быстро без лишней рутины.
Вот ksanster внизу на что то подобное указал.

VirtualMaestro
4 Февраля 2010
— 15:02
#

Большое спасибо за ссылку!

VirtualMaestro
4 Февраля 2010
— 15:03
#

@VirtualMaestro, у меня как раз судя по названию архива версия 2.0.2 и это предыдущая версия (?). На новую версию тратить время пока желания нет, на первой же странице движка в демке видно все проблемы обновленной версии :(
Краткий обзор изменений в новой версии на примере можно посмотреть здесь: BOX2DFLASH 2.1A RELEASED – WHAT CHANGED

Ant.Karlov
4 Февраля 2010
— 19:57
#

@VirtualMaestro, ах, ты об этом. Ну тут все просто, физические тела с простыми формами я создаю и расставляю прямо в Flash IDE, а в коде игры при загрузке уровня (уровень хранится в отдельном MovieClip), перебираю содержимое клипа (уровня) и на основе его содержимого создаются статические и динамические тела. То есть в целом то, о чем ты написал, я как раз и делаю прямо во Flash IDE. Это и есть для меня самый интересный опыт в данной игре. Подробнее о том как делал уровни для этой игры, я напишу отдельно.

Ant.Karlov
4 Февраля 2010
— 20:39
#

Кстати в этом же примере про изменения в новой версии Box2D если разогнать телегу и врезаться в стену иногда выскакивают неприятные эффекты. Колесо проваливается в стену, потом выпрыгивает из нее, проваливается в пол ну и т.п. Мне такое глючное поведение физических тел крайне не нравится. Возможно автор движка навел кое какую оптимизацию в этом плане, производительность возросла но за счет этого появились как раз эти неприятные глюки :( Посмотрим что будет дальше.

Ant.Karlov
4 Февраля 2010
— 21:32
#

@ksanster, действительно интересно. Спасибо :)

Ant.Karlov
4 Февраля 2010
— 21:33
#

@Bakame!, с поздравлениями пока спешить не стоит. Я пока сомневаюсь, что он будет долгосрочным, так как по таким деньгам, о которых мы с ним договорились работать сейчас, я в долгосрочной перспективе работать не согласен :P

Ant.Karlov
4 Февраля 2010
— 21:36
#

@flazm, всё, пока сегодня гулял с ребенком, в голову пришла более интересная концепция игры о перевозке грузов. Так что, если игра про грузовики и будет, то совершенно не такой, какой я, например, представлял себе её до этого :) Правда кастрюли под рукой не было, но зато была шумовая завеса из детских криков :D

Ant.Karlov
4 Февраля 2010
— 21:41
#

Да, в первое время я с такими ситуациями тоже сталкивался:)
Но всё равно — удачи вам:)

Bakame!
5 Февраля 2010
— 07:31
#

Офигенски! Вот читаю твои посты (темы) и душа нравится, как всё здорово выходит во всех направлениях. Вот к чему и надо стремится. Успехов тебе!!

J0x
6 Февраля 2010
— 10:13
#

@J0x, спасибо! :)

Ant.Karlov
6 Февраля 2010
— 15:12
#

Смотришь и заряжаешься энергией для своих поделок :)
Балдею от блога. Автору огромнейшее пасиба :)

FlashRushGames
9 Февраля 2010
— 12:40
#

Официально вышла Zoo Transport на арморгеймсе:
http://armorgames.com/play/5289/zoo-transport

yailenko
11 Февраля 2010
— 19:08
#

@yailenko, ага. Все очень неплохо в итоге получилось, но прыгающий и летающий сам по себе груз меня достал, из-за этого геймплей получился скучным и утомляющим :( Осилил только 10 уровней.

Кстати, посмотрел сайт этих ребят, следующая игра у них про стрельбу экспериментальными человечками из пушки :D

Ant.Karlov
11 Февраля 2010
— 19:44
#

Более православный путь - это всё так же пользоваться для рисования уровней Flash IDE, только не парсить полученное в реалтайме, а использовать для этого JSFL-скрипты, которые после обработки подсунутого им мувика сгенерят необходимый XML-файл.

elmortem
11 Февраля 2010
— 22:48
#

:))

yailenko
11 Февраля 2010
— 23:40
#

?мхо цена данной игры минимум $5k.

maklaus
1 Марта 2010
— 14:29
#

@maklaus, к сожалению получилось намного дешевле :(

Ant.Karlov
1 Марта 2010
— 23:19
#