-
Notifications
You must be signed in to change notification settings - Fork 18
Система характера
Система характеров изнутри на самом деле очень простая, но внутри неё можно столько всего делать, что потеряться в этом очень сложно. Да и подход не совсем привычный. Давайте попробуем разобраться, как она работает.
Каждая фраза персонажа помимо самого текста фразы содержит определённые поля, которые определяют, когда эта фраза может использоваться, а когда - нет. Система анализирует своё состояние и сопоставляет его с необходимыми полями у фразы.
Характер состоит из двух компонент: вектор (набор чисел) и контроллер. Давайте по порядку.
С самого начала изнутри настроек вы задаёте 8 чисел. Это - вектор характера. Каждое из этих 8-ми чисел означает определённые черты характера. Подробнее об их значении вы можете прочитать здесь, а пока мы просто перечислим их:
- Эмпатия - Empathy
- Импульсивность - Impulsivity
- Самооценка - Selfconfidence
- Энергия - Energy
- Настрой - Attitude
- Опыт - Experience
- Воспитание - Manner
- Отношение - Relation
Каждая из этих шкал длиной в 9 делений: от -4 до 4.
Как видите, всё очень просто: вам нужно указать 8 чисел и характер вашего персонажа сразу изменится.
По умолчанию, в настройках задаётся 8 чисел, но каждая шкала изнутри состоит не из одного числа, а из пяти. Если по порядку, то это само значение шкалы, нижняя граница, верхняя граница, дальше которых значение шкалы не сдвинется ни при каких условиях, а также скорость изменения шкалы в нижнюю и верхнюю сторону. По порядку это: скорость вниз, нижняя граница, значение, верхняя граница, скорость вверх. Эти числа вы можете задать через пресет, примеры ниже.
Подробнее о векторе характера читайте в статье "Описание диапазонов".
Вектор значений характера, который вы указываете, не обязательно будет использован напрямую. По умолчанию, сверху на него накладываются эмоции, если они активны. Архитектура DeskChan позволяет устанавливать свои контроллёры характера, которые, основываясь на векторе характера, смогут выдавать какое-то новое поведение. Но пока что это всё в разработке.
Помимо характера у персонажа есть эмоции. Эмоция составляет из себя два поля: номер активированной эмоции и число от 0 до 3 включительно, которое показывает её текущую выраженность. Отсюда кстати следует, что в одно и то же время активирована может быть всего одна эмоция.
Сама эмоция - это ещё один вектор характера, который прибавляется к вектору характера, полученном на прошлом шаге. Таким образом сам характер от эмоций не претерпевает никаких эмоций, но в то же самое время персонаж с активированной эмоцией временно начинает вести себя как персонаж с другим характером.
Ниже приведён список эмоций. Их шесть. В скобках указаны, на какие шкалы характера и в какую сторону воздействуют эмоции.
- happiness - радость ( +эмпатия, +импульсивность, +энергия, +настрой, +отношение )
- sorrow - печаль ( -самооценка, -энергия, -настрой )
- fun - веселье ( +импульсивность, +энергия, +настрой )
- anger - раздражение ( -эмпатия, +импульсивность, +самооценка, +энергия, -настрой, -отношение )
- confusion - смущение ( -импульсивность, -самооценка, -опыт )
- affection - нежность ( +импульсивность, +самооценка, +отношение )
Возьмём пример: предположим, что на первом шаге мы получили такой характер:
{ 2 , 3 , 3 , 2 , 3 , 1 , 0 , 0 }
Это - достаточно наглый и оптимистичный персонаж, который нейтрально относится к пользователю. Предположим теперь, что в данный момент активировалась эмоция "печаль". Причём, сильно, на 2 балла. Вектор, являющийся давлением эмоций на характер, составит
{ 0 , 0 , -2 , -4 , -4 , 0 , 0 , 0 }
В сумме это будет
{ 2 , 3 , 3 , 2 , 3 , 1 , 0 , 0 } + { 0 , 0 , -2 , -4 , -4 , 0 , 0 , 0 } = { 2 , 3 , 1 , -2 , -1 , 1 , 0 , 0 }
Как видно, это всё ещё наглая персона, но она уже не так весела, как обычно, да и активность у неё сильно поубавилась. Всё остальное, в принципе, не изменилось.
Вся указанная здесь информация определяется по умолчанию. Вы можете указать в пресете свой список эмоций или переопределить нынешние.
К сожалению, через восемь шкал характера невозможно достаточно рассортировать все фразы, которые персонаж может говорить. У каждого персонажа есть свои определённые особенности, которые от характера никак не зависят. Эти особенности можно прописывать непосредственно в пресете. На самом деле, прописывать в пресете можно всё, что угодно, но не всё будет использовано. Так это и с тегами.
В пресете есть подуровень tags. Он же есть и в настройках. Там вы можете прописывать особенности персонажа. На данный момент персонаж реагирует на следующие особенности:
Все фразы, не соответствующие тега отбора фраз, не будут использованы для выдачи.
Название тега | Перевод | Возможные значения |
---|---|---|
gender | пол | boy girl |
userGender | пол | boy girl |
species | особь | human god neko angel ai android undead |
interests | интересы | anime vn games it memes politics irl food singing |
breastSize | размер груди | big middle small no |
Если тег и значение не указаны, то фразы, которые хоть как-то позволяют сделать вывод о категории персонажа, не показываются вообще. Так, если вы не укажите пол, то вам не выдадут ни одной фразы, из которой вы могли бы однозначно судить о поле персонажа.
Теги этого типа вы можете записывать во фразах и внутри пресета. Далее во всех подобранных фразах программа заменит все встречающиеся теги на их значения.
Название тега внутри пресета |
Пояснение |
---|---|
name | имя |
usernames | имя юзера |
abuses | оскорбление юзера |
После того, как мы выбрали список подходящих для персонажа фраз, нам нужно выбрать одну конкретную, которую мы используем сейчас. Выбор происходит случайным образом из фраз, которые не использовались в ближайшее время, если это возможно. Теперь расскажем, насколько может быть вариативен и настраиваем этот процесс.
Как бы не была прекрасна вышеописанная система, всего учесть невозможно. У каждого из нас своё воспитание, свой культурный пласт. И оттуда же идёт сленг, фразеологизмы и другие особенности построения речи. Оттуда же идут особенности биографии вашего персонажа, которые в стандартной поставке никак описаны не будут. Оттуда же идут специфичные особенности отношений между юзером и персонажем.
Что с этим делать? Писать отдельные фразы для каждого персонажа! Но вам не нужно прописывать всё с нуля, стандартный пакет специально разрабатывается так, чтобы быть универсальным для всех персонажей. Создайте файл, пропишите несколько частых узнаваемых фраз вашего персонажа, добавьте его в использование. Это вполне возможно и даже легко сделать через настройки программы.
Как уже было сказано, программа выбирает следующую фразу случайным образом из списка подходящих фраз. Однако самое прекрасное, что в этот процесс тоже можно вмешаться извне! С помощью плагинов вы можете исключать фразы из этого списка, оставляя только те, что вам нужны. Подробнее об этом в документации по расширению системы характеров.
После того, как программа выбрала следующую фразу, вы через плагины можете её изменить перед отправкой. Как - это уже ваше дело, однако помните, что синхронизировать работу плагинов в этой задаче адекватно почти невозможно, поэтому ориентируйтесь на один или два таких плагина.
Пресет записывается в формате XML на диске, в кодировке UTF-8. Редактировать его очень просто. Его структура выглядит так:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> - это для указания кодировки
<preset>
<name> Деск-чан </name> - имя
<character> - вектор характера
<attitude value="1"/> - значения можно указывать так
<selfconfidence left="-2" leftspeed="1" right="4" rightspeed="2" value="0"/> - или так
<activity> -5;2;2 </activity> - или так
<optimism> 5 </optimism> - или так
- а можно не указывать вообще
</character>
<tags> - здесь перечисляются все теги. кстати, обратите внимания
на возможные способы их задания
<usernames> "Юзер" "Юзверь" </usernames> - имена, по которым
персонаж будет звать пользователя
<abuses> Дурачок </abuses> - оскорбления, по которым
персонаж будет называть пользователя
<gender> boy </gender> - пол. один из тех тегов, где
лучше указать только одно значение
<interests> anime vn </interests> - интересы. тут можно перечислять
</tags>
<quotes> main tsundere_pack </quotes> - используемые пакеты фраз
<emotions>
<happiness chance="0.2"> - переопределяем эмоцию "счастье"
<impulsivity force="2"/>
<empathy force="1"/>
</happiness>
<sorrow chance="0.4"> - переопределяем эмоцию "грусть"
<impulsivity force="2"/>
<empathy force="1"/>
</sorrow>
больше никаких эмоций не указано, поэтому все остальные вообще не будут использоваться
счастье будет использовано с вероятностью 0.2, грусть - 0.4
</emotions>
</preset>
Подробный гайд по написанию плагина
Основное
- Сборка и запуск
- Как пользоваться
- Принципы взаимодействия плагинов
- События и команды
- Обработка речи
- Создание отдельных модулей
- Сценарии
- Информация о поддержке языков программирования
API
- Интерфейс взаимодействия с ядром
- API плагинов
- Элементы управления
- Остальные плагины
- Внешние плагины | DeskChan как сервер
Характер
А как...