// Город, где люди помнят, что с ними сделали

Живой Запад

на паузе

Что это

Это сервер для многопользовательской игры Red Dead Redemption 2. Технически он работает на RedM, так называется режим, который позволяет играть в эту игру вместе с другими людьми на своём сервере. Я взялся собрать на нём маленький город, где жители не стоят декорациями, а живут.

Владелец проекта сформулировал это так: игроки делают что хотят, грабят, торгуют, помогают, охотятся, а мир на это отвечает. Лавочник запоминает грабителя. Шериф усиливает патрули. На голову вешают награду. В основе игры лежит четыре шага: игрок что-то сделал, мир это запомнил, мир изменился, мир предложил новую историю.

Зачем это нужно

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

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

Как устроено

Свои ресурсы проекта разбиты на десять частей. Одна отвечает за общую память и часы, другая за самих жителей, третья за реакцию города и закон, четвёртая за слухи и встречи на дорогах. Есть ещё лавки, доска объявлений, городская власть, работы для игрока и отряды игроков. Всё это я посчитал: около 27 тысяч строк кода. Части не вызывают друг друга напрямую, а обмениваются короткими сообщениями о фактах вроде «убит человек» или «ограблена лавка». Сообщение только сообщает факт, а как на него реагировать, решает получатель.

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

Память устроена так. Для каждой пары «человек и человек» или «человек и игрок» хранятся четыре числа: доверие, симпатия, страх и вражда. Числа записываются в базу и переживают перезапуск сервера, а со временем понемногу тают. Свидетель преступления, и сама жертва тоже, запоминает игрока: у него сдвигаются страх и симпатия. Если коротко, NPC помнят, кто их ударил. Отдельно есть общая слава игрока, одна шкала на весь мир. Она привязана к персонажу, и выйти из игры и зайти снова, чтобы сбросить дурную славу, не получится.

Один урок стоил мне дороже остальных. Сначала я задавал жителям координаты вручную, и почти каждая жалоба владельца сводилась к одному: человек стоит «под горой» или «на крыше». В комментарии к коду сохранилась одна такая жалоба: кузнец в порядке, а женщина стоит в поле. Теперь место у карты спрашивают, а не придумывают. Разработчики игры расставили по городу сценарные точки: стул, скамья, стойка бара, наковальня. Я снял такую карту с помощью специального инструмента, и в ней 366 точек 32 видов. Из 1811 названий сценариев, которые ходят по сообществу, на карте Валентайна подтвердились только 33. Остальные придуманы, и назначать их без проверки бессмысленно.

Ещё одно решение: фигурки людей создаёт компьютер игрока, а не сервер. Когда их создавал сервер, их не видел никто. Сервер остался мозгом: решает, кому кого показать, и ведёт расписание, а показывает всё компьютер игрока.

Что уже работает

Что пока не работает

Здесь я хочу быть честным. Часть из этого я не проверил в игре, а значит, не могу за это ручаться.

Что дальше

Проект на паузе. Ждёт возврата к разработке.

← все проекты