четверг, 22 ноября 2012 г.

Игра Reborn

     Я конечно немного припозднился с обзором, т.к. работу над Reborn я закончил ещё год назад. С этим проектом я учавствовал в тогдашнем конкурсе на xnadev.ru и занял какое-то чисто символическое место. Главным образом из-за того, что это не законченная игра, а прототип. Однако думаю извлечь урок из неё можно для себя ну и для вас, читателей, думаю найдётся пару интересных идей.
     Идея игры зародилась из моей любви к играм жанра Math 3. Конечно жанр этот достаточно казуальный. Нравится мне в нём простота в полноте. Обычный Math 3 я конечно делать не стал, далее следует список фич-механик которые я заюзал.
 
 
 
     Первая фича заключается в потухании игровых камней. Т.е. все камни на игровом поле становятся серыми и становится невозможным ориентироватся по цвету, игроку приходится распознавать их форму. Однако камни снова приобретают краски когда игрок наводит на них курсор. Это очень удачная находка на мой взгляд, т.к. она действительно работает. Чтобы поле не казалось слишком серым, я добавил рандомное зажигание камней на игровом поле получилось очень красиво (похоже на новогоднюю ёлку).
     Вторая фича это непрерывность поля по горизонтали. Игровое поле - это не замкнутый прямоугольник а барабан и в каждый момент времени игроку видна одна его часть. И этот барабан медленно вращается, а при достижении игроком определённого количество очков направление вращения изменяется. Это придаёт игре некую динамичность и выводит нас в 3D пространство. Разумеется я добавил барабану перспективу. Кроме того я дал камням бамп эффект и спекуляр карту. Спекуляр картой я планировал нарисовать глянцевые(металлические) узоры на каждом камне, но увы  до рисования дело не дошло, однако вы можете увидеть маленькую круглую металлическую пластинку на жёлтых камнях.
     Третья фича, которую я хотел сделать, но не смог, и потом решил, что это нецелесообразно: возможность параллельной игры. Т.е. в момент, когда часть игрового поля рушится из-за того, что вы собрали комбинацию, вы можете собрать ещё одну комбинацию, а потом вторую и третью. Этого я не видел ни в одной игре жанра, но это выводит игру на новый уровень динамичности, придаёт ей спортивность. Ни раз я расстраивался, пытаясь собрать комбинацию, но не получалось, т.к. эта возможность заблокирована во время обрушения. Зачем давать игроку повод для разочарования, пусть лучше он будет приятно удивлён. Пытаясь реализовать это я запутался, или может я не с той стороны зашёл просто, поэтому эта фича не увидела свет.
     Вы должно быть заметили существование ряда игр со словом Deluxe в названии в частности Zuma Deluxe и Bejeweled Deluxe. Игры эти действительно качественные, я так и понял что делюкс - значит качественная игра. Но как-то раз я засел целый день убивать время рубиться в Bejeweled 2 Deluxe Action Mode и вдруг осознал: а ведь за столько времени игра мне ни разу не написала "кончились ходы"(что часто случается в других играх жанра Math 3).  Немного обмозговав это дело, я нашёл несложный способ добится того, чтобы ходы в Math 3 игре никогда не кончались. Просто надо всегда считать количество возможных ходов и в момент обрушения и генерации новых камней проверять, как оно изменится, и перегенерировать камни, если ходов не остаётся. Легко заметить, что при обрушении трёх камней (а меньше обрушится в классической игре не может) всегда возможно сгенерировать новые камни так, чтобы после обрушения на игровом поле оставалась хотябы одна нетривиальная (три камня одного цвета изначально лежат в ряд)  комбинация. После этого в моём словарике появилось новое слово "делюксовая игра" - игра в которой учтено всё до мелочей, в которой игрок будет действовать свободно, вместо того чтобы натыкаться на ограничения - качественная игра. возможность параллельной игры которую я не смог реализовать как раз из этой оперы. А вот генерацию камней так чтобы ходы игрока никогда не кончались я сделал. Причём сделать это очень просто. Сложным оказался алгоритм подсчёта возможных ходов, но без него никуда. Подсчёт ходов нужен для системы подсказок и просто если вам нужно сказать игроку, когда ходы закончатся (если вы откажетесь от бесконечных ходов). Стоит добавить, что в моей игре игрок видит каждый момент времени только часть поля, поэтому мой алгоритм считает количество возможных ходов на маленьких участках поля и обеспечивает их наличие после каждого обрушения.
     Ещё одна отличитаельная фича была придумана уже во время разработки. Это два обратных отсчёта. Под обратным отсчётом я подразумеваю полоску которая уменьшается со временем, и игрок проигрывает, когда она заканчивается (такая же система используется в Bejeweled в Action Mode и ещё много где). Собирая комбинации, игрок увеличивает эту полоску, если игрок сможет увеличить её до определённой отметки - уровень пройден. В моей игре используется две полоски - обе они уменьшаются со временем, однако для увеличения каждой из них от игрока требуется выполнение разных действий. Т.е. например одна полоска увеличивается когда игрок собирает комбинации из красных камней, другая на синие комбинации. Это также придаёт игре разнообразия и динамичности и решает проблему о зацикливании внимания, когда начинаешь собирать комбинации только одного цвета т.к. внимание сосредоточилось только на нём. Кроме того было бы забавно менять целевые цвета во время игры (сделать это не трудно но я не сделал).
     Кроме того я ввёл в игру неразрушимый камень. Неразрушимые камни (камни которые не собираются в комбинации) потребовали контроля за ними, т.к. если их не разрушать (а разрушить их нельзя) то они будут накапливатся на игровом поле, и вскоре не останется ходов. Кроме того следить за тем чтобы ходы не кончались обычным способом стало невозможным. Поэтому я добавил камень всех цветов, который вступает в комбинацию с неразрушимым если собрать два его и несколько неразрушимых камней в ряд. Кроме того с обычными камнями камень всех цветов реагирует как камень любого цвета. Тут ещё возникла проблема: неразрушимые камни по обыкновению скапливаются внизу игрового поля, а  камни всех цветов очень хорошо реагируют с цветными камнями и не доживают до низа. Нижняя часть поля оказывается заблокированной. Тогда я сделал хитрость, чтобы неразрушимые камни оказавшиеся на самом дне проваливались под дно и вываливались в соответствующее освободившееся пространство сверху. Также я считаю неразрушимые камни и блокирую их генерацию когда их слишком много. В догонку к этому я добавил камни реагирующие только будучи собраными 4 в ряд. И всё это оказалось фигня, идеальная простота игры потерялась. никакой цели у этого ряда фич нет - просто разнообразие. Однако, при этом я открыл для себя ещё  одну тему, о которой говорить сейчас не буду, она достойна отдельной статьи.
     Вы можете сами скачать Reborn и поиграть. Т.к. это не полноценная игра то следует и в ней нет системы подсказок, требуется заранее объяснить что есть что. По бокам от игрового поля находятся цветные столбцы - это полоски обратного отсчёта. По их цвету можно определить комбинации из камней какого цвета следует собирать. Салатовые четырёхугольники - это неразрушимые камни, бабочки - камни, которые реагируют по 4 в ряд минимум, паутинка - камень любого цвета. Кнопка Hint включает подсветку возможных ходов.

Системные требования:
  • ОС Windows не ниже XP Sp3.
  • DirectX не ниже 9
  • .Net Framework 4.0
  • XNA Framework 4
Страница скачивания: http://uselessgames.ru/downloads.php?cat_id=2

 

вторник, 23 октября 2012 г.

Прокси карт

     Привет всем кто давно меня не читал. Год назад я начал увлекаться настольными играми, в частности коллекционной карточной игрой Magic the Gathering. Недавно готовясь к выходу нового сэта по этой игре, я решил создать генератор прокси карт, чтобы протестировать сэт до его выхода.
     Как это работает? Внесите информацию обо всех картах в таблицу Excel. Чтобы считать эту информацию я  использовал библиотеку CSharpJExcel - очень мощная вещь в сравнении с MyXls которую я использовал раньше. Кроме того MyXls не умеет читать xls файлы, а только записывать. Хотя конечно вы можете использовать более продвинутые технологии для хранения информации в том числе и базы данных.
     Изготовьте шаблон для карт на векторном редакторе. Мой шаблон вы можете видеть ниже, я использовал редактор Inkscape. Пространство использовано так, чтобы разместить на одном листе А4 15 карт (как раз 1 бустер). 


     На рисунке  изображён шаблон с уже подставленным текстом карт, в чистом же шаблоне все поля пустые. 
     Далее сохраните шаблон в формате SVG. Тут собственно и заключается вся хитрость. SVG очень удобный формат т.к. является расширением XML. Мне необязательно разбираться в этом формате, чтобы программно модифицировать содержание тестовых полей.
Для того чтобы подготовить шаблон забейте в текстовые поля легко узнаваемый текст, откройте его в вордпаде и найдите теги этих текстовых полей. В найденные теги добавьте свойство-идентификатор.

    <text
       SpecialID="Name1"
       xml:space="preserve"
       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
       x="852.19617"
       y="-233.12511"
       id="text3769"
       sodipodi:linespacing="125%"
       transform="matrix(0,1,-1,0,0,0)"><tspan
         sodipodi:role="line"
         id="tspan3773"
         x="852.19617"
         y="-233.12511">ABRA-KADABRA</tspan></text>

     Здесь красным выделен узнаваемый текст, синим - свойство идентификатор, которое нужно дописать.
     С помощью LinqToXML (System.Xml.Linq) можно легко открыть шаблон найти теги содержащие идентификаторы и изменить их содержании, затем сохранить шаблон в новом файле, так и сделайте. Вот и всё, карты готовы к печати. Вырежьте распечатанные карты и вставьте их в протекторы вместе со старыми картами для жёсткости. Осталось только заметить, что формат оказался пробелозависимым, открывайте файл с использованием модификатора PreserveWhitespace:

XDocument doc = XDocument.Load("Sample.svg", LoadOptions.PreserveWhitespace);

     Теперь, когда технология отработана я могу изготовить прокси и для UselessWars.

вторник, 10 января 2012 г.

Как превратить квадратное разбиение в гексогональное?

Рецепт:

1)  Возьмите обычный двумерный массив тайлов. и визуализируйте его на экране (Рис. 1).

Рис. 1

2)  Измените алгоритм визуализации так чтобы каждый ряд был смещён по оси x вправо на i*d/2. где d - ширина тайла, i - номер строки. Получится картина как на рис. 2.

Рис. 2

3) Замените квадратики на шестиугольники (Рис. 3)


Рис.3

4) Готово.

     Из рисунка 3 видно, что в данном массиве возможны перемещения персонажа в направлениях: вверх-вправо (-1,0), вправо (0,1), вниз-вправо (1,1), вниз-влево (1,0),  влево(0,-1), вверх-влево (-1,-1). В скобках проставлены соответствующие изменения индексов.

понедельник, 9 января 2012 г.

Гексагональное разбиение

Великий геометрический смысл
     
      Представим себе два одинаковых круга. Круг номер 1 прочно закреплен в точке пространства, а круг номер 2 ограничен лишь тем, что прикасается кругу номер 1. Другими словами круг 2 свободен кататься по поверхности круга 1 (Рис. 1).

Рис. 1 круг 2 катается по поверхности круга 2

     Сколько же кругов может одновременно кататься по поверхности одного базового круга не пересекаясь друг с другом? Мы не будем формально решать данную задачу, а просто увидим из рисунка 2, что таких кругов может быть шесть, не больше и не меньше.


Рис. 2 Шесть кругов, касающихся седьмого и не пересекающихся друг с другом.

     Удивителен тот факт, что 6 кругов помещаются вплотную друг к другу без зазоров. Т.е. ни один шар не может сдвинуться с места, пока остальные зафиксированы. Иначе обстоят дела в трёхмерном пространстве: максимум 12 шаров могут одновременно соприкасаться с одним тринадцатым, но между ними будут оставаться небольшие зазоры, и по крайней мере некоторые шары будут иметь небольшую свободу для движения.
     Возможно такое свойство пространства позволяет молекулам постоянно находиться в тепловом движении и не заклинивать. Движение продолжается пока мы в трехмерном пространстве, вероятно только в такой геометрии оно и возможно наилучшим образом. Об этом мне рассказал однажды преподаватель теории вероятности. И я согласен с его выводом: мудрость творца впечатляет.

Рис. 3 Гексагональное разбиение (если кто не знает как оно выглядит)

     Вернемся к нашим баранам. Как вы могли заметить на рис. 2 прикасающиеся круги находятся в углах правильного шестиугольника который мы обсуждаем.  Шестиугольники хороши тем, что ими можно замостить плоскость, так же как квадратами и треугольниками. Ни 5тиугольниками ни 7миугольниками ни 8миугольниками плоскость не замостить - так уж устроена наша геометрия (Это не значит, что ими совсем ничего нельзя замостить. Например, додекаэдр - способ мощения сферы 5тиугольниками). Многие периодичные структуры в природе также имеют в основе правильный шестиугольник. Так, например, снежинки всегда имеют симметрию шестиугольника, т.е. 6 основных лучей. И вообще шестиугольник является лучшим выбором из возможных во многих смыслах, в данной статье я постараюсь обосновать свою точку зрения и заразить вас гексоманией. 

Проклятие "корень из двух"

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

Рис. 4 Соседние тайлы

     Если мы позволяем персонажу перемещаться в диагональные тайлы, тогда нужно понимать, что цена таких перемещений несколько больше чем при перемещении в смежные тайлы, а точнее больше в корень из двух раз. Корень из двух иррациональное число, и это постоянно портит жизнь, когда мы пытаемся написать алгоритм поиска пути. Даже если мы решим сделать шаг по диагонали равноценным шагу в смежный тайл, что бывает в некоторых играх, алгоритм поиска пути всё равно должен учитывать корень из двух, чтобы путь получался не только кратчайшим фактически, но и эстетически.
     В настольной игре вообще невозможно учесть корень из двух. Правильно ли оставлять диагональные шаги равными смежным? Нет, иначе персонаж бегущий по прямой и персонаж бегущий зигзагом пробегут дистанцию за равное время, что совсем не соответствует законам реального мира и нарушает эстетичность игры. Иными словами для настольной игры правильнее будет оставить только смежные шаги. Если оставить только смежные шаги в видео игре, это избавило бы нас от многих проблем. Однако отказ от диагональных шагов также лишает нашу игру доли эстетичности (я часто применяю слово эстетичность, и наверное в неправильном смысле, но надеюсь вы меня поймете).
     Чем же хорошо гексагональное разбиение? из рис. 4в видно что все соседние тайлы - есть смежные тайлы т.е. все шаги в соседние тайлы равноценны.

Диагональные шаги на гексогональном поле

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

Рис. 5 Тайлы: соседние - крестик, смежные - красный, диагональные - розовый.

     На рис. 5б можно видеть, что в случае гексагонального разбиения мы имеем помимо 6 смежных тайлов 6 диагональных. Эти диагональные гексагональные тайлы интересны тем что цена шага до них относится к цене в смежный тайл как 3/2, - а это очень хорошее число.  Если мы положим смежный шаг равный 2 то диагональный будет равен 3, так мы имеем 12 направлений вместо 6ти.

Протиснуться сквозь щель. Стена и дерево.

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


Рис. 6 Шаг сквозь щель стен

     Для квадратного разбиения это сложный вопрос, т.к. он опять же касается эстетики игры. Более того, даже если запретить шаг сквозь щель, сам факт наличие таких щелей на игровой карте уже нарушает эстетичность. В случае гексагонального разбиения же (рис. 6б) всё предельно ясно: такой шаг невозможен, и никаких проблем с эстетичностью.


Рис. 7 Шаг сквозь щель деревьев

     В дополнение к данной теме я предлагаю рассмотреть две категории непроходимых тайлов, которые я условно называю "стена" и "дерево". На рис. 6 мы рассмотрели тип стена, тип дерево это стена которая позволяет проход сквозь щель (Рис. 7). Это логично ведь дерево - блокирующий тайл и на него вставать нельзя, но между двух деревьев пройти можно. Другими словами мы запрещаем шаг изображенный на рис. 6б, но разрешаем шаг как на рис. 7. Такое различие на мой взгляд увеличит эстетичность игры.

Дверной проём

     Напоследок скажу немного о тактических особенностях которые я заметил играя в "Наёмники из Краслина". Представим ситуацию когда игрок управляет персонажем, за которым гонится толпа неприятелей. Игрок решает держать оборону в узком месте где его не смогли бы окружить. Оборонять проём можно двумя способами: Непосредственно встать в проём (Рис.8а,в) и встать сразу за проёмом (Рис. 8б,г).

Рис. 8 Оборона дверного проёма. Чёрные стрелки - возможные атаки врага, синие стрелки - возможные манёвры врага.

     Рассмотрим ситуацию на рис. 8а. Одного юнита атакуют сразу трое - т.е. значительный численный перевес на стороне атакующих. Можно запретить атаковать по диагонали, тогда и будет простая битва 1 на 1.
     В ситуации рис. 8б можно сражаться 1 на 1, однако у врага есть аж двойная возможность окружать. Игрок может полностью заблокировать проём тремя юнитами. Хотя конечно можно просто запретить обходить таким образом.
     В ситуации на рис. 8в. мы имеем битву 1 на 2.  
     В ситуации на рис. 8г. битва 1 на 1 и возможность для маневра. Можно заблокировать проход полностью будь у игрока 2 юнита.
     Итог: Квадратное разбиение дает просто битву в проёме 1 на 1.  Чем это плохо? Вы можете встать одним суперсильным юнитом в проходе и по одному вырубать юнитов оппонента (я говорю не о супергеройской РПГ, а о тактическом симуляторе). Если разрешить диагональные действия дверной проём становиться "слишком широким"  - т.е. это уже не узкое место, в котором можно оборонятся 1 юнитом. 
     Гексагональное разбиение предоставляет реальный тактический простор: Вы можете обороняться в проходе одним юнитом против двух, либо двумя против одного, либо одним против одного, но с риском быть окруженным. Разброс между плюсами и минусами не так велик как в квадратном разбиении. Почувствовали ли вы тактическое преимущество гексагонального разбиения так же как и я? 


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

Подсветка синтаксиса

Как я делаю подсветку синтаксиса в своём блоге?
Очень просто, я просто копирую код из VisualStudio и вставляю его в Word.
А потом копирую его из Word и вставляю в редактор блоггера.
Подсветка сохраняется, ура!

Как мне показалось не все браузеры одинаково хорошо ладят с таким подходом, на всякий случай уточню, что у меня браузер Google Chrome, Word 2010, Windows XP Sp3, Visual Studio 2010.

воскресенье, 4 сентября 2011 г.

Nano Stream (2009)


История

     При разработке игры наступает такой момент, когда игра почти готова, и уже можно играть. Главное не обмануться этой мыслью, ведь основная часть айсберга всегда скрыта под водой. Я пока не довёл ни одной игры до состояния истинной готовности, но есть три игры, которые я довёл до состояния видимой готовности.
     Первой моей недовершённой игрой был тетрис, который я написал почти на спор, на Blitz3D. Спор заключался в том, чтобы написать тетрис и уложиться в 20 строк по 80 символов (точно не помню сколько), написал я его за вечер, потому не включаю  в счёт серьёзных проектов.
      Второй недовершённой игрой был Tower Defense  Nano Stream”, которому и посвящена данная статья.
     Первого декабря 2009г на сайте blitzmax.ru стартовал конкурс игр на тему Tower Defense. Я не стал участвовать, т.к. в моём понимании было, что Tower Defense  - это нечто жестокое, когда куча пушек палит в живых существ, от которых во все стороны разлетается кровь. Я не мог представить не жестокий TD. Точнее мог, но он казался мне невообразимо скучным. Я писал: ”Пример по конвейеру едут ёлки и нужно успевать наряжать их игрушками. Или по проводу текут частицы и надо гасить их анти частицами. Даже если игроку этот сюжет покажется интересным, то мне как девелоперу неинтересно работать с этим. Я не люблю такую натянутость“.  В итоге развязалась дискуссия на тему, возможно ли создать интересный не жестокий TD, благодаря которой присоединился к конкурсу с проектом с глупым названием Nano Stream. Целью данного проекта было доказать всем и самому себе, что невозможно создать интересный не жестокий Tower Defense с глупым сеттингом. А сеттинг был такой: по прозрачной трубе двигаются цветные наночастицы (шарики), задача игрока строить турели которые бы нейтрализовывали наночастицы до того как частицы доберутся до другого конца трубы.
     Конкурс проходил во время зимней сессии, точно также как “Конкурс №1” на сайте GameDev.by в котором я участвовал год спустя с проектом Ice&Flora. Если вы будете организовывать конкурс, то советую не делать этого во время сессии.
     На GameDev.by до финиша дошло только трое из 25-ти участников. Стоит ли говорить, что на blitzmax.ru я единственный из конкурсантов, кто представил работу для подведения итогов. Впрочем, я так и не смог закончить этот проект потому, что случайно удалил исходники, когда форматировал диск. 


     Я считаю, проект удался на славу, и из него есть что подчерпнуть. Далее подробнее о тонкостях игры:

Движение шариков

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

Трёхмерность

     Честно, я никогда не видел трёхмерный Tower Defense. Особо не искал, но всё же. Не так-то просто придумать стратегию в 3D. Nano Stream - относится как раз к таким редким стратегиям, где действительно используются все три измерения, хоть и не очень эффективно.
     Трёхмерность заключается, конечно, не в графике, а в игровой механике: Труба изгибается во всех направлениях; турели имеют трёхмерную область действия, и даже слепые пятна сверху и снизу; За деньги у турели можно улучшить угол поворота по вертикали тем самым уменьшив слепые зоны; За деньги можно увеличить высоту турели тем самым немного сместив область действия; и наконец, турели можно строить не только на земле, но и на стенах и на потолках (цена строительства турели на стене на 10% выше, а на потолке на 50% выше).
     Создать именно трёхмерный TD было одним из моих челенджей на тот момент.
Шарики
     Всего в игре семь цветов шариков, они обладают разными свойствами: иммунитетами к отдельным видам турелей,  разная скорость, разное “здоровье”. Жёлтый шарик обладает особым свойством увеличивать скорость по мере того как остаётся мало здоровья.
     К тому же шарики бывают полупрозрачные (т.е. те же самые шарики могут быть обычными, а могут быть полупрозрачными). Полупрозрачные шарики называются невидимыми. Чтобы стрелять по ним нужно за деньги покупать для турелей специальную способность “Super Vision”.

Турели и абсорберы

     В игре 4 вида турелей и 4 вида абсорберов.
     Обычная турель – плазменная, поджигающая турель – термальная (подожжённые шарики постепенно нейтрализуются) , замораживающая турель – криогенная (замороженные шарики движутся медленнее), и лазерная - L.A.S.E.R. set.
     L.A.S.E.R. set – это огромная турель которая при стрельбе следит за шаром постоянно выжигая его лазерным лучом. Причём лазер разогревается медленно, т.е. чем дольше лазерный луч выжигает шарик, тем сильнее он его нейтрализует, когда лазерный луч погасает, турель быстро остывает. Угловая скорость турели медленная, поэтому он может терять быстрые цели, что плохо т.к. для полной отдачи лазер должен как можно дольше выжигать цель. Но за деньги можно улучшить угловую скорость, к тому же можно использовать лазерную турель совместно с замораживающей.

     Абсорберы (поглотители) – особый вид строений. – Это такие колодцы, которые вытягивают шарик из трубы и проглатывают (поглощают) его целиком, несмотря на то, сколько у него было “здоровья”. Абсорберы очень долго перезаряжаются и поглощают только шары определённого цвета. Собственно 4 вида абсорберов означают абсорберы 4х ключевых цветов: красный, тёмно синий, фиолетовый, жёлтый. Абсорберу можно купить способность Utilization, которая даёт один дополнительный нанобакс за каждый поглощённый шар.

Экономика

     Когда-то давно играл в игру Rise of Legends и подцепил оттуда одну интересную идею. Делать каждый следующий юнит данного вида дороже. Т.е.  каждая следующая термальная турель стоит дороже, поэтому как бы игрок не старался ему придётся строить и другие турели т.к. термальные станут слишком дорогими, если он начнёт строить криогенные то и с ними произойдёт тоже, ему придётся перейти на плазменные и т.д. Таким образом, у нас, разработчиков, меньше проблем с балансом.

Тактика

     Обычно в играх TowerDefense тактика заключается в грамотной расстановке турелей и грамотном их апгрейде. А по кому будет стрелять турель, от игрока не зависит. Я же реализовал возможность выбирать поведение для каждой турели.

     Выписка из руководства:

     Существует 4 основных критерия, по которым турель выбирает себе цель среди шаров.
     1) На первом месте соблюдается приоритет по цвету. При помощи специальных кнопок можно выставить приоритет по цвету для любой турели кроме поглотителей.
     2) Во вторых соблюдается приоритет по видимости. При помощи специальных кнопок можно установить какого типа видимости шары будут приоритетно выбираться в качестве цели. (Видимые, Без разницы, Невидимые)
     3) Третий критерий — это эффект. Огненная пушка накладывает на шары эффект поджигания, а ледяная эффект заморозки. Если на шаре уже есть эффект то на него нельзя подействовать эффектом другого типа(но можно подействовать эффектом того-же типа тем самым усилив эффект и/или добавив времени) Поэтому существует приоритет на эффект.
     Данная опция для ледяной пушка означает что пушка будет стараться заморозить как можно больше шаров. т.е. будет стараться не стрелять по уже замороженным шарам, подожжённым шарам (ведь их не заморозить) и синим шарам(у них иммунитет к заморозке). Однако эту опцию можно и отключить.
     Для огненной пушки данная опция означает что пушка будет стараться поджечь как можно больше т.е. она будет стараться не стрелять по уже подожжённым шарам, по замороженным шарам (ведь их не поджечь) а также по жёлтым шарам(иммунитет). Эту опцию можно отключить.
     Для Лазерной турели и бластера тоже есть специальная тактика на эффекты: Эта опция означает, что турель будет стараться не стрелять по подожжённым шарам и позволят им спокойно догорать. Для чего это нужно думайте сами.
     4) Четвёртый критерий — это положение. Этот критерий гласит, что при прочих равных условиях выбирается шар, идущий впереди других (впереди) Эту тактику настраивать нельзя (пока) она едина для всех.
     Все эти опции не запрещают стрельбу по тем или иным шарам, а лишь расставляют приоритеты.

Попробуйте сами

     Вы можете свободно скачать и сыграть в эту игру. Правда кроме прочих недостатков в игре имеется недостаток баланса. На уровне сложности 2 игра непроходима, а на уровне сложности 1 – слишком лёгкая. Я рекомендую вам зайти в настройки и заменить уровень сложности на 1. К тому же я рекомендую прочитать файл Help.pdf перед игрой.