Текущая работа: TAnimatedInterface и процедурная генерация карт

С программной части сейчас передо мной стоит две важных задачи:

1. Создание удобной системы для интерфейса, который мог бы эффективно анимироваться в программе. Это будет решаться через объект TAnimatedInterface, который будет содержать все возможные кнопки, текст и менюшки на экране, ловить события onclick и т.п. Важным отличием от остальных методов реализации интерфейса будет А) Ориентированность на андроид и Б) один подход к анимации всех элементов интерфейса.

Пока интерфейс состоит из двух слоёв – подложка, которая не ловит клики и активная часть – кнопки, элементы меню, которая ловит клики.

TAnimatedInterface должен быть достаточно универсальным, чтобы подойти и к Decoherence и к Project Helena. Думаю, стоит начать с простого проекта “Metar Sweeper” (крутой аналог сапёра) – это будет мини-игра для вскрытия метар-замков в Decoherence.

2. Пока не особо успешно продвигаюсь по программной генерации карт. Хотелось сделать совсем абстрактные карты (пещеры), однако получилось это из рук вон плохо. Сейчас есть несколько мыслей на тему, как доработать генерацию пещер чтобы она была универсальна и эффектина, однако из-за большого объёма работ (пока у меня всё ещё проблемы с заполнением стены пещеры плоскостями без промежутков) этот пункт я отложу “на потом”.

Более перспективный и простой – сеточные карты. Генератор равномерной сетки 1:1 уже есть и работает, но выглядит просто убого 🙂 21й век на дворе, не годится так низко опускаться 🙂 Я понимаю, что Might and Magic 10 использовали такую карту, но всё-таки это тупиковое направление.

Сейчас пытаюсь поднять на абстрактном уровне математику 1:N сеток. В идеале, конечно же, речь должна идти об сетке M:N, но это частный случай 1:N сетки, и при лучшем результате требует большего объёма “условий и математики”. По этому, возможно, 1:N просто благодаря набору элементов станет M:N, а остальное – мелочи жизни.

Естественно, стоит сказать, что сетка 1:N не обязательно должна быть перпендикулярной, однако тогда особо остро становится вопрос совместимости с сеткой M:N.

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

Зачем процедурная генерация?

Основных причины четыре:

1. Я не левел-дизайнер и левел-дизайнера в ближайшее время в проекте не предвидится. Т.е. качество уровней сделанных “вручную” будет не намного выше созданных процедурно. Объём же работ – приблизительно сопоставим.

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

3. Процедурные карты добавляют разнообразия в игру. Т.е. каждая игра будет оригинальной и новой.

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

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

Advertisements
Текущая работа: TAnimatedInterface и процедурная генерация карт

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s