#DnD 5

SellSwordArts создали своих персонажей для предстоящей D'n'D-кампании

41

В продолжение поста https://lispublica.ru/posts/etot-kollab-budet-legendarnym

Кампания по сбору средств превысила целевую сумму в 4 раза. Так что народ доказал, что хочет это увидеть, и подготовка к игре начинается. Пока запланированы три сезона, первый отснимут в январе 2026 и выпустят в марте

Рабочее название проекта: Min-Maxed

Имена для персонажей пока не выбирали - наверное, все участники будут играть под своими реальными или сценическими именами.

Основные 6 характеристик получены бросками 4d6, не учитывая самое маленькое выпавшее число. Будет ли далее задействован метод стандартного набора (когда игрок сам выбирает, какое число какой характеристике присвоить), или они сразу бросали по порядку, неизвестно. И соблюдался ли порядок во втором случае, или они расположили характеристики в другой последовательности - тоже неизвестно. Пока привожу их характеристики в обычной последовательности, ибо, судя по всему, это более вероятный вариант.

У Кларка и Дэвида проблемы с арифметикой, в паре моментов они насчитали неправильные числа. В таких случаях я записал то, что было озвучено, и в скобках добавил то, что видно на кубиках. Скорее всего, на монтаже или в комментариях к видео они это уже заметили и внесут правки в карточки персонажей.

Также имейте в виду, что они ещё не применяли модификаторы расы и прочие бафы/дебафы, поэтому финальный набор может отличаться.

Кларк

Раса: человек

Класс: воин

Подкласс: чемпион

Любимое оружие: длинный меч и баклер

Характеристики (числа в скобках - реально выпавшие числа там, где допущена ошибка):

Сила: 11
Ловкость: 14
Телосложение: 9
Интеллект: 8 (10)
Мудрость: 18
Харизма: 16 (15)

Дэвид

Раса: полугоблин

Класс: плут

Подкласс: дуэлянт

Любимое оружие: рапира

Сила: 14
Ловкость: 12
Телосложение: 12
Интеллект: 11
Мудрость: 14
Харизма: 16 (14)

Меган

Раса: не упомянута

Класс: колдун:

Договор: договор гримуара

Сила: 14
Ловкость: 12
Телосложение: 14
Интеллект: 14
Мудрость: 14
Харизма: 14

По другим членам пати инфы пока нет.

Dangeon Warder Panel

Вступительная часть

53

Всем доброго здравия, дорогие друзья!

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

И так, начнём с самых азов. На чём всё это безобразие будет работать?
На Unity. Почему? Да потому что на ней достаточно дёшево реализуется общение с ГПУ, а оно нам тут понадобится.

Полностью рассказывать о том, как и что я сделал смысла не вижу, но буду делиться какими интересными выкладками и, возможно, кусками кода, если они кому-то нужны.

Что мы сейчас имеем:
1. Система приключений
2. Внутри каждого приключения есть система игровых сессий
3. Внутри сессий и приключений есть возможность редактирования базы НИП, заданий, предметов и локаций

Кстати, UI в окне приключения реализован, как мне кажется, достаточно элегантно: он строится динамически, и в него легко буквально одной строчкой можно добавить новые разделы, которые сразу же отрисуются и кнопочкой и панелькой.

Для этого у меня создан класс SectionsManager, который висит в памяти приложения как Singleton. Он хранит в себе информацию о том, какие разделы мы будем использовать. Добавлять их туда можно через конфиги или через код, это уже вопрос того, кому как удобно.
А потом есть код, отвечающий чисто за UI и он ждёт от этого менеджера команду, когда тот всю необходимую информацию соберёт и скажет, что вот сейчас уже можно рисовать

private void Awake()
{
    SectionsManager.GetInstance().IsReadyToRender += Render;
}

private void Render()
{
    Sequence seq = DOTween.Sequence();
    foreach (IMenuSection section in SectionsManager.GetInstance().Sections) {
        SectionButton button = Instantiate(sectionButtonPrefab, transform);

        RectTransform rt = button.GetComponent<RectTransform>();
        CanvasGroup cg   = button.GetComponent<CanvasGroup>();
        
        cg.alpha = 0f;
        button.transform.localScale = Vector3.zero;

        button.Init(section.GetName(), () => { section.Show(transform.parent); });

        seq.AppendCallback(() =>
        {
            cg.DOFade(1f, 0.3f).SetEase(Ease.OutQuad);
            button.transform.DOScale(1f, 0.4f).SetEase(Ease.OutBack);
        });

        seq.AppendInterval(0.1f);
    }
}

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

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

Посему жду комментариев, вопросов, критики, чего угодно.

Всем хороших игр!