26 октября 2026 г.
Принятие решений агентами в The Sims 4: оценка полезности, угасание потребностей и настроение
Аннотация
Мы изучили данные The Sims 4, чтобы понять, как игра управляет симами. Сим выбирает действие, оценивая каждый вариант по своим потребностям, отбирает десять лучших и бросает взвешенный кубик. Потребности — это числовые значения от −100 до 100, которые снижаются с постоянной скоростью. Настроение — это сумма весов. Симуляция затрагивает только симов на текущем участке. Остальной город — это набор записей, которые обновляются раз в сутки броском кубиков. На этой странице приведены конкретные цифры.
1. Краткий обзор
Семь выводов из 176 805 записей с настройками:
- Сим выбирает действие, оценивая его полезность. Каждая потребность порождает желание, определяемое ступенчатой функцией. Каждое действие сообщает, насколько оно удовлетворяет каждую потребность. Игра перемножает эти значения, отбирает 10 лучших вариантов и случайным образом выбирает один из них с учётом оценки.
- Потребность — это число от −100 до 100, которое снижается с постоянной скоростью. Игра не обновляет его ежесекундно, а вычисляет значение в момент обращения и устанавливает таймер на достижение следующего порога. При базовой скорости шкала голода опустеет за 16 часов, а гигиены — за 48. По мере снижения потребности её падение замедляется, так что сим может продержаться дольше (таблица 3).
- Настроение — это эмоция с наибольшей суммой весов от мудлетов. Положительные и отрицательные веса не компенсируют друг друга. Умирающий от голода сим получает 40 очков дискомфорта.
- Отношения — это две шкалы (дружба и романтика) и краткосрочный контекст. Сильная романтика угасает быстрее всего: 6 очков в день при значении выше 75. Отношения между двумя NPC никогда не ухудшаются. Исход социального взаимодействия определяется случайным выбором с учётом весов.
- Симуляция затрагивает только симов на текущем участке. Все остальные — это записи с определённым уровнем детализации; всего их не более 1041. Когда NPC возвращается, игра задаёт его потребности по кривой времени суток. Раз в сутки, в 02:30, система развития сюжета бросает кубики, чтобы рождаемость, смертность, карьера и пере езды соответствовали целевым показателям.
- Черты характера — это в основном скрытые мудлеты, которые влияют на приведённые выше числа. Черта «Обжора» умножает желание поесть на 1,5. Черта «Неряха» умножает потребность в гигиене на 0,15.
- Правила написаны на Python и управляются данными. Движок написан на C++. Он общается с симуляцией на Python как клиент с сервером, даже в одиночной игре. Одна сим-минута равна 1,5 реальной секунды.
2. Метод
Мы работали с локально установленной игрой The Sims 4 (патч от 20 июля 2026 года) с базовой игрой и 78 дополнениями. Правила игры написаны на Python, а её параметры хранятся в «настройках» — тех же данных, что редактируют моддеры. Мы изучили 176 805 экземпляров настроек 117 типов.
Ограничения. Если данные были неясны, приведённые ниже числа взяты из описаний, которые разработчики оставили в настраиваемых параметрах. Мы не публикуем файлы игры. На этой странице приведены только названия и числа.
«Сим-минута» и «сим-час» — это игровое время. На первой скорости одна сим-минута длится 1,5 реальной секунды, а сим-сутки — 36 реальных ми нут.
3. Как сим делает выбор
Сим — это не конечный автомат, а оценщик. Время от времени он осматривает окружающие объекты, оценивает предлагаемые ими действия и бросает кубик, чтобы выбрать одно. Оценка зависит от трёх факторов: насколько сильны его потребности, насколько действие их удовлетворяет и сколько времени оно займёт, включая путь до цели.
3.1. Насколько сильно сим чего-то хочет
Каждая потребность имеет значение от −100 до 100. Ступенчатая функция превращает это значение в желание. Ступени крутые: каждый диапазон ниже −25 умножает желание примерно на 8. Выше −25 четыре из шести потребностей не создают никакого желания. Досуг и общение никогда не опускаются ниже 1, поэтому всегда имеют небольшой вес.
| Потребность | −100 | от −76 до −51 | от −50 до −26 | от −25 и выше | Вес |
|---|---|---|---|---|---|
| Голод | 1,024 | 64 (512 при −76) | 8 | 0 | 0.2857 |
| Естественная нужда | 1,024 | 128 | 8 | 0 | 0.05 |
| Бодрость | 256 | 32 | 8 | 0 | 2 |
| Гигиена | 64 | 8 | 8 (4 при −26) | 0 | 0.25 |
| Досуг | 128 | 32 | 8 | 4 (снижается до 1 при 100) | 1 |
| Общение | 128 | 32 | 8 | 4 (снижается до 1 при 100) | 0.5 |
Источник: tuning/statistic/motive_*.xml
Игра сортирует потребности по силе желания и оставляет те, у которых желание составляет не менее 51 % от максимального. Оцениваются только действия, связанные с этими потребностями. Если подходящих нет, игра переходит к следующей группе потребностей. Черты характера и мудлеты влияют на желание до этого шага.
3.2. Оценка в двух словах
Для каждой потребности, на которую влияет действие, игра вычисляет скорость восполнения: заявленное изменение потребности делится на ожидаемую продолжительность действия. 3222 действия используют стандартную продолжительность в 30 сим-минут. Затем вычисляется эффективность: продолжительность действия делится на сумму его продолжительности и времени ходьбы. Скорость ходьбы — 25 сим-минут на километр.
Оценка потребности = скорость восполнения × эффективность × желание × вес потребности × предпочтение объекта. Если сим уже выполняет действие, удовлетворяющее ту же потребность, оценка снижается вчетверо.
Оценка действия — это сумма оценок его потребностей, умноженная на коэффициенты за нахождение на улице, отношения с целевым симом, размер группы и ситуацию. Затем: оценка делится пополам, если объект находится вне участка. Вычитается ценность действия, которое будет отменено (умноженная на 1,5, если симу нужно сменить позу). Прибавляется ценность действия, которое будет выполняться параллельно. Оценка делится на десять, если сим находится в эксклюзивной ситуации.
3.3. Выбор
Перед оценкой игра отсеивает варианты: объекты дальше 25 м от участка, целевых симов дальше 15 м и цели, с которыми не удалось взаимодействовать в последние 15 сим-минут. Из нескольких одинаковых действий случайно остаются три. Каждое действие имеет приоритет от 1 до 5, и остаются только действия с наивысшим приоритетом. Если лучшая возможная оценка без учёта ходьбы меньше половины текущей лучшей, игра даже не рассчитывает маршрут.
Затем игра сортирует оставшиеся варианты, оставляет 10 лучш их, убирает те, что с оценкой 0 или ниже, и выбирает один случайным образом. Вероятность выбора равна оценке, делённой на сумму всех оценок. Если все оценки равны 0, побеждает ближайший вариант.
Многозадачность добавляет ещё один бросок кубика. Игра суммирует затраты внимания текущих и нового действий и обращается к кривой: затраты 1 дают 1, 1,5 — 0,5, 2 — 0,1, 3 — −0,5. Если случайное число оказывается больше этого значения, сим не начинает новое действие. Бездействующий сим всегда проходит проверку.
3.4. Когда включается свобода воли
У каждого сима есть таймер в игровом времени. Первый запуск происходит через 5 сим-минут после появления сима. Следующая задержка зависит от результата.
| Ситуация | Следующий запуск через |
|---|---|
| Игрок отдал симу приказ | 5 сим-минут |
| Последний поиск не дал результатов | 20–25 сим-минут (случайно) |
| У сима есть действия в очереди или в процессе выполнения | 12–15 сим-минут (случайно) |
| Симу нечего делать | сразу |
Источник: tuning/tun/autonomy.autonomy_modes.xml
Автономия не работает на 3-й скорости, когда игрок её отключил или когда текущее действие запрещает многозадачность. Служба обрабатывает по одному запросу за раз отрезками по 0,1 секунды реального времени.
Длительные действия включают в себя короткие. «Болтать» включает «Рассказать шутку». Когда очередь пуста, второй оценщик выбирает короткое действие: сначала провайдер, взвешенный по наиболее актуальной потребности, затем группа, а затем короткое действие, взвешенное по оценке контента.
4. Потребности и настроение
Все шесть потребностей взрослого персонажа меняются в диапазоне от −100 до 100. Недомогание начинается на отметке −75. Критическое состояние наступает на −100 (кроме досуга, у которого нет критического состояния). Каждый диапазон ниже −25 даёт мудлет. Мудлет может изменить скорость снижения потребности и добавляет вес одной из эмоций.
| Потребность | Очков в минуту | От максимума до нуля, линейно | От максимума до нуля, реально | Эмоция при −75 и ниже | При −100 |
|---|---|---|---|---|---|
| Голод | 0.2083 | 16.0 h | 63.0 h | Дискомфорт, вес 40 | смерть от голода |
| Бодрость | 0.1389 | 24.0 h | 24.0 h | Дискомфорт, вес 3 | теряет сознание |
| Естественная нужда | 0.1736 | 19.2 h | 18.0 h | Дискомфорт, вес 40 | мочится под себя |
| Гигиена | 0.0694 | 48.0 h | 42.1 h | Дискомфорт, вес 2 | анимация провала |
| Досуг | 0.1488 | 22.4 h | 24.0 h | Напряжение, вес 3 | нет |
| Общение | 0.0868 | 38.4 h | 47.9 h | Грусть, вес 3 | анимация провала |
Источник: tuning/statistic/motive_*.xml, tuning/buff/Buff_Motives_*.xml
Голод снижается медленнее по мере падения. Ниже −50 скорость падает до одной двенадцатой. Так, персонаж не голоден 10 часов, затем 24 часа испытывает голод, а через следующие 24 часа умирает. А вот нужда, наоборот, ускоряется: в 1,2 раза при значении ниже −25. В первые 3 дня новые персонажи получают скрытые мудлеты, замедляющие снижение потребностей: например, нужды — в 0,6 раза, а бодрости — в 0,7.
4.1. Снижени е потребностей — не тики
Игра хранит время последнего изменения. Когда код считывает потребность, он добавляет произведение прошедших минут на скорость. Чтобы сработать на пороговом значении, игра вычисляет время его достижения и ставит таймер. Каждое изменение скорости сначала записывает текущее значение, поэтому оно является кусочно-линейной функцией времени. Пока действие изменяет потребность, она не снижается.
4.2. Настроение
Игра суммирует вес настроения от каждого активного мудлета по каждой эмоции. Побеждает эмоция с наибольшей суммой. Положительные и отрицательные суммы не гасят друг друга. Без мудлетов с весом настроение «Нормальное». При ничьей побеждает более старый мудлет. Уровень настроения зависит от того, сколько порогов достигла общая сумма.
| Настроение | Пороги | Уровни |
|---|---|---|
| Сердитый | 3, 7 | 3 |
| Смущённый | 4, 8 | 3 |
| Игривый | 8, 15 | 3 |
| Уверенный, Возбуждённый, Кокетливый, Сосредоточенный, Счастливый, Вдохновлённый | 8 | 2 |
| Грустный | 3 | 2 |
| Испуганный, Напряжённый, Дискомфорт | 4 | 2 |
| Скучающий, Ошарашенный, Нормальное, Сон | нет | 1 |
Источник: tuning/mood/
Настроение противоположной полярности заменяет текущее, только если оно на один уровень сильнее. Это не даёт настроению постоянно меняться. Примеры значений мудлетов: истощение даёт +40 к дискомфорту. Конфуз от мокрых штанов даёт +5 к смущению на 240 минут. Вкусная еда из хороших продуктов даёт +3 к счастью на 360 минут и замедляет снижение голода до одной пятой. Бодрящий душ даёт +1 к возбуждению на 240 минут. Временный мудлет по умолчанию длится 100 минут и не складывается сам с собой.
5. Отношения
У каждой пары персонажей есть одни отношения. Они состоят из двух долгосрочных шкал — дружеской и романтической — от −100 до 100. Обе начинаются с 0 и со временем стремятся к 0. Поверх них накладывается краткосрочный контекст, который быстро меняется во время разговора.
| Дружба | Снижение в день | Романтика | Снижение в день |
|---|---|---|---|
| от −100 до −70 | 4.0 | от −100 до −50 | 2 |
| от −70 до −20 | 2.5 | от −50 до 0 | 1 |
| от −20 до 35 | 1.0 | от 0 до 25 | 3 |
| от 35 до 60 | 1.5 | от 25 до 50 | 4 |
| от 60 до 100 | 1.0 | от 50 до 75 | 5 |
| от 75 до 100 | 6 |
Источник: tuning/statistic/LTR_Friendship_Main.xml, LTR_Romance_Main.xml
Любое изменение, кроме естественного снижения, приостанавливает его на один игровой день. Отношения с персонажем из активной семьи всегда ухудшаются со временем. Отношения с другим управляемым персонажем ухудшаются только в диапазоне от −20 до 20. Отношения между двумя NPC никогда не ухудшаются. Прирост зависит от возраста: взрослый со взрослым — ×0,6, ребёнок с ребёнком — ×2,5.
Статусы отношений появляются при одном значении, а исчезают при более низком, чтобы не мерцать. «Приятель» появляется на 35, а исчезает на 30. «Хорошие друзья» — на 60 и 55. «Неприязнь» — на −20 и −15. Для романтических статусов нужна и дружба. При дружбе 60 и выше: «Романтический интерес» — на 10, «Влюблённые» — на 25, «Любовники» — на 50, «Родственны е души» — на 75. Статус «Лучшие друзья» пропадает, когда дружба падает до 10.
Источник: tuning/relbit/
5.1. Контекст разговора
За текущим разговором следят четыре шкалы контекста: дружеская, весёлая, романтическая и неловкая. Каждое общение сдвигает одну из них примерно на 10 очков, а остальные тянет к 0. Когда персонажи расходятся, контекст снижается на 0,55 очка в минуту (от 100 до 0 примерно за 3 игровых часа) до стартового значения, которое задают их чувства: +20 для близких, −50 для разъярённых.
Источник: tuning/statistic/SocialContext_*.xml
5.2. Результат общения
Игра вычисляет оценку по результатам проверок, собирает исходы, прошедшие проверку, и выбирает один из них по весу. Для дружеской беседы оценка складывается так: дружба от −8 (ниже −70) до +8 (выше 60); +6 за дружелюбный контекст, от −6 до −15 за скучный; настроение персонажа: счастливый +5, уверенный +3, сердитый −3, грустный −3, напряжённый −5; если собеседник сердится — −9; черты характера — примерно от ±3 до ±5.
Действие «Спросить, как прошёл день» успешно при оценке 15 и выше, провально при −10 и ниже, а между этими значениями даёт небольшой при рост. Если собеседнику скучно, этот исход побеждает с весом 999 и вместо этого отнимает очки досуга.
Прирост уменьшается по мере заполнения шкалы. Небольшой прирост — это +4 при значении ниже −40, +2 до 0, +1,5 до 20, +1 до 40 и +0,5 выше 40. Небольшая потеря — это −2, затем −3 от 40 и −4 выше 80. Так дружба крепнет медленнее, а рушится быстрее, чем она сильнее. Совместимость умножает результат: потрясающая — ×1,5, хорошая — ×1,25, плохая — ×0,75, ужасная — ×0,5.
У флирта своя оценка: +25 за романтику 50 и выше, +12 за страстный контекст, −23 за неловкий, −20 за сердитого собеседника, от −8 до −12 за низкую гигиену, от +2 до +12 за навык обаяния, −18 сразу после разрыва.
Источник: tuning/test_based_score/scores_socialoutcomes_*.xml, tuning/action/Rel_Gain_Small.xml
6. Мир за кадром
Игра полностью симулирует только персонажей на текущем участке. Все остальные — это записи с разным уровнем детализации. Их потребности заморожены. Когда персонаж возвращается на экран, игра выставляет его потребности по кривой времени суток: голод низкий в 6:00 и 18:00 и на нуле после еды, бодрость полная в 6:00 и низкая с 22:00, нужда растёт в 7:00, 13:30 и 21:00. Кажды й персонаж получает случайное смещение до 90–120 минут. После отсутствия в течение целого игрового дня потребность равна значению на кривой. После более короткого — игра интерполирует. Управляемая игроком семья сохраняет реальное снижение потребностей и за пределами участка.
6.1. Уровни детализации и лимит
| Уровень | Что игра хранит | Лимит |
|---|---|---|
| Минимум | отношения, черты характера, семейное древо | 100 |
| Фон | + карьера | 628 |
| База | + потребности, мудлеты, наряды | 170 |
| Взаимодействия | То же, что и База | 100 |
| Заполнено | + желания, действия вне дома | 35 |
| Активная (семья) | + стремления | 8 |
Источник: tuning/tun/sims.culling.culling_tuning.xml
В сумме лимиты составляют 1041 персонажа. Это максимальное население для одного файла сохранения.
6.2. Развитие сюжета в 02:30
Раз в игровой день, в 02:30, в игре запускается развитие сюжета. Оно проходит в несколько этапов. На каж дом этапе игра оценивает долю населения, сверяется с таблицей диапазонов и определяет шанс запуска одной или нескольких сюжетных арок. По умолчанию изменения затрагивают другие семьи, а не семью игрока.
| Этап | Оценивается | Диапазоны |
|---|---|---|
| Беременность и усыновление | доля жителей от младенца до ребёнка | до 8%: 100%, 2 арки. До 11%: 85%, 1–2. До 14%: 70%, 1–2. До 17%: 50%, 1. До 20%: 20%, 1. Выше: 0 |
| Случайная смерть | доля персонажей от общего лимита | до 15%: 0. До 20%: 10%. До 50%: 20%. До 90%: 50%. Выше: 75% |
| Заселение | доля пустых домов | до 30%: 0. До 80%: 15%. Выше: 25% |
| Выселение | доля переполненных домов | до 40%: 0. До 70%: 40%. Выше: 60% |
| Поиск работы | доля безработных | до 20%: 10%. До 80%: 50%. Выше: 67% |
| Увольнение, выход на пенсию | доля тех, кто может | 10–33% |
| Начало, конец, возобновление романа | 10–99% | |
| Изменения в дружбе | 99%, 1–5 арок |
Источник: tuning/tun/story_progression.*.xml
Выходи т, что переполненный город — смертельно опасное место. Когда население достигает 90% от лимита, каждую ночь с шансом 75% кто-то может умереть от несчастного случая. Причина смерти выбирается из 16 вариантов с учётом черт характера, карьеры и навыков. На этапе беременности с весами 3:1:1:1 выбирается беременность или один из трёх видов усыновления. Также каждые 20 игровых минут запускается старый цикл, который поочерёдно выполняет 6 задач: начальное население, лимит населения, аренда на время отпуска, чистка отношений, слава и университет.
6.3. Чистка
Между 02:00 и 06:00, если какой-то уровень симуляции превышает лимит, игра сокращает его на 15% ниже лимита. Персонажи перемещаются на один уровень вниз за раз. В конце удаляются целые семьи, до 10 за один проход. Персонаж, связанный с игроком семейными узами, вместо удаления опускается до минимального уровня. Развитие сюжета также оставляет не более 35 отношений у управляемого NPC, удаляя самые слабые.
Рейтинг для чистки складывается из глубины отношений с управляемыми персонажами, взвешенной по тому, как давно другой персонаж был на экране (1 — 0 дней, 0,8 — 3 дня, 0,3 — 21 день); (7 минус количество дней с последнего появления на экране) × 1,43; и важности: +10 для жителя мира, +10 для готового персонажа. Персонажи игрока, персонажи на участке и персонажи с иммунитетом к чистке никогда не удаляются.
6.4. Заполнение улиц
Каждые 5 игровых минут игра сравнивает желаемое и текущее количество персонажей на улице. Желаемое количество меняется в зависимости от дня недели и времени суток. Например, в Пригороде в будний день нужно 3 персонажа в 00:00, 10 — в 06:00, 15 — в 17:00 и 2 — в 22:00. Заведения проверяют свои смены каждые 10 игровых минут. На участке может быть не более 20 персонажей минус размер семьи. Если лимит превышен, NPC с самым низким «влиянием» уходят. Чтобы выбрать NPC на роль, игра оценивает каждую запись по фильтру и случайным образом выбирает из 5 лучших.
6.5. Продолжительность жизни
| Этап | Короткая | Нормальная | Длинная |
|---|---|---|---|
| Новорождённый | 0.5 | 1 | 4 |
| Младенец | 2.5 | 5 | 20 |
| Малыш | 3.5 | 7 | 28 |
| Ребёнок | 7 | 14 | 56 |
| Подросток | 10.5 | 21 | 84 |
| Молодой | 14 | 28 | 112 |
| Взрослый | 21 | 42 | 168 |
| Пожилой | 7 | 14 | 56 |
| Всего | 66 | 132 | 528 |
Источник: tuning/snippet/agingTransition_Human_*.xml
Новый NPC появляется в случайный момент своего жизненного этапа. В конце этапа пожилого возраста NPC вне участка умирает мгновенно. Для того, кто на участке, проигрывается сцена смерти от старости. Обычная жизнь длиной в 132 игровых дня — это 79 реальных часов на первой скорости. Чтобы узнать, что это значит для игры, прочтите гайд по продолжительности жизни в The Sims 4.
7. Черты характера, навыки, карьеры
Характер — это в основном скрытые мудлеты. В базовой игре есть 317 скрытых черт, 76 наградных, 57 черт характера, 46 симпатий, 46 антипатий, 14 страхов и 12 бонусных черт за стремления. У персонажа 0 ячеек для черт характера в возрасте новорождённого, 1 — от младенца до ребёнка, 2 — у подростка и 3 — начиная с молодого возраста.
Черта характера раб отает четырьмя способами. Она даёт мудлеты, которые влияют на силу потребности, скорость её падения или прирост навыка. Она добавляет скрытую фиктивную потребность, которую удовлетворяют лишь некоторые действия, — так персонаж чаще выбирает их сам. Она заменяет общие мудлеты на свои. И она добавляет желания и социальные взаимодействия.
- Обжора: желание есть × 1,5. Одиночка: потребность в общении × 0,5 и её падение × 0,5. Неряха: потребность в гигиене × 0,15 и желание убираться × 0.
- Лежебока: фиктивная потребность, которая падает на 0,4167 в минуту до −100, с желанием 2 на минимуме и весом 0,15. Восполняется сном на диване. Усталость от фитнеса × 2. Конфликтует с чертами «Активный», «Карьерист» и «Чистюля».
- Активный: счётчик начинается с 250–300 и падает на 0,1 в минуту. На отметке 40 или ниже персонаж будет напряжён, пока не позанимается спортом.
- Угрюмый: грусть становится угрюмостью. Творческие навыки получают +1 и прирост × 1,2; другие навыки — −1 и × 0,8.
Источник: tuning/trait/, tuning/buff/Buff_Trait_*.xml
7.1. Навыки
У основного навыка 10 уровней. Для пе рехода на следующий уровень нужно 100, 1440, 2160, 3600, 5280, 7200, 10 140, 13 440, 17 100 и 21 120 очков. У малого навыка — первые 5. Действие даёт 8 очков в минуту на 1-м уровне и 16 на 9-м по стандартной кривой. Так, переход с 1-го на 2-й уровень занимает около 4,5 игровых часов, а с 9-го на 10-й — около 33. Вдохновение даёт × 1,4 к творческим навыкам, сосредоточенность — × 1,4 к умственным. Навыки никогда не снижаются.
Источник: tuning/tun/statistics.skill.xml
7.2. Карьеры
Каждые 30 игровых минут на работе продуктивность меняется на (прирост × тон – потеря), умноженное на долю прошедшей смены. Прирост равен 60 на 1-м уровне и падает до 15 на 6-м, плюс 10 за любое положительное настроение и ещё 10 за сосредоточенность. Потеря — до 12 от плохого настроения и 18 от страха. «Работать усердно» умножает прирост на 1,5, «Расслабиться» — на 0. Продуктивность меняется от −100 до 100. При 100 — повышение, если есть нужный навык. При −80 — понижение. При −95 — увольнение. Посещаемость ниже 80% ведёт к потере зарплаты. Технический гуру получает 31 §/час на 1-м уровне и 516 §/час на вершине ветки «Стартап».
Источник: tuning/career/career_Adult_TechGuru.xml
7.3. Желания
У персонаж а 4 ячейки желаний. Ячейка страха заполняется с вероятностью 40%. Игра собирает наборы желаний, исходя из жизненной цели, черт характера, отношений, типа участка, времени года, карьеры, навыков, потребностей и находящихся рядом объектов. Сначала она выбирает набор по приоритету (5 по умолчанию, 10 для недавно активированного), а затем — желание по весу. Желание, связанное с потребностью, приносит 5 баллов удовлетворения, устройство на работу — 50, а повышение — 100. В магазине наград 124 предмета стоимостью от 0 до 10 000 баллов.
Источник: tuning/tun/whims.whims_tracker.xml
8. Движок
The Sims 4 — это движок на C++ со встроенным Python 3.7. На Python реализованы почти все игровые механики: службы, настройки, взаимодействия, свобода воли. C++ отвечает за отрисовку, поиск пути, анимацию, ресурсы, режим строительства и сетевое взаимодействие. Python обращается к движку через нативные модули с начальным подчёркиванием, отвечая за маршруты, размещение объектов, анимацию и упакованные настройки.
Симуляция и отрисовка работают как сервер и клиент, даже в одиночной игре. Когда меняется общий атрибут, код на Python добавляет операцию в журнал. Всего существует 269 видов операций. Каждый такт дистрибьютор упаковывает их в одно сообщение Protobuf и отправляет. Операция может ожидать завершения анимации, чтобы состояние и картинка оставались синхронизированными. Клиент отвечает консольными командами.
При запуске зоны в определённом порядке загружаются около 70 игровых служб и 50 зональных. Каждый такт игровое время движется вперёд, запускается планировщик, обновляются службы и отправляются операции. Планировщик — это очередь элементов, упорядоченных по времени. Игровой код написан в виде генераторов Python, которые порождают дочерние элементы, поэтому долгое действие представляет собой сопрограмму. Каждый запуск планировщика занимает до 50 мс.
| Скорость | Множитель | Реальное время на один игровой день |
|---|---|---|
| 1 | 1 | 36 мин |
| 2 | 3 | 12 мин |
| 3 | 7 | около 5 мин |
| Сверхскорость 3 (все персонажи спят) | 36 | 1 мин |
Один шаг игровых часов ограничен 5 секундами реального времени. В неделе 7 дней. Новая игра начинается в воскресенье в 08:00. Класс Python «Commodity» имеет сотни настраиваемых подклассов — по одному на каждую потребность. Моды используют тот же принцип: отдельный файл настроек заменяет встроенный с тем же ID, а сценарный мод — это ZIP-архив с модулями Python, которые импортирует игра.
9. Что это значит для симуляторов жизни
The Sims 4 — это тщательно спроектированная игра, созданная с одним ограничением: она должна была работать на процессорах 2014 года. Поэтому мир в ней — это участок, а город — таблица. 1041 запись, ежедневный бросок кубиков и кривая времени суток, которая «дорисовывает» потребности соседу в тот момент, когда вы его видите. Это работает, потому что игрок никогда не заглядывает за кулисы.
LifeSim идёт другим путём. Карта здесь — реальная Земля, с точностью до улицы. Люди — не участок и таблица. У каждого человека есть свой распорядок дня, который для него пишет ИИ, а контроллер агента ему следует: места, которые человек посещает, его режим дня, люди, с которыми он сталкивается. Прави ла и ограничения мира — это Система 0. Люди, следующие своему расписанию, — Система 1.
Система 2 — это языковая модель, которая думает за персонажа, когда игра её об этом просит. Она решает, что он скажет, чего захочет и как это объяснит. Этого не могло быть в The Sims 4 в 2014 году, и именно это превращает расписание в кого-то, кто вас помнит. Попробовать можно на play.lifesim.com.
10. Частые вопросы
Почему мой персонаж писается?
Потребность в туалете падает на 0,1736 пункта в минуту, а при значении ниже −25 — в 1,2 раза быстрее. Шкала полностью опустошается за 18 игровых часов. Ниже −25 свобода воли ищет туалет с силой желания 8. Ниже −50 сила желания — 128, а ниже −75 — 1024. Но вес потребности в туалете всего 0,05, это самый низкий показатель из шести, поэтому далёкий туалет или сильная потребность в досуге или общении могут перевесить. При −100 персонаж мочится под себя и получает настроение «Смущение +5» на 240 минут. Свобода воли также не работает на 3-й скорости и во время действий, запрещающих многозадачность.
Как часто работает развитие сюжета?
Раз в игровой день, в 02:30. При каждом запуске происходит проверка по таблице вероятностей. Меньший цикл выполняется каждые 20 игровых минут и поочерёдно выполняет шесть служебных задач. Удаление персонажей, при котором игра может удалить до 10 семей, происходит между 02:00 и 06:00.
Сколько длится игровой день?
36 минут реального времени на 1-й скорости, 12 — на 2-й, около 5 — на 3-й и 1 минута на сверхскорости, когда все спят. Одна игровая минута — это 1,5 секунды реального времени. Обычная продолжительность жизни в 132 игровых дня равна 79 реальным часам на 1-й скорости.
Симулирует ли игра персонажей за пределами участка?
Нет. Персонажи за пределами участка — это просто записи. Их потребности не меняются. Когда они появляются снова, игра выставляет каждую потребность по кривой времени суток со случайным сдвигом до 90–120 минут. Реальное падение потребностей в отсутствие игрока сохраняется только у вашей семьи. Карьеры неигровых персонажей пропускают рабочие задания и домашнюю работу. При этом неигровые персонажи стареют. Отношения между двумя неигровыми персонажами никогда не ухудшаются.
Основан ли ИИ в The Sims 4 на принципе полезности?
Да. Каждое действие сообщает, насколько оно восполняет каждую потребность. Игра умножает это значение на желание персонажа удовлетворить потребность, корректирует с учётом времени ходьбы, оставляет 10 лучших вариантов и выбирает один из них случайным образом, пропорционально его оценке. В игре нет ни дерева поведений, ни планировщика. Характер персонажа влияет на силу его желаний.
Цитирование
Ссылка на эту работу:
@misc{lifesim2026howthesims4works,
title = {Agent Decision-Making in The Sims 4: Utility Scoring, Need Decay and Mood},
author = {{Cris Lenta}},
year = {2026},
month = {oct},
url = {https://lifesim.com/research/how-the-sims-4-works}
}