Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

Всем привет! Сегодня я хотел бы поделиться с вами некоторыми практическими аспектами разработки моей настольной игры “Письма призрака” (в этом месяце будет выпущена издательством Экономикус). Мы старались подходить к процессу разработки максимально системно, так что наш опыт может оказаться для кого-то интересным.

Поставленные задачи

Основная механика “Писем призрака” строится на ассоциациях между картами с изображениями различных предметов (картами улик). И на одном из ранних этапов разработки мы задались вопросом: “А можно ли просчитать и выстроить баланс в игре на ассоциации?”. Собственно, почему бы не попробовать.

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

Задача балансировки ассоциаций состояла примерно в следующем:

  • Минимизировать количество сильных “однозначных” ассоциаций. Каждая карта в идеале должна примерно с равной силой ассоциироваться с несколькими другими.
  • Избежать “обособленных групп ассоциаций”. Не должно быть групп карт, которые ассоциируются только друг с другом и не ассоциируются ни с какими другими картами.
  • Добиться максимальной равномерности и хаотичности распределения ассоциаций по всему множеству карт.

Для задач, в которых нужно отслеживать связи между многочисленными сущностями, лучше всего подходит визуализация в виде “графа” (не путать с титулом). Граф – абстрактный математический объект, представляющий собой множество вершин и набор рёбер, то есть соединений между парами вершин (спасибо, Википедия).

Например, вот такими графами мучают школьников на ЕГЭ по информатике:

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

Графовые алгоритмы, в частности, необходимы для моделирования транспортных и коммуникационных систем. Любой GPS-навигатор для построения маршрутов опирается именно на представление дорожной сети в виде графа, в котором рёбра между вершинами – это дороги.

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

Инструменты

Google Docs

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

В последнее время я полностью перешёл на браузерные онлайн-сервисы Google для работы с текстовыми документами и таблицами, чему несказанно рад. Основные преимущества по сравнению с десктопным офисным софтом и синхронизацией офлайн-документов через облако:

  • Автоматизация с помощью Google App Script. При наличии минимальных навыков программирования на JS даёт практически безграничные возможности для анализа и формирования данных, а также интеграции с другими онлайн-сервисами.
  • Коллективное редактирование документов в реальном времени, режим внесения и одобрения правок. Особенно актуально на этапе финальной доработки и вычитки правил игры, если над проектом работает больше одного человека.
  • Мгновенное сохранение изменений, история версий. Нет риска потерять часть работы из-за вылета программы и других непредвиденных обстоятельств. В любой момент можно просмотреть предыдущие версии документа и откатиться до одной из них.

Gephi

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

Довольно мощная бесплатная программа для построения и обработки графов. Для базового ознакомления рекомендую эту статью.

Позволяет строить даже вот такие масштабные штуки:

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

Подготовка данных

Для построения графа надо подготовить информацию обо всех вершинах и связях между ними. Для этого мы использовали таблицу в Google Sheets, где каждая строка и колонка соответствуют конкретным картам, а на их пересечении указывается сила ассоциации между ними.

Мы условно разделили ассоциации на 4 уровня по силе:

0 – полное отсутствие ассоциаций
1 – слабая ассоциация либо сходство по форме, цвету или материалу
2 – достаточно крепкая ассоциация
3 – однозначная ассоциация

Естественно, ассоциации – явление достаточно субъективное, но мы постарались учесть самые очевидные и часто возникающие.

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

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

Фрагмент получившейся таблицы:

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

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

С загрузкой картинок в таблицу тоже пришлось повозиться. Загружать 150 картинок по одной совсем не хотелось, а закинуть сразу все функционал Google Sheets пока не позволяет (сама возможность вставлять картинки в ячейки таблицы появилась сравнительно недавно). Я написал отдельный скрипт для загрузки всех изображений из папки на гугл-диске, через Google App Script довольно удобно работать с другими их сервисами.

Но тут выяснилось, что разработчики из гугла не сумели полноценно подружить Google Sheets и Google Drive, из-за чего примерно 10% всех изображений просто не отображались. Пошарив по форумам, я выяснил, что далеко не первый столкнулся с этой проблемой, и этот баг пока не исправлен. Пришлось дополнительно разбираться с API Dropbox, чтобы сделать загрузку изображений уже оттуда. Поскольку Dropbox не является частью гугловской экосистемы, это потребовало гораздо больше манипуляций, зато в итоге всё заработало безотказно.

Получившаяся таблица ассоциаций была преобразована в специальный вид для загрузки в Gephi (опять таки с помощью скриптов) и экспортирована в формате CSV.

Построение графа

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

Нагляднее всего получается, если настроить отображение так, чтобы толщина ребра соответствовала силе связи между вершинами. Сразу стало заметно, что связи с силой “1” визуально перегружают граф, так как их слишком много. Поэтому я решил отображать только связи со значениями “2” и “3”. Размер вершины соответствует количеству ведущих от неё связей.

Тем не менее, рёбер всё ещё очень много, и нужно использовать дополнительные настройки визуализации, чтобы можно было извлечь что-то полезное из полученного графа. В данном случае отлично подходит раскраска вершин по “кластерам”, то есть группам наиболее тесно связанных между собой вершин. Для этого используется функция “Модулярность” в разделе “Статистики” программы Gephi. Вот что получилось на одном из этапов разработки, когда в колоду были добавлены около 100 улик:

Арсенал геймдизайнера: выстраиваем баланс в игре на ассоциации

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

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

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

До 15 декабря вы можете поучаствовать в предзаказе, чтобы получить игру первыми и по ещё более низкой цене. Ожидаемые сроки готовности тиража: 22 декабря (средние сроки доставки почтой/СДЭК по РФ: 3-4 дня).

1919
2 комментария

Интересно, успешных продаж! 

Ответить

Спасибо!)

Ответить