Избранное сообщение

Очень вольный перевод статьи Designing to Succeed

Не так давно некий Tony Downey, геймдизайнер, опубликовал внушительную статью о разработке и игровом дизайне инди-игр. В ней он рассмотр...

четверг, 22 сентября 2011 г.

Разработка и итоги игры "Sieged!"

Мы – творческая артель New Art Games - недавно выпустили новую flash-игру. Играть можно здесь.

image

Игра представляет собой физическую головоломку. Цель игры – оглушить всех врагов подручными материалами. На этот раз мы использовали физическую библиотеку nape, и теперь совсем-совсем не хотим использовать box2d. Почему так, история разработки и некоторые итоги – под катом.



Начало

Началось всё с экспериментов с физическими движками. Как показала практика, самописная физика для flash-игр – зло, а потому я стал активно тыкать box2d. По нему много информации, статей и уроков – на Хабре тоже недавно проскакивало несколько статей. Есть даже видеоуроки. Но минусы этого движка известны – небольшая производительность, мелкие радости типа перевода метров в пиксели и сложная структура (после знакомства с которой начинаешь понимать, зачем нужны аж видеоуроки…)

Потом был опробован nape. По нему существенно меньше информации, зато демо-уровни поражают производительностью. Дрожащими от страха того, что 2,5 обучающих статей по движку будет недостаточно, всё же был выбран он. И совершенно не напрасно – nape прост и логичен настолько, что официального руководства с лихвой хватает для нормальной работы. Но сразу оговорюсь, что есть и минусы – высокая производительность обеспечивается менее точными просчётами. Кроме того, мне не удалось сделать абсолютно жёстких соединений.

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

Едем дальше

Сама собой пришла идея сделать игру про оборону замка путём скидывания на врагов различных предметов. Частично идея была вдохновлена игрой Cover Orange, но мы мужественно удержались от клонирования и сделали несколько иную механику.

Нашему мега-художнику Андрею я долго и упорно объяснял, что пора отойти от «атмосферной» неказуальной графики и сделать нечто более «цветастое» и «кавайное». Так что в процессе работы ко мне периодически приходили вот такие человечки:
image

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

Я буду долго гнать велосипед…

Ну или изобретать… Одним из требований для игры мы себе поставили сделать встроенный редактор уровней. Никакой информации по этой теме я не нашёл, и вообще я программист-самоучка, а основной целью в геймдеве для меня всегда был гейм-дизайн. Так что редактор стал для меня личным испытанием, можно сказать. Не без проблем, но я его выдержал. Собственно, все 30 уровней собирались в игровом редакторе.

Формат хранения уровней получился весьма специфическим: каждый уровень – это массив из четырёх массивов массивов. Проще говоря, что-то типа того: [[объекты уровня], [соединения], [враги], [сбрасываемые предметы]], а в каждом из этих четырёх что-то типа того: [тип объекта, x, y, угол]. Вероятно, более хорошим решением было бы использовать объекты с набором параметров, но мне хотелось иметь возможность лёгкого доступа к уровням в любой момент, дабы править какие-то значения руками. А ещё необходимо было дать возможность игрокам хоть как-то обмениваться уровнями, а, следовательно, надо было как-то превращать уровни в текст. А текст, для нормального парсинга обратно в массивы, надо было пичкать разделителями. В итоге, игроки могут обмениваться вот такой абракадаброй: «90^3,104,382,64,74.7,-90^3,32,382,64,74.7,-90^&314,376^&&4^4^», которая, тем не менее, успешно превращается в уровни.

Хьюстон, у нас проблемы

Но самой большой проблемой была даже не разработка редактора, а выдумывание самих уровней. Первые 20 были сделаны влёт, а дальше начался творческий кризис и борьба с мелкими косяками физического движка. Но, в итоге, мне удалось обратить неточные просчёты nape на пользу игре и воспользоваться ими в целях создания необычных уровней. Например, прохождение вот этого уровня построено как раз на «обрывании» нежёстких соединений:
image

Немного пришлось повозиться со встраиванием ачивок – они как-то странно сохраняли значения. Для них, кстати, использовался класс Олега Антипова, который магическим образом появится в судьбе игры дальше.

Ну а самой беспроблемной частью разработки как всегда стали звук и музыка – наш композитор Сергей Соловьев отлично справился с задачей и в короткие сроки создал два трека для игры.

Всего на разработку игры ушло два месяца «грязного» времени – с учётом параллельной работы над другими проектами и поездкой в отпуск.

Продажа

Конец разработки пришёлся на июль – самое мёртвое время для продажи игр. Но личный финансовый кризис и желание разделаться уже с проектом заставили залить игру на flashgamelicense.com и надеяться на лучшее. К концу примерно третьей недели закончилась вообще хоть какая-то движуха, дальше тянуть не было особого смысла. Игра ушла… Олегу Антипову для его портала onlinegamer.cc за небольшой апфронт (размеры, если очень хочется, уточните у самого Олега, вдруг он против раскрытия этой информации) и возможность выпустить игру с рекламой.

Итоги

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

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

P.S.:
Из-за забавного гнома-маскота нашу игру радостно взяли на портал dwarfgames.com. Вставляйте в свои игры гномов!

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

Ну и в блог что-то дельное появился повод написать... 

6 комментариев:

  1. Оригинальная система хранения уровней. Беру на заметку.
    А вот придумывание новых уровней это действительно трудно. По крайней мере я сейчас на этом сильно завис.
    Отличный постмортем, гном кавайный))

    ОтветитьУдалить
  2. Был вариант хранить, например, типы блоков в строке, а не в целочисленной переменной, но я боялся проблем с парсингом. Возможно, зря, но учитывая первый опыт написания редактора вообще и парсинга уровней в частности, я решил пойти по простейшему пути.

    Спасибо за мнение)

    ОтветитьУдалить
  3. Можно же xml использовать. Думаю удобнее будет чем массив массивов

    ОтветитьУдалить
  4. Можно. Но xml надо будет хранить всё равно внутри флешки, так как многие порталы не позволяют играм обращаться на сторонние сайты или подгружать что-то кроме самой swf.

    А ещё проблема парсинга не отпадает. В некотором смысле, она даже чуть усложняется. Хотя, может, я просто недостаточно работал с xml.

    ОтветитьУдалить
  5. Да, верно, xml надо будет держать в игре, но это не проблема. Их можно забивать прямо в коде или хранить отдельными файлами, а в коде эмбедить.
    Парсить думаю проще будет, ведь у xml наглядная структура. Проще использовать level.object.@type, чем помнить, что тип объекта это level[0][0][0], например

    ОтветитьУдалить
  6. Надо было XML использовать -- все очень просто.
    Но в целом, получил опыт парсинга строк -- это тоже плюс. Я в свое время написал парсер для HTML.

    ОтветитьУдалить