Всем привет!
Этот пост будет предновогодним и потому мы обсудим самую мякотку.
Поздравляю всех с наступающим новым годом! Желаю чтобы все ваши цели достигались, чтобы вы приближали себя к счастью и чтобы чтобы удалили от несчастья! Празднуйте, веселитесь и пойте.
И танцуйте, танцуйте, танцуйте!
Сегодня обсудим ключевую фичу проекта - сноски Дэвида Фостера Уоллеса! Это автор с уникальным подходом к написанию - как понятно из названия, там что-то любопытное придумал Уоллес со сносками. Его открытие: Сноски могут быть самостоятельным сюжетным битом, ироничным и харизматичным замечанием, они могут быть большие и огромные - некоторые его сноски достигают размера целой главы и создают ощущение бесконечного текста*(это сноска, листайте в конец чтобы оценить задумку).
Идея изначально была не столько в сносках, сколько в том чтобы не отказываться от горизонтального диалогового окна - это уже существующая система которая обладает своим дизайном и имеет достоинства (СКРИН_1).
Хочется использовать также и вертикальное потому что оно самое удобное, так что размышления уходят в 2 диалоговых окна одновременно - это выглядит пантово и кажется должно иметь смысл. Тут я вспомнил про сноски и все стало на свои места - одно окно для основного текста, другое для сносок. Одна только проблема - горизонтальное окно не работает потому что нам приходится двигать глазами от одного края экрана до другого, поэтому пришлось его унифицировать и сделать вертикальным. Но камон - теперь, когда их 4 на весь экран - это выглядит круто и масштабно. (СКРИН_2)
Как сделал:
Сам текст поступает в игровую логику и работает следующим образом: У нас есть таблица с диалогами импортированная в UE5.
У каждой таблицы есть 2 важные характеристики - название и строка.
Логика подгружает таблицу по имени, загружает данные в диалоговое окно из указанной строки и мы получаем диалог. В определенный момент мы захотим сделать так чтобы появилась сноска. По идее в UE есть инструмент гиперссылок, однако в моей версии анрила он был недоступен - уже не помню почему, но мы с чатом(GEMINI) остановились на том, чтобы вместо гиперссылки написать свой алгоритм обработки текста.
Перед тем как текст попадает в диалоговое окно его обрабатывает парсер***. Парсер разрезает всю диалоговую строку на кусочки - делит предложение по пробелам, создает массив и потом собирает строку, выгружая ее в в диалоговое окно. Он режет строку для того чтобы найти html тег. Вот пример того как оно выглядит в диалоге(СКРИН_4):
Как твои <link table="Footnote_Test2" row="0x010000000000026A">Дела</link>? Эта реплика будет представлена как: "Как твои дела?"
Сам тег мог бы быть представлен как любой другой вариант, но я остановился на этом потому что показался мне удобным. Что делает парсер: сперва он режет строку, затем находит делиметр </link>, если он там есть - то это тег. Затем он разбирает сам тег на 3 части: он берет информацию о таблице (table), берет строку (row) и само слово которое нужно превратить в ссылку (слово между открытым и закрытым тегом). Само слово он аккуратно вырезает, убирая тег. Это одно конкретное слово добавляется как кнопка - с тем же стилем что и текст + подчеркивание для привлечения внимания. Сама кнопка при нажатии открывает еще одно диалоговое окно по имени таблицы которую парсер нашел в теге и начинается со строки которая также указана в теге.***
Короче: парсер находит тег и делает из него кнопку которая открывает следующий диалог.
И тут самая главная фишка - кнопка открывает не просто сноску, а новый диалог. Это значит что мы приходим к концепции не просто диалогового дерева, а что-то в духе диалогового сада****.
И так, вот мы сделали эти сноски - теперь мы можем открывать диалоги внутри диалогов, что круто само по себе, но теперь предстоит разобраться как это вообще будет работать - должны диалоги открываться налево или направо, как располагать UI и портреты. Если открывать их налево, то каждый раз нужно двигать глазами немного левее - перемещать взгляд на новое окно, а потом еще и закрывать каждое по отдельности. Другими словами - не удобно. Хорошим решением стало открывать его направо - тогда глаза остаются в одной точке и процесс становится гладким и понятным.
Помимо UI дизайна есть также проблемы агентивности - что если сноска ведет в чужой ум? Ты смотришь катсцену? Без выборов? А как на счет обычных списков или статей? А если навык это кластер персонажей? Почему у людей вообще есть способность видеть сноски? И другие пограничные нарративные состояния.
Благо я решил эти проблемы и возможно я обговорю их в другой раз. Каждую из них удалось обьяснить нарративом и парой трюков, но об этом потом.
Есть другие проблемы - например сколько этих окон можно открыть? Ответ - скока надо. Система динамическая и позволяет открывать и закрывать эти окна сколько угодно раз.
Или например зачем их вообще читать и открывать?*****
В ИТОГЕ:
По большому счету это проще показать чем обьяснять, поэтому смотрите (ВИДЕО_5)
У нас есть система которая связывает таблицы диалогов между собой создавая эффект погружения на более глубокие уровни сносок.
Это крутая система и моя киллер фича на которую я возлагаю много надежд, она довольно многообещающая и что самое главное - работает как задумано. Все открывается и не глючит, это круто. Но сильно зависит от написания******.
Какой урок можно из этого вынести:
Некоторые идеи выглядят круто только пока они в голове. Но в тестах оказывается что они не работают. Эти идеи не нужно выбрасывать, а можно доделывать пока не начнут работать.
Банально, но это правда.
В любом случае я очень рад что этот год подходит к концу, потому что в следующем году я смогу с новыми силами броситься к анрилу и продолжить работу! Всех с наступающим новым годом!
СНОСКИ:
*В сносках есть информация, которая не только меняет ощущения от прочитанного, но и добавляет точности - персонажи могли запомнить что-то по другому или ошибиться в выводах. Иногда сноски открывают их значительную и скрытую сторону. Интерес представляет тот факт, что в самих сносках может быть любой тип информации - от размышлений, до математических формул, списков выпущенных фильмов или электронных писем. Короче там прикольно.**
**И да, конечно же там есть сноски внутри сносок
***Надеюсь я понятно написал, но вот так выглядит сам парсер - каша которую было тяжело дебагать потому что нужна идеальная точность(СКРИН_3)
****2023-2026 Project Triumph, Все права защищены.
*****Расскажу в другой раз, но если коротко, то там есть кнопки на проверки знаний сносок - то есть как проверки навыков через кубик, только проверки на сноски.
******А еще вы могли заметить что вот так вот листать туда-обратно не совсем удобно. И в книжках уоллеса было также. Так что система с кнопками и автоматическими возвратами в нужное место должна улучшить опыт игрока
