Компания — не пати#

В первой версии разговорных компаний Satisfy один человек мог выйти из трактира и унести с собой чужую беседу.

Он не был лидером. Его никто не выбирал. Симуляция просто использовала его как крючок, на который повесила группу. Это отлично работало ровно до того момента, когда он проходил в дверь.

Механика компаний решила одну задачу: в переполненной комнате люди больше не вещали каждый слух всем подряд. Но сама компания оставалась невидимым учётным объектом. В версии 0.6 она становится тем, что способна объяснить сама комната.

Случайный председатель#

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

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

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

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

Пусть решает мебель#

В v0.6 в трактире «Три щуки» есть стойка и два стола. Это устойчивые элементы комнаты, а не декоративные слова. Персонаж может сесть за стол, сесть у стойки, подсесть к кому-то или присоединиться к стоящему.

После этого симуляция не хранит постоянную «компанию». Она выводит её из того, где люди находятся на самом деле.

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

Уход работает так же. Человек покидает только своё место или стоячую группу. Если уходит тот, кого система использовала как внутренний якорь такой группы, оставшиеся участники привязываются к другому по детерминированному правилу. Если остаётся один, сохранять уже нечего: человек возвращается в общий зал.

Иначе говоря, компания не создаётся и не распускается администрацией. Она появляется, когда её поддерживает геометрия разговора.

Компания — не пати#

Слово «группа» опасно в MMO: за ним тянется двадцать лет багажа.

У пати обычно есть явный список участников. Может быть лидер, приглашения, общие цели, правила добычи, боевые бонусы и жизнь, которая продолжается, даже когда участники расходятся по разным комнатам. Членство сообщает что-то долговечное об отношениях между людьми.

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

У неё нет лидера, списка приглашённых или постоянной записи. Она не подразумевает дружбу, доверие, верность, общие задания или даже согласие оставаться вместе. Она не даёт боевого бонуса и ни за кем не следует через дверь. Пересядьте за другой стол — и граница разговора изменится, потому что изменился физический факт.

Это узкое определение полезно. Один и тот же механизм работает для игроков и NPC, и ему не нужна отдельная социальная система поверх мира. Положение создаёт аудиторию; обычный поток действий фиксирует изменение; речь использует ту аудиторию, которая существует в этот момент.

Что видит игрок#

Когда группировка физическая, команда осмотреться может описать её без невидимых идентификаторов:

Мара и Петя сидят у стойки, Силантий стоит за стойкой; Агафья Громова и старый Кузьма сидят за столом; заезжий газетчик стоит здесь.

Стоячие группы столь же наглядны:

Вы и племянница торговки рыбой стоите вместе; Мара и Петя стоят вместе.

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

То же состояние определяет речь. Слова из другой компании могут начинаться с «Из-за стола…» или растворяться в общем гуле, а речь за вашим столом не требует пояснений. Внимание становится тем, что игрок выражает движением, присоединением или подслушиванием, а не выбором канала в меню.

Что пока не автоматизировано#

Слово «автоматически» требует ограждения. v0.6 автоматически определяет состав компании, сохраняет стоячую группу при уходе одного участника и передаёт полученную аудиторию механике разговора. Но версия ещё не даёт NPC содержательных причин выбирать конкретный стол. Сейчас их рассаживает сценарий или к месту приводит простое действие; потребности, привычки и социальные предпочтения появятся позже.

Есть и шероховатости. Два стола в трактире намеренно имеют одинаковое видимое имя, поэтому команда сесть за стол пока не позволяет указать, какой именно стол вы имели в виду. Одинокие посетители за разными столами остаются в аудитории общего зала, пока к ним кто-нибудь не присоединится. Игрок также может втянуть стоящего NPC в компанию, просто присоединившись к нему, без отдельного согласия. Для тестирования это удобно, но полноценной моделью согласия пока не является.

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

Это следующий шаг после статьи «Когда каждый NPC рассказывал всем всё»: сначала остановить вещание каждой мысли на всю комнату, а затем сделать границы между разговорами частью мира.