среда, 23 февраля 2011 г.

Попиксельные разрушения

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


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


     Возможно, для разработчиков Worms эта проблема показалась не существенной, или это такая фича, поэтому она прослеживалась во всех частях. Но я не мог смириться с этим в   Ice & Flora и сейчас опишу алгоритм, который мне помог. Возможно это не самый лучший алгоритм, в таком случае я рад буду прочитать ваши версии и предложения.

Рис. 1

     Рассмотрим небольшой квадратный участок уровня возле точки коллизии. На Рис.1 изображён наглядный пример ситуации, которая могла бы возникнуть, здесь серым закрашена твердь, а голубым сквозное пространство.
     Итак, наша цель создать круглое разрушение с центром в данной точке и радиусом R, представим этот круг. Замыслим дополнительный круг радиуса R2 > R концентрический с первым. Небольшой квадратный участок, который мы рассматриваем и в котором умещаются оба круга должен быть лишь немного больше большего круга. (Рис.2.)

Рис. 2

     Отметим все точки достижимые из центра разрушения по тверди как "связные". На (Рис. 3) можно видеть их жёлтым цветом. Есть необходимость искать связные точки только внутри рассматриваемого квадрата.
     На данном этапе можно добавить условие на свойства материалов, для того чтобы сделать некоторые пиксели неразрушимыми. Для этого надо не отмечать пиксели неразрушимого материала как будто они относятся к сквозному пространству. Стоит заметить, что неразрушимые части картины на фоне попиксельных разрушений остальной части выглядят весьма интересно. Данный приём также используется в Ice & Flora.
     В Worms проверка на связность отсутствует, что конечно не может не печалить.


Рис. 3

     Далее нужно пройтись по всем точкам квадрата не лежащим внутри кругов и из тех из них которые "связные" произвести поиск на все достижимые точки лежащие вне круга радиуса R и отметить их как "часть чего-то большего". На Рис. 4 все такие точки обозначены оранжевым цветом. 
Рис 4.

     Далее уничтожаем все "связные" пиксели не являющиеся "частью чего-то большего", на Рис 4. эти пиксели остались закрашены жёлтым цветом. Получаем результат. На Рис. 5 можно видеть сравнение обычного разрушения связных пикселей попавших в радиус R (слева) и разрушение по рассматриваемому алгоритму (справа).
Рис. 5

     На рисунке слева осталась неразрушенной небольшая группа пикселей, на рисунке справа нам удалось этого избежать. Разрушение захватило их, несмотря на то, что они не входили в круг разрушения радиуса R. Таким образом, данный алгоритм рассматривает пиксели не входящие в круг разрушения радиуса R, но входящие в круг радиуса R2 как потенциально подлежащие разрушению, и разрушает их, если они не являются "частью чего-то большего". То насколько R2 большее R есть диаметр минимально допустимой области. Например,  r = R2 - R = 20пикселей  означает, что минимальные кусочки, оставшиеся после разрушений, не смогут быть меньше чем 20 пикселей между самыми дальними точками.

вторник, 15 февраля 2011 г.

Игра Ice & Flora

Итак первая игра от Useless Games

Название: "Ice & Flora"
Жанр: Арканойд
Лицензия: Free
Движок: XNA 4.0
Достижения: Игра заняла первое место в конкурсе на сайте GemeDev.by (Конкурс №1).


Особенности:
  1.  Разрушение в игре реализовано попиксельно. Т.е. уровень представляет из себя растровую картинку, от которой ударами мяча откусываются круги, подобное встречается в  известной серии игр "Worms". Наличие на уровнях неразрушимых частей картинки придаёт идее свежесть.
  2. Кольцевая траектория движения ракетки. Стенки полностью отсутствуют, от игрока требуется отбивать мяч со всех сторон. При этом траектория у ракетки линейная, но замкнутая. Причём в разных уровнях разные траектории (круг, квадрат, восьмиугольник, шестиугольник, квадрат со скруглёнными углами). Камера всё время крутится вместе с ракеткой (Внимание! Во время игры у вас может закружиться голова). Данную особенность я добавил в игру в качестве эксперимента для того, чтобы избавиться от того, что мне НЕ нравиться в арканоидах, а именно неравномерность сложности во времени. В классическом арканоиде можно закинуть мяч на "чердак" и спокойно наблюдать как он скачет, порой же еле успеваешь играя с ним у ближней стенки. В "Ice & Flora" такого нет, всё равномерно. Поэтому я могу сказать: ”Эксперимент удался.
  3. Реактивное ускорение ракетки. Итак цель любого арканоида контролировать рубеж, не давая мячику его пересечь. Обычно скорость ракетки выдержана так чтобы за 1сек можно было достичь от одного конца игрового поля другого. В "Ice & Flora" встаёт проблема о величине игрового уровня: с одной стороны мяч держится локально в зоне приблизительно 45 градусов, с другой стороны мяч может пролететь сразу на другую половину за 180 градусов от ракетки, да и падающий бонус может находиться на большом угловом расстоянии от мяча. Если сделать скорость ракетки такой, чтобы за 1сек она проходила 180градусов (до другого конца уровня), то это может оказаться слишком быстрым для большинства случаев (возможно играть было бы слишком легко). Но если сделать скорость такой чтобы ракетка за 1сек проходила 45 градусов - то это может оказаться слишком медленным для некоторых ситуаций (игрок не чувствовал бы контроль над игровым полем). Поэтому было решено сделать два уровня скорости, добавив ракетке возможность реактивно ускоряться. Это кстати превращает арканоид из игры двух кнопок в игру трёх кнопок - что совсем не плохо. :)
  4. Намерзание льда. Наружные пиксели через некоторое время покрываются коркой льда, которая защищает их, сама она разрушается от одного удара, таким образом, защитив от этого удара пиксели уровня. Идея сделать попиксельный арканойд, в котором внешние пиксели покрывались бы льдом, пришла ко мне ещё год назад. Я рад, что вЫносил её и соединил с другими идеями. Лёд делает уровень разнообразнее и интерактивнее. Я не могу сказать, зачем нужен лёд, просто он делает игру лучше.
  5. Бонусы. Представьте себе арканоид в котором нет бонусов. Это невероятно скучный арканоид, поэтому я не мог не включить бонусы в "Ice & Flora". Бонусы висят на уровне как на дереве и просто осыпаются с него от ударов мяча, проблемой в первую очередь было придумать их поведение. В классических арканоидах они падают вниз, но в "Ice & Flora" нет ни низа не верха. Тогда я решил взглянуть на проблему по другому. Те бонусы падали не вниз, они падали в руки игроку, чтобы тот их ловил, Разве не для того созданы бонусы чтобы их ловить? Таким образом, сохранив классическую концепцию я сделал особое поведение бонусов, согласно которому вначале бонус получает импульс от мяча а затем постоянно ускоряется в сторону ракетки. Некоторым может показаться, что бонус летит куда-то далеко, где его не поймать, но попытайтесь не двигаться, и он упадёт к вам прямо в руки (ну или почти!). Как мне кажется благодаря такой системе  и реактивному ускорению, возможностей поймать бонус или НЕ поймать минус больше чем в классическом арканойде. В классических арканоидах обычно заранее неизвестно где какой бонус находиться, в "Ice & Flora" некоторые бонусы скрыты знаком вопроса.

     В игре 5 уровней стилизованных под растительность. Уровни различаются картинкой, фоном, траэкторией, а также поведением камеры. Так в 3ем уровне (ромашка) камера ориентируется не по ракетке, а к центру уровня, что немного  освежает взгляд, а в последнем уровне камера вовсе не вращается, а лишь следует за ракеткой из-за чего он такой сложный.

Системные требования:
  • ОС Windows не ниже XP Sp3.
  • DirectX не ниже 9
  • .Net Framework 4.0
  • XNA Framework 4.0
Ссылка на скачивание: IceAndFlora.rar

     В будущем мы намереваемся сделать продолжение "Ice & Flora 2" и вероятно версию для Windows Phone 7 для этого нужно подождать хотябы пока Microsoft сделает поддержку самописных шэйдеров.


     В дальнейшем я подробнее напишу о реализации некоторых моментов Ice & Flora, которые на мой взгляд могут быть кому-нибудь полезны.

вторник, 1 февраля 2011 г.

Команда Useless Games


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

     Завершение разработки бэта версии игры Ice&Flora совпадает с моментом появления новой команды "Useless Games". На мой взгляд это простое, запоминающееся и красивое название, каким и должно быть.

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

     На данный момент в команде формально состоит двое постоянных участников:

Программист: Hale_32bit

Художник: Михаил_fet

     Сейчас мы собираемся заняться разработкой вебсайта команды. Помимо этого сейчас мы участвуем в конкурсе на сайте GameDev.org.ua и планируем представить на конкурс новую игру жанра "три в ряд",  а потом мы намеренны постепенно переходить на комерческие проэкты.
     Пока всё.