Oct 26, 2026
How The Sims 4 decides what a Sim does: the numbers from the game's code
Abstract
We decompiled the simulation of The Sims 4 and read its data. A Sim picks an action by scoring every option against its needs, keeping the ten best, and rolling a weighted die. Needs are numbers from −100 to 100 that fall at fixed rates. Mood is a sum of weights. Only the Sims on the current lot are simulated. The rest of the town is a set of records, moved forward once a night by dice rolls. This page gives the numbers.
1 Summary
Seven results, from 764,636 lines of game code and 176,805 tuning records:
- A Sim chooses by utility scoring. Each need gives a desire from a step curve. Each action advertises how much it fills each need. The game multiplies the two, keeps the 10 best options, and picks one at random, weighted by score.
- A need is a number from −100 to 100 that falls at a constant rate. The game does not tick it. It computes the value when it reads it, and sets one alarm for the next threshold. At the base rate, full to empty would take 16 hours for Hunger and 48 hours for Hygiene. Decay slows as a need falls, so a Sim lasts longer (Table 3).
- Mood is the emotion with the largest sum of buff weights. Positive and negative weights do not cancel. A Starving Sim carries 40 points of Uncomfortable.
- A relationship is two tracks, Friendship and Romance, plus a short-term context. High romance fades fastest: 6 points a day above 75. Two NPCs never lose their relationship. The outcome of a social is a weighted random choice.
- Only the Sims on the current lot are simulated. Everyone else is a record with a level of detail, capped at 1,041 Sims in total. When an NPC comes back, the game sets its needs from a time-of-day curve. Once a night, at 02:30, a story progression pass rolls dice to keep births, deaths, jobs, and moves near target shares.
- Personality is mostly hidden buffs that scale the numbers above. Glutton multiplies the desire for food by 1.5. Slob multiplies the desire for hygiene by 0.15.
- The rules are Python and the data drives them. The engine is C++. It talks to the Python simulation as a client to a server, even in single player. One sim minute is 1.5 real seconds.
2 Method
We worked from a local install of The Sims 4, patch of 20 July 2026, with the base game and 78 packs. The game ships its rules as Python 3.7 bytecode in three zip files: the standard library (440 files), the framework (137 files), and the game itself (2,963 files). We decompiled them with decompyle3. That gave 764,636 lines of Python.
The game's numbers live in “tuning”. Each package ships its tuning as one binary resource, a packed XML tree. We decoded the format and wrote a converter. That gave 176,805 tuning instances of 117 types, which configure about 3,000 Python modules.
Limits. 6 of 3,263 files did not decompile, and about 115 have parts that failed. Some functions came back with the wrong nesting. Three modules are compiled with Cython and have no Python source: constraints, the posture graph, and posture specs. Where the code was not clear, the numbers below come from the tuning and from the descriptions that the designers wrote in the tunables. Line numbers refer to the decompiled files, not to EA's source. We do not publish the code or the data. This page gives names and numbers only.
“Sim minute” and “sim hour” mean game time. At speed 1, one sim minute takes 1.5 real seconds, so a sim day takes 36 real minutes.
3 How a Sim chooses
A Sim is not a state machine. It is a scorer. Every so often it looks at the objects around it, scores the actions they offer, and rolls for one. The score has three inputs: how badly the Sim wants each need, how much the action fills that need, and how long the action takes, walk included.
3.1 How badly a Sim wants something
Each need has a value from −100 to 100. A step curve turns the value into a desire. The steps are steep. Each band below −25 multiplies the desire by about 8. Above −25, four of the six needs advertise nothing at all. Fun and Social never go below 1, so they always have a small voice.
| Need | −100 | −76 to −51 | −50 to −26 | −25 and up | Weight |
|---|---|---|---|---|---|
| Hunger | 1,024 | 64 (512 at −76) | 8 | 0 | 0.2857 |
| Bladder | 1,024 | 128 | 8 | 0 | 0.05 |
| Energy | 256 | 32 | 8 | 0 | 2 |
| Hygiene | 64 | 8 | 8 (4 at −26) | 0 | 0.25 |
| Fun | 128 | 32 | 8 | 4, down to 1 at 100 | 1 |
| Social | 128 | 32 | 8 | 4, down to 1 at 100 | 0.5 |
Source: tuning/statistic/motive_*.xml
The game sorts the needs by desire and keeps every need with at least 51% of the top desire. It scores only the actions that advertise those needs. If none works, it tries the next band of needs. Traits and buffs multiply the desire before this step.
Source: autonomy/autonomy_modes.py:1744-1768, 862-874
3.2 The score, in words
For each need that an action advertises, the game computes a fill rate: the advertised change to the need, divided by the expected length of the action. 3,222 actions use the default length of 30 sim minutes. It then computes an efficiency: the length of the action divided by the length plus the walk. Walk time is 25 sim minutes per kilometer.
The need score is fill rate × efficiency × desire × need weight × object preference. If something the Sim is already doing fills the same need, the score is cut to a quarter.
The action score is the sum of its need scores, times a factor for being outside, a factor for the relationship with the target Sim, a factor for the size of the group, and a factor for the situation. Then: halve it if the object is off the lot. Subtract the value of whatever the new action would cancel, times 1.5 if the Sim must change posture. Add the value of whatever continues alongside it. Divide by ten if the Sim is in an exclusive situation.
Source: autonomy/autonomy_modes.py:1217-1224, 1259-1541, 604
3.3 The choice
Before scoring, the game prunes. It drops objects off the lot beyond 25 m, target Sims who walk more than 15 m away, and targets that failed in the last 15 sim minutes. Of several copies of the same kind of action it keeps 3 at random. Each action has a priority bucket from 1 to 5, and only the best bucket survives. If the best possible score with no walk is under half of the current best, the game does not even compute the route.
Then it sorts the survivors, keeps the top 10, removes any with a score of 0 or less, and picks one at random with probability equal to score divided by the sum of scores. If every score is 0, the nearest option wins.
Multitasking adds one more roll. The game sums the attention cost of the running actions and the new one, and reads a curve: cost 1 gives 1, cost 1.5 gives 0.5, cost 2 gives 0.1, cost 3 gives −0.5. If a random roll beats that number, the Sim does not start the new action. An idle Sim always passes.
Source: autonomy/autonomy_service.py:121-202, autonomy_modes.py:667-681, 816-832, 1152-1165, 1445-1496
3.4 When autonomy runs
Each Sim has an alarm in sim time. The first run is 5 sim minutes after the Sim spawns. The next delay depends on the result.
| Situation | Next run after |
|---|---|
| The player gave the Sim an order | 5 sim minutes |
| The last run found nothing | 20 to 25 sim minutes, random |
| The Sim has actions queued or running | 12 to 15 sim minutes, random |
| The Sim has nothing to do | at once |
Source: autonomy/autonomy_component.py:343-364, tuning/tun/autonomy.autonomy_modes.xml
Autonomy does not run at speed 3, when the player has turned it off, or while a running action forbids multitasking. One service handles one request at a time, in slices of 0.1 real seconds.
Long actions hold short ones. “Chat” holds “Tell joke”. When the queue is empty, a second scorer picks the short action: a provider weighted by its best need, then a group, then a short action weighted by its content score.
Source: autonomy/autonomy_modes.py:374-448, 906-936, autonomy_service.py:214-238
4 Needs and mood
All six adult needs run from −100 to 100. Distress starts at −75. Failure is at −100, except Fun, which has no failure. Each band below −25 adds a buff. The buff can change the decay rate and adds weight to one emotion.
| Need | Points per sim minute | Full to empty, linear | Full to empty, real | Emotion at −75 and below | At −100 |
|---|---|---|---|---|---|
| Hunger | 0.2083 | 16.0 h | 63.0 h | Uncomfortable, weight 40 | death by hunger |
| Energy | 0.1389 | 24.0 h | 24.0 h | Uncomfortable, weight 3 | passes out |
| Bladder | 0.1736 | 19.2 h | 18.0 h | Uncomfortable, weight 40 | wets itself |
| Hygiene | 0.0694 | 48.0 h | 42.1 h | Uncomfortable, weight 2 | failure animation |
| Fun | 0.1488 | 22.4 h | 24.0 h | Stressed, weight 3 | none |
| Social | 0.0868 | 38.4 h | 47.9 h | Sad, weight 3 | failure animation |
Source: tuning/statistic/motive_*.xml, tuning/buff/Buff_Motives_*.xml
Hunger slows down as it falls. Below −50 the rate drops to a twelfth. So a Sim is fine for 10 hours, Hungry for 24 hours, and Starving for 24 hours before it dies. Bladder speeds up instead: 1.2× below −25. New Sims get hidden buffs for their first 3 days that slow decay, for example Bladder × 0.6 and Energy × 0.7.
4.1 Decay is not a tick
The game stores the time of the last change. When code reads a need, it adds elapsed minutes × rate. To act at a threshold, it computes the time to reach it and sets one alarm. Every rate change writes the current value first, so the value is a piecewise linear function of time. While an action changes a need, that need does not decay.
Source: statistics/continuous_statistic.py:366-405, 525-573
4.2 Mood
The game adds the mood weight of every active buff, per emotion. The emotion with the largest total wins. Positive and negative totals do not cancel each other. With no weighted buffs the mood is Fine. On a tie, the older buff wins. The level of the mood is the number of thresholds the total reaches.
| Mood | Thresholds | Levels |
|---|---|---|
| Angry | 3, 7 | 3 |
| Embarrassed | 4, 8 | 3 |
| Playful | 8, 15 | 3 |
| Confident, Energized, Flirty, Focused, Happy, Inspired | 8 | 2 |
| Sad | 3 | 2 |
| Scared, Stressed, Uncomfortable | 4 | 2 |
| Bored, Dazed, Fine, Asleep | none | 1 |
Source: objects/components/buff_component.py:965-1116, tuning/mood/
A mood of the other polarity replaces the current mood only if it is stronger by one level. That stops the mood from flipping back and forth. Some buff values: Starving gives Uncomfortable 40. Peed self gives Embarrassed 5 for 240 minutes. A good meal from good ingredients gives Happy 3 for 360 minutes and slows Hunger decay to a fifth. A brisk shower gives Energized 1 for 240 minutes. A timed buff lasts 100 sim minutes by default and does not stack with itself.
5 Relationships
Each pair of Sims shares one relationship. It has two long-term tracks, Friendship and Romance, from −100 to 100. Both start at 0 and decay toward 0. A short-term context sits on top and moves fast during a conversation.
| Friendship | Decay per day | Romance | Decay per day |
|---|---|---|---|
| −100 to −70 | 4.0 | −100 to −50 | 2 |
| −70 to −20 | 2.5 | −50 to 0 | 1 |
| −20 to 35 | 1.0 | 0 to 25 | 3 |
| 35 to 60 | 1.5 | 25 to 50 | 4 |
| 60 to 100 | 1.0 | 50 to 75 | 5 |
| 75 to 100 | 6 |
Source: tuning/statistic/LTR_Friendship_Main.xml, LTR_Romance_Main.xml
Any change that is not decay pauses decay for one sim day. A pair with a Sim of the active household always decays. A pair with another played Sim decays only between −20 and 20. A pair of two NPCs never decays. Gains scale with age: adult to adult × 0.6, child to child × 2.5.
Labels appear at one value and leave at a lower one, so they do not flicker. Friend arrives at 35 and leaves at 30. Good Friends at 60 and 55. Disliked at −20 and −15. Romance labels need friendship too. With friendship at 60 or more: Romantic Interest at 10, Lovebirds at 25, Lovers at 50, Soulmates at 75. Best Friends is removed when friendship falls to 10.
Source: relationships/relationship_track.py:275-348, tuning/relbit/
5.1 The conversation on top
Four context tracks follow the current conversation: Friendship, Fun, Romance, and Awkwardness. Each social moves one of them by about 10 points and pulls the others toward 0. After the Sims part, the context decays at 0.55 points a minute, about 3 sim hours from 100 to 0, toward a start value set by their sentiments: +20 for Close, −50 for Furious.
Source: tuning/statistic/SocialContext_*.xml, relationship_track.py:777-786
5.2 How a social resolves
The game computes a score from tests, collects the outcomes whose tests pass, and picks one by weight. For friendly small talk the score adds: friendship from −8 (below −70) to +8 (above 60); +6 for a Friendly context, −6 to −15 for a Boring one; the actor's mood, Happy +5, Confident +3, Angry −3, Sad −3, Stressed −5; a listener who is Angry, −9; traits, about ±3 to ±5.
“Ask About Day” then succeeds at a score of 15 or more, fails at −10 or less, and gives a small gain when neither applies. A bored target wins with weight 999 and costs Fun instead.
Gains shrink as the track rises. A small gain is +4 below −40, +2 up to 0, +1.5 up to 20, +1 up to 40, and +0.5 above 40. A small loss is −2, then −3 from 40, then −4 above 80. So friendships grow slower and break faster as they get stronger. Compatibility multiplies the result: × 1.5 Amazing, × 1.25 Good, × 0.75 Bad, × 0.5 Awful.
Flirting has its own score: +25 for romance at 50 or more, +12 Steamy, −23 Awkward, −20 for an angry listener, −8 to −12 for low hygiene, +2 to +12 for the Charisma skill, −18 just after a break-up.
Source: interactions/utils/outcome.py:755-841, tuning/test_based_score/scores_socialoutcomes_*.xml, tuning/action/Rel_Gain_Small.xml
6 The world the player does not see
The game simulates in full only the Sims on the current lot. Every other Sim is a record with a level of detail. Their needs stay frozen. When one comes back on screen, the game sets each need from a time-of-day curve: Hunger is low at 6:00 and 18:00 and full after the meals, Energy is full at 6:00 and low from 22:00, Bladder fills at 7:00, 13:30, and 21:00. Each Sim gets a random offset of up to 90 to 120 minutes. After an absence of a full sim day the need is the curve value. After a shorter one the game interpolates. The player's own household keeps real decay off the lot.
Source: statistics/commodity.py:458-460, 779-794, 1068-1121
6.1 Levels of detail and the cap
| Level | What the game keeps | Cap |
|---|---|---|
| Minimum | relationships, traits, family tree | 100 |
| Background | + career | 628 |
| Base | + needs, buffs, outfits | 170 |
| Interacted | same as Base | 100 |
| Full | + wants, away actions | 35 |
| Active (the household) | + aspirations | 8 |
Source: sims/sim_info_lod.py:10-16, tuning/tun/sims.culling.culling_tuning.xml
The caps add up to 1,041 Sims. That is the whole population a save can hold.
6.2 Story progression at 02:30
Once each sim day, at 02:30, the game runs story progression. It works in passes. Each pass measures one share of the population, reads a band table, and rolls a chance to start one or more story arcs. By default it changes other households, not the player's.
| Pass | Measures | Bands |
|---|---|---|
| Pregnancy and adoption | share of residents who are babies to children | under 8%: 100%, 2 arcs. Under 11%: 85%, 1 to 2. Under 14%: 70%, 1 to 2. Under 17%: 50%, 1. Under 20%: 20%, 1. Above: 0 |
| Accidental death | Sims as a share of the Sim cap | under 15%: 0. Under 20%: 10%. Under 50%: 20%. Under 90%: 50%. Above: 75% |
| Move in | share of empty homes | under 30%: 0. Under 80%: 15%. Above: 25% |
| Move out | share of full homes | under 40%: 0. Under 70%: 40%. Above: 60% |
| Get a job | share with no job | under 20%: 10%. Under 80%: 50%. Above: 67% |
| Quit a job, retire | share who can | 10% to 33% |
| Start, end, restart a romance | 10% to 99% | |
| Friendship changes | 99%, 1 to 5 arcs |
Source: story_progression/story_progression_service.py:1588-1612, tuning/tun/story_progression.*.xml
So a full town is a deadly town. With the population at 90% of the cap, there is a 75% chance each night that somebody dies by accident. The death chapter picks one of 16 causes, weighted by traits, career, and skills. The pregnancy pass picks pregnancy or one of three kinds of adoption with weights 3:1:1:1. An older loop also runs every 20 sim minutes and takes turns at 6 jobs: initial population, the population cap, holiday rentals, relationship culling, fame, and university.
6.3 Culling
Between 02:00 and 06:00, when a level is over its cap, the game cuts it to 15% below the cap. It moves Sims down one level at a time. At the end it deletes whole households, up to 10 each run. A Sim with a family link to the player drops to Minimum instead. Story progression also keeps at most 35 relationships for a played NPC and removes the weakest.
The culling score adds the depth of relationships with played Sims, weighted by how recently the other Sim was on screen (1 at 0 days, 0.8 at 3 days, 0.3 at 21 days); (7 minus days since the Sim was on screen) × 1.43; and importance: +10 for a resident of the world, +10 for a premade Sim. Player Sims, Sims on the lot, and Sims with an immune trait are never culled.
Source: sims/culling/culling_service.py:263-330, story_progression_action_sim_info_culling.py:1035-1041
6.4 Filling the street
Every 5 sim minutes the game compares the wanted number of Sims on the street with the current number. The wanted number is a curve by day and hour. Garden Suburbs on a weekday wants 3 at 00:00, 10 at 06:00, 15 at 17:00, and 2 at 22:00. Venues check their shifts every 10 sim minutes. The lot holds at most 20 Sims minus the household size. Above the cap, the NPCs with the lowest “klout” leave. To cast an NPC for a role, the game scores every record against a filter and picks at random from the top 5.
Source: situations/ambient/ambient_service.py, sims/sim_spawner_service.py:263-362, filters/sim_filter_service.py:1000-1112
6.5 Lifespan
| Stage | Short | Normal | Long |
|---|---|---|---|
| Baby | 0.5 | 1 | 4 |
| Infant | 2.5 | 5 | 20 |
| Toddler | 3.5 | 7 | 28 |
| Child | 7 | 14 | 56 |
| Teen | 10.5 | 21 | 84 |
| Young adult | 14 | 28 | 112 |
| Adult | 21 | 42 | 168 |
| Elder | 7 | 14 | 56 |
| Total | 66 | 132 | 528 |
Source: tuning/snippet/agingTransition_Human_*.xml, sims/aging/aging_mixin.py:419-434
A new NPC starts at a random point in its stage. At the end of the elder stage, an NPC off the lot dies at once. One on the lot gets the old-age death scene. A normal life of 132 sim days is 79 real hours at speed 1. For what this means in play, read the Sims 4 lifespan guide.
7 Traits, skills, careers
Personality is mostly hidden buffs. The base game tuning holds 317 hidden traits, 76 reward traits, 57 personality traits, 46 likes, 46 dislikes, 14 fears, and 12 bonus traits from aspirations. A Sim has 0 personality slots as a baby, 1 from infant to child, 2 as a teen, and 3 from young adult on.
A trait works in four ways. It adds buffs that multiply the desire for a need, its decay, or the gain of a skill. It adds a hidden fake need that only some actions fill, so autonomy picks those actions more often. It swaps generic buffs for its own versions. And it adds wants and social actions.
- Glutton: Hunger desire × 1.5. Loner: Social desire × 0.5 and Social decay × 0.5. Slob: Hygiene desire × 0.15 and the desire to tidy × 0.
- Lazy: a fake need that falls 0.4167 a minute toward −100, with desire 2 at the bottom and weight 0.15. A nap on a sofa fills it. Fitness fatigue × 2. Conflicts with Active, Ambitious, and Neat.
- Active: a counter starts at 250 to 300 and falls 0.1 a minute. At 40 or less the Sim is Tense until it exercises.
- Gloomy: Sad becomes Gloomy. Creative skills get +1 and × 1.2 gain; other skills −1 and × 0.8.
Source: traits/traits.py:1046-1177, tuning/trait/, tuning/buff/Buff_Trait_*.xml
7.1 Skills
A major skill has 10 levels. The points from one level to the next are 100, 1,440, 2,160, 3,600, 5,280, 7,200, 10,140, 13,440, 17,100, and 21,120. A minor skill uses the first 5. An action gives 8 points a minute at level 1 and 16 at level 9 on the standard curve. So level 1 to 2 takes about 4.5 sim hours, and level 9 to 10 about 33. Inspired gives × 1.4 on creative skills, Focused × 1.4 on mental ones. Skills never decay.
Source: tuning/tun/statistics.skill.xml, statistics/statistic_ops.py:775-779, statistics/skill.py:734-735
7.2 Careers
Every 30 sim minutes at work, performance changes by (gain × tone − loss), scaled by the share of the shift elapsed. Gain is 60 at level 1 and falls to 15 at level 6, plus 10 for any positive mood and 10 more for Focused. Loss is up to 12 from a bad mood and 18 from a fear. Work Hard multiplies the gain by 1.5, Take It Easy by 0. Performance runs from −100 to 100. Promotion at 100, if the Sim has the skill. Demotion at −80. Fired at −95. Under 80% attendance loses pay. Tech Guru pays §31 an hour at level 1 and §516 at the top of the Start-up branch.
Source: careers/career_base.py:1980-2058, tuning/career/career_Adult_TechGuru.xml
7.3 Wants
A Sim has 4 want slots. The fear slot fills with a 40% chance. The game collects the want sets from the aspiration, traits, relationships, venue, season, career, skills, needs, and nearby objects. It picks a set weighted by priority (5 by default, 10 for one an event just activated), then a want by weight. A need want is worth 5 satisfaction points, joining a career 50, a promotion 100. The reward store has 124 items from 0 to 10,000 points.
Source: whims/whims_tracker.py:877-1013, tuning/tun/whims.whims_tracker.xml
8 The engine
The Sims 4 is a C++ engine that embeds Python 3.7. Python holds almost every rule: services, tuning, interactions, autonomy. C++ does rendering, routing, animation, resources, build mode, and the network. Python reaches the engine through native modules with a leading underscore, for routes, placement, animation, and the packed tuning.
The simulation and the renderer are a server and a client, even in single player. When a shared attribute changes, the Python side appends an op to a journal. There are 269 kinds of op. Each tick the distributor packs them into one protobuf message and sends it. An op can wait for an animation, so state and picture stay in step. The client answers with console commands.
At zone start about 70 game services and about 50 zone services start in a fixed order. Each tick the clock advances, the scheduler runs, the services update, and the ops go out. The scheduler is a heap of timed elements. Game code is written as Python generators that yield child elements, so a long action is a coroutine. Each scheduler run has a slice of 50 ms.
| Speed | Multiplier | Real time for one sim day |
|---|---|---|
| 1 | 1 | 36 min |
| 2 | 3 | 12 min |
| 3 | 7 | about 5 min |
| Super speed 3 (all Sims asleep) | 36 | 1 min |
Source: date_and_time.py:14-15, clock.py:132-339, time_service.py:12, distributor/
One step of the clock is capped at 5 real seconds. A week has 7 days. A new game starts on Sunday at 08:00. One Python class, Commodity, has hundreds of tuned subclasses, one per need. Mods use the same design: a loose tuning resource replaces the built-in one with the same id, and a script mod is a zip of Python modules the game imports.
9 What this means for life sims
The Sims 4 is a careful piece of engineering around one constraint: a 2014 CPU had to run it. So the world is a lot, and the town is a table. 1,041 records, a nightly dice roll, and a time-of-day curve that paints needs onto a neighbour the moment you see them. It works because the player never looks behind the curtain.
LifeSim takes the other path. The map is the real Earth, down to the street. People are not a lot and a table. Each person has a routine that an AI writes for them, and an agent controller follows it: the places they go, the hours they keep, the people they run into on the way. The rules and constraints of the world are System 0. People following their schedules are System 1.
System 2 is a language model that thinks for a person when the game asks. It decides what they say, what they want next, and how they explain it. That is the part The Sims 4 could not have in 2014, and the part that turns a schedule into someone who remembers you. You can try it at play.lifesim.com.
10 FAQ
Why does my Sim pee themselves?
Bladder falls 0.1736 points a minute, and 1.2× faster below −25. From full to empty takes 18 sim hours. Below −25, autonomy wants a toilet with desire 8. Below −50 the desire is 128, and below −75 it is 1,024. But the weight of Bladder is only 0.05, the lowest of the six needs, so a far toilet or a strong Fun or Social need can still win the roll. At −100 the Sim wets itself and gets Embarrassed 5 for 240 minutes. Autonomy also does not run at speed 3, or while an action forbids multitasking.
How often does story progression run?
Once per sim day, at 02:30. Each pass rolls against a band table. A smaller loop runs every 20 sim minutes and takes turns at six housekeeping jobs. Culling, which deletes up to 10 households, runs between 02:00 and 06:00.
How long is a Sim day?
36 real minutes at speed 1, 12 at speed 2, about 5 at speed 3, and 1 minute at super speed when everyone is asleep. One sim minute is 1.5 real seconds. A normal life of 132 sim days is 79 real hours at speed 1.
Does the game simulate Sims off the lot?
No. Off-lot Sims are records. Their needs do not move. When they appear again, the game sets each need from a curve of the time of day, with a random offset of up to 90 to 120 minutes. Only your own household keeps real decay while away. NPC careers skip work events and homework. NPCs still age. Relationships between two NPCs never decay.
Is The Sims 4 AI utility based?
Yes. Every action advertises how much it fills each need. The game multiplies that by the Sim's desire for the need, scales for walk time, keeps the 10 best options, and picks one at random in proportion to its score. There is no behaviour tree and no planner. Personality works by multiplying the desires.
Citation
Please cite this work as:
@misc{lifesim2026howthesims4works,
title = {How The Sims 4 decides what a Sim does: the numbers from the game's code},
author = {{Cris Lenta}},
year = {2026},
month = {oct},
url = {https://lifesim.com/research/how-the-sims-4-works}
}