Способность принадлежит одному персонажу? Пусть сама карта скажет, кому - через связь, которая не ломается

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

Этот туториал — часть серии Начало работы — День 3, Неделя 2.

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

Вчера категории получили свои шаблоны: базы для Врага, Персонажа и — новый элемент — Игровой карты, а первые карты появились как экземпляры.

Сегодня утренняя страшилка: Дмитрий, которого вы создали вчера, — это имя, которое вам уже хочется поменять. Он меняет роль, поэтому вы переименовываете его. Легко - одно изменение в дереве проекта.

Но что, если его имя набрано вручную в дюжине мест? В описании его фирменной способности, в заметках о том, кому достаётся эта карта, в черновике списка колоды. Ни одно из этих мест не обновится при переименовании, потому что каждое хранит имя как статичную строку. Одна маленькая правка — и у вас устаревший документ и рассогласованная колода; чем больше проект, тем больше устаревших следов оставляет одно переименование.

Решение не в лучшей памяти. Оно в том же приёме, что и для структуры: перестать хранить имена и хранить ссылки.

Карты бывают двух видов: предмет и способность

Прежде чем говорить о ссылке, важный факт дизайна. Ваши игровые карты неодинаковы:

  • Карта-предмет - может использовать любой персонаж. Огнетушитель, Банановая кожура - разыгрываются, кем бы их ни держали.
  • Карта-способность - принадлежит одному конкретному персонажу. Только Дмитрий применяет свою фирменную способность, значит, эта карта его.

Это «принадлежит» — отношение между двумя элементами. Сегодня мы сделаем его полноценной частью дизайна — и сделаем это на самой карте.

Многоуровневое наследование: Игровая карта → Карта способности

Вчера базовый объект Игровая карта определил, что есть у каждой карты: Имя, Стоимость, Урон, Легендарная. Два вида карт — одно и то же с единственным отличием: у карт способностей есть владелец, у предметов его нет.

Это отлично ложится на базовые объекты — ведь базовый объект может сам строиться на другом базовом объекте. Отметьте новый базовый объект как экземпляр Игровой карты — и он наследует всю схему карты. Затем мы лишь добавляем одно поле — Владелец — к уже существующим полям шаблона:

  • Имя - Строка (унаследовано)
  • Стоимость - Целое число (унаследовано)
  • Урон - Число (унаследовано)
  • Легендарная - Флажок (унаследовано)
  • Владелец - единственное поле, которое мы добавляем

Назовите этот базовый объект Карта способности. Теперь цепочка читается так: Игровой объект → Игровая карта → Карта способности — каждый уровень наследует всё, что выше, и добавляет своё. Предметы — экземпляры Игровой карты; способности — экземпляры Карты способности.

Владелец - это ссылка, и указывает она только на персонажей

Поле Владелец — сердце истории. Задайте его тип Выбор элемента — поле станет живой ссылкой на другой элемент, а не текстовым значением. И вот приятная деталь: выбор элемента можно ограничить в его настройках. Укажите в параметре поля ваш базовый объект Персонаж, и выборщик будет предлагать только персонажей. Не получится сослаться на стену или монету — сам тип поля указывает, кому карта может принадлежать.

Настройки поля Владелец на базовом объекте Карта способности: тип Выбор элемента и параметр, указывающий на базовый объект Персонаж

Каждая карта способности, порождённая этой базой, теперь несёт две вещи: полностью унаследованную схему карты и Владельца, которым может быть только персонаж.

Ссылка живёт один раз, на карте

Здесь дизайн перестаёт дублировать. Фирменная способность Дмитрия — Дымовая завеса — экземпляр Карты способности. Откройте её и задайте поле Владелец = Дмитрий. Всё: одна ссылка, хранящаяся ровно там, где ей место, — на карте, которая принадлежит ему.

У связи чёткое направление: карта → персонаж. Второе поле для поддержания на персонаже не нужно, никакой список «какие у неё способности» не требуется держать в синхронности. Персонажу не обязательно знать о карте — карта знает о персонаже.

Карты-предметы, в том же повороте, — экземпляры Игровой карты как есть: они вообще не наследуют поле Владелец, ведь его добавляет только Карта способности. Отсутствие владельца означает «может использовать любой». Разница между двумя видами карт становится данными, а не договорённостью из документа.

Переименование безопасно: ссылка следует за элементом

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

Что дальше: структуры и перечисления

Связи соединяют элементы, и отношение «карта — персонаж» стало настоящими данными. Но значения внутри элементов — всё ещё обычный текст, и «Защитник», где-то набранный как «защитник», будет молча противоречить себе. Завтра: структуры и перечисления — переиспользуемые формы для данных вроде пары «карта + шанс» на враге и фиксированный словарь для Роли персонажа.

Готовы? Стандартизируйте типы врагов структурами и перечислениями - следующий пост в этой серии.


FAQ

Что такое ссылка на элемент в игровом дизайне?

Ссылка на элемент - это связь от одного элемента к другому, которая указывает на постоянный ID, а не на имя. Когда объект переименовывается или редактируется, каждая ссылка на него обновляется автоматически, и документ остаётся согласованным без ручных правок.

Как связать персонажа с его картами способностей в IMS Creators?

Связь создаётся один раз, на карте. Карта способности несёт поле Владелец типа Выбор элемента, ограниченное базовым объектом Персонаж. Задайте Владельцу персонажа — и связь существует; второе поле на стороне персонажа поддерживать не нужно.

Что такое многоуровневое наследование?

Базовый объект, построенный на другом базовом объекте. Потомок наследует всю схему полей родителя и добавляет свои собственные. Цепочка Игровой объект → Игровая карта → Карта способности означает, что карты способностей наследуют Имя, Стоимость, Урон и Легендарную из схемы карты, а затем добавляют Владельца.

Почему ссылка живёт на карте, а не на персонаже?

Потому что способность принадлежит ровно одному персонажу — отношение естественно читается от того, чем владеют. Храня ссылку один раз на карте, вы избавляетесь от скопированных имён, которые ломаются при переименовании, а пустой Владелец — чистый способ сказать «предмет — может использовать любой». Чтобы прочитать связи в обратную сторону — какие карты способностей принадлежат персонажу, — используйте Показать связи и смотрите на обратные ссылки; мы разберём это в одном из следующих постов.

Как сделать, чтобы выбор элемента показывал только персонажей?

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

Сломает ли переименование элемента мои связи?

Нет. Ссылки хранят ID элемента, а не имя, поэтому переименование автоматически обновляет все места, где на элемент ссылаются. Отображаемые заголовки подставляются сразу же.

Поделиться:
Назад к блогу