Комбикорм-2. Редактор карт

Речь идёт о парсерной игре «Комбикорм-2», которая использовалась в конкурсе игроков интерактивной литературы.

Начнём с небольшой статистики:
Уровней: 10
Количество локаций: 167
Количество монстров: 270
Участников разработки: 2
Длительность разработки: 5 месяцев в свободное время (активно занимались картами месяца 3)

Чтобы достичь таких результатов, пришлось сделать редактор карт, в котором может работать я и напарник, создавая карту и выставляя монстров. Итак, “платформой” стал самый обычный Excel. Точнее не Excel, а google spreadsheets для работы в облаке и синхронизации изменений.

Частично выбор инструмента повлиял на способ навигации по карте (2D-поле с соединёнными соседними клетками). Вот верхняя часть первого уровня, где находиться описание карты:


Структура универсальная для различных карт. Клетка A1 — номер уровня (сейчас закрыта изображением компаса). Клетки, начиная с B2 описывают комнаты. Пустая ячейка А5 обозначает конец карты, для визуального разделения добавил еще текстовый маркер на А8. В каждой ячейке карты содержится три элемента — заголовок, который игрок видит всегда при посещении, тип клетки и текст декораций. Для наглядности, я еще подкрасил разные типы клеток подходящими цветами. К примеру, после генерации локации A1(клетка B2), получается такой код:


room11Level1 :Cell
    levelId=1
    coord='А1'
    groundType=GROUND_TYPE_NORMAL
    lit_name='Старая площадка'
    lit_desc='Небольшая асфальтированная площадка с зелёными стебельками, выглядывающими из многочисленных трещин. По краям стоят небольшие сосны, среди которых тропинка уходит на юг. Восточнее - крутая гора.'
    startZond = true
;

Теперь нижняя часть файла уровня:


После карты идёт секция объектов, в которой описываются монстры и ящики. Как видно по ячейкам используются флаги для лексического генератора, чтобы в игре обращения к объектам парсер обрабатывал корректно. Следующие ячейки после описания служат для инициализации свойств объекта. Таким образом, не влезая в код мы уже можем создавать карту местности со стандартными объектами и быками. Последняя секция — диалоги. Она не очень удачно сидит в Excel-файле, так как плохо подсвечиваются ошибки и иногда не комфортно редактировать текст. Из блока диалогов получаются функции, которые при вызове по ссылке отобразят текст на экране.

Плюсы применения

  • Разделение контента от программирования логики. Основная часть делается в редакторе, затем создаётся файлик с конечным автоматом, который управляет ходом игры на уровне.
  • Удобная вычитка. Комбикорм-2 помогла вычитать Enola, а в принципе такую игру, можно дать любому редактору.
  • Разделение труда. Больше половины уровней делал другой разработчик в редакторе, пока не готова еще логика и поведение.
  • Визуальная наглядность карты. В виде 2D-поля карта намного удобнее читается чем просто код. Специализированные редакторы карт для текстовых игр позволяют рисовать карту, но не генерируют готовый код с требуемыми атрибутами. Не стал в игру встраивать изображения карт по одной простой причине — играют незрячие вместе со зрячими, будет нечестно, а так все в равных условиях, тем более разведка у меня элемент геймплея.

Хотя, это всё очень специализированно, не получиться применить “из коробки”, почти всё надо переписывать. Всем спасибо.

Ссылки

Первые карты, входящие в обучение: docs.google.com/spreadsheets/d/1XwwGbs92DJfCCakMDkhwPkwbYx9-l_-DFbgZllIVzJ4/edit?usp=sharing
Скрипт для генерации: pastebin.com/KC4NJJ3p

4 комментария

johnbrown
Очень здорово! Может стоит добавить в пост ссылку на таблицу / скрипт?
alastochkin
Добавил ссылки в конец поста, можно смотреть
johnbrown
Еще вопрос: где задается стартовая локация?
alastochkin
Стартовая локация как таковая не задаётся, указывается, где находятся персонажи (в первой строке описания клетки). На скриншоте видно, что зонд будет стартовать в клетке А1. Если имя персонажа не указанно ни в одной клетке, то он не участвует в миссии. А, ну еще предполагается что зонд есть на всех уровнях и движок в начале всегда переключается на него.
Комментарий отредактирован: 18 июля 2018, 15:28 (2 раза)