Sims4UICheats

Sims 4 relationship cheats: every argument of modifyrelationship, spelled out

Enter testingcheats true, then modifyrelationship <sim one> <sim two> <amount> <track>. The amount is added to the current score rather than replacing it, and the track is a tuning name such as LTR_Friendship_Main.

Verified against game build 1.126.73.1030
Syntax of the sims.give_satisfaction_points cheatThe command sims.give_satisfaction_points takes 2 arguments: satisfaction_points, opt_sim. Read from server_commands.sim_commands line 1001.How to readsims.give_satisfaction_pointsLeave the Sim off and it lands on the one youhave selected.sims.give_satisfaction_points5000<opt_sim>the command namesatisfaction_points · optionalopt_sim · optionalRead from server_commands.sim_commands line 1001,game build 1.126.73.1030.
The same shape as every other Cheat-type command: name, then values, then an optional Sim.

The five parameters, one at a time

Every relationship cheat page is built on this command, and none of them writes out what its parameters are.

modifyrelationship <info1> <info2> [amount] [track_type] — cheat type, server_commands.relationship_commands:508
ParameterDeclared typeHow you type itWords it costsDefault
info1SimInfoParamFirst and last name, or a numeric Sim ID2required
info2SimInfoParamThe second Sim, same two forms2required
amountfloatA number, negative allowed10
track_typeSTATISTIC tuning instanceA track's tuning name, such as LTR_Friendship_Main1None
_connectionconsole handleNever typed. The console supplies it0None

The word count in that table is the part that trips people up. Four parameters, but six words on a normal call, because a Sim written as a name eats two of them.

SimInfoParam tries to read the next word as an integer Sim ID first. If that fails it falls back to taking two words as a first and last name and matching them against the Sim info manager, lowercased on both sides, so capitalisation does not matter. That is the SimInfoParam class in server_commands/argument_helpers, in its _get_sim_id and get_arg_count_and_value methods.

Worked examples

The names below are placeholders. Substitute the two Sims you want to change.

modifyrelationship Amy Ito Jun Ito 100 LTR_Friendship_Main Fills the friendship bar between the two Sims
modifyrelationship Amy Ito Jun Ito -100 LTR_Friendship_Main Drives the same bar to the bottom instead
modifyrelationship Amy Ito Jun Ito 50 LTR_Romance_Main Romance track. The track name here is community-reported, not read from the build — see below
modifyrelationship 12345678 87654321 100 LTR_Friendship_Main Numeric Sim IDs instead of names. One word each rather than two

Sim IDs are the reliable form when a Sim has an awkward name, a duplicate name, or no last name. sims.get_sim_id_by_name prints one, and its output line is {} has sim id: {}.

The amount adds, it does not set

The command body calls add_relationship_score on the first Sim's relationship tracker with your number as the increment. So the amount is a delta applied to whatever is there now.

The write is then clamped to the track's own tuned minimum and maximum. A large positive number therefore fills the bar rather than pushing it past the end, which is why 100 is the number everyone uses and why typing 5000 changes nothing that 100 would not have. The extraction records the base friendship and romance tracks as running from -100 to 100.

Track names, and which of them this page can prove

track_type is resolved through the STATISTIC instance manager, so it wants a track's tuning name.

TrackNameEvidence
FriendshipLTR_Friendship_MainNamed in the game's own tuning documentation at simulation/filters/household_template.txt:10
RomanceLTR_Romance_MainCommunity-reported. The literal does not occur anywhere in the extracted Python, so it carries no build stamp

The friendship name comes out of a comment Maxis wrote for the household template tuning: it describes a friendship bit whose triggered track is LTR_Friendship_Main. That is the game describing its own track, which is as close to first-party as a name gets short of the tuning files themselves.

The romance name is not in the extracted Python. What is there is the class that holds both references, RelationshipTrack, which carries a FRIENDSHIP_TRACK and a ROMANCE_TRACK tunable in relationships/relationship_track. So a romance track certainly exists and the command certainly accepts it; the exact string above is what the community uses, and this page labels it rather than stamping it.

Let the game tell you the track name

track_type goes through get_tunable_instance, which tries your word as an id, then matches it against the tuning names of every loaded statistic. That match is not exact unless the command asks for exact matching, and modifyrelationship does not ask.

So a fragment resolves when exactly one name contains it. When several do, the helper answers Multiple names matched '{}': {} and lists them sorted. That makes a fragment like Friendship worth typing on purpose: the error prints the real names back at you.

Three families of track, and only one of them is shared

RelationshipTrackType has exactly three members: RELATIONSHIP, SENTIMENT and UNIDIRECTIONAL.

Friendship and romance are RELATIONSHIP tracks. SimRelationship.get_track_relationship_data routes only sentiments and unidirectional tracks to per-Sim storage; everything else falls through to the shared bidirectional record. One write changes both directions.

That is why the advice to run the command a second time with the names swapped is wasted typing. The second run adds to the same number the first run already changed. Sentiments and attraction are the genuine per-Sim case, where each direction is its own value.

When the command runs and nothing happens

In order of how often it is the cause.

  1. Cheats were never enabled this session. modifyrelationship is declared cheat type, so it is refused until testingcheats true has been entered. The flag clears every time you go back to the main menu or load another save.
  2. One of the Sims is held at minimum detail. RelationshipService._can_create_relationship returns False if either Sim's level of detail is MINIMUM, and every path that creates a relationship goes through it. The write is dropped silently. SimInfoLODLevel runs MINIMUM, BACKGROUND, BASE, INTERACTED, FULL, ACTIVE, and unmet background Sims sit at the bottom of it.
  3. The name did not match. Two words are consumed for a name whether or not they are the right two, so a Sim with a three-word name or an unexpected space throws the rest of the arguments out of alignment. The ID form avoids it.
  4. The track name is wrong. This one is not silent. The tuning lookup answers with No names matched, or lists the candidates when a fragment matches more than one, so read the console rather than assuming.

The other four cheats worth typing

These are the remaining commands in this section declared as cheat type, with what the shipped code does rather than what their names suggest.

relationship.make_all_sims_friends [opt_sim] — applies the game's default relationship setup between this Sim and every Sim in the info manager, then prints "Set {} default friendships for {}"
relationship.introduce_sim_to_all_others [opt_sim] — adds the tuned introduce value on the tuned introduce track against every other Sim, which is the "have met" state rather than a friendship
relationships.create_friends_for_sim [opt_sim] — spawns new Sims through a tuned filter and prints "Generating friends for active sim...". It creates Sims, it does not befriend existing ones
relationship.test_marriage no arguments — a save audit, not a cheat. It reports married pairs, or prints "There are no inappropriate marriages in this save."

Note the third one. relationships.create_friends_for_sim is widely listed as a way to make friends for a Sim; the body submits a Sim filter and spawns the matches. New Sims appear. That is a different outcome from the one the name implies.

All 76 relationship commands in build 1.126.73.1030

Sortable. The column that matters is Works in retail: 36 of the 76 rows are reachable by a player. The rest are registered, and every cheat list on the web transcribes them, but a player cannot run them.

CommandArgumentsWorks in retailTypeWhat it doesPackRegistered at
modifyrelationship<info1> <info2> <amount> <track_type>YesCheatChanges a relationship track between two Sims by an amount.server_commands.relationship_commands:508
relationship.introduce_sim_to_all_others<opt_sim>YesCheatserver_commands.relationship_commands:207
relationship.make_all_sims_friends<opt_sim>YesCheatserver_commands.relationship_commands:149
relationship.test_marriagenoneYesCheatserver_commands.relationship_commands:769
relationships.create_friends_for_sim<opt_sim>YesCheatserver_commands.relationship_commands:168
family_tree_forgery.complete_forgery<forger_sim> <origin_sim> <target_sim> <relbit_id> <path_ids_str>YesLivefamily_tree.family_tree_forgery_command:193
family_tree_forgery.get_origin_or_target_sim<forger_sim> <is_target> <opt_origin_sim> <opt_target_sim>YesLivefamily_tree.family_tree_forgery_command:89
family_tree_forgery.select_path_step<forger_sim> <sim_id_list> <connection_name_hash>YesLivefamily_tree.family_tree_forgery_command:154
family_tree_forgery.set_secret_child<pregnancy_sim> <chosen_partner_parent_sim>YesLivefamily_tree.family_tree_forgery_command:216
family_tree_forgery.set_secret_child_chosen_partner_parent<pregnancy_sim> <chosen_sim_type>YesLivefamily_tree.family_tree_forgery_command:230
family_tree_forgery.show_dialog<forger_sim_id> <origin_sim> <target_sim>YesLivefamily_tree.family_tree_forgery_command:24
genealogy.restore_archived_family_link<source_sim_id> <target_sim_id> <relbit_guid>YesLiveserver_commands.genealogy_commands:321
genealogy.show_archived_family_linksnoneYesLiveserver_commands.genealogy_commands:283
genealogy.show_family_tree<sim_info_id> <antecedent_depth> <descendant_depth>YesLiveserver_commands.genealogy_commands:96
genealogy.unpin_family_link<source_sim_id> <target_sim_id> <relbit_guid>YesLiveserver_commands.genealogy_commands:336
matchmaking.ask_on_date<actor_param> <target_actor_sim_id>YesLivematchmaking.matchmaking_commands:204
matchmaking.clean_up_gallery_sim<sim_id> <gallery_sim_id> <family_info_pb_data> <*gallery_siminfos>YesLivematchmaking.matchmaking_commands:297
matchmaking.contact_action_used<actor_param> <candidate_id>YesLivematchmaking.matchmaking_commands:256
matchmaking.delete_matchmaking_profile<actor_param> <candidate_id>YesLivematchmaking.matchmaking_commands:85
matchmaking.on_age_deselect<actor_param> <age_deselected>YesLivematchmaking.matchmaking_commands:145
matchmaking.on_age_select<actor_param> <age_selected>YesLivematchmaking.matchmaking_commands:127
matchmaking.open_camera<actor_param>YesLivematchmaking.matchmaking_commands:233
matchmaking.refresh_candidates<actor_param> <replace_gallery_sims> <enable_gallery_kill_switch>YesLivematchmaking.matchmaking_commands:278
matchmaking.report_matchmaking_gallery_profile<actor_param> <candidate_id>YesLivematchmaking.matchmaking_commands:106
matchmaking.save_matchmaking_profile<actor_param> <candidate_id>YesLivematchmaking.matchmaking_commands:64
matchmaking.set_profile_thumbnail<target_actor_sim_id> <thumbnail_url>YesLivematchmaking.matchmaking_commands:184
matchmaking.set_profile_traits<actor_param>YesLivematchmaking.matchmaking_commands:163
matchmaking.show_matchmaking_dialog<actor_param>YesLivematchmaking.matchmaking_commands:32
matchmaking.toggle_gallery_sims_enabled<enable>YesLiveEP16matchmaking.matchmaking_commands:383
matchmaking.toggle_gallery_sims_favorites_only_enabled<enable>YesLiveEP16matchmaking.matchmaking_commands:405
matchmaking.toggle_occult_sims_enabled<enable>YesLiveEP16matchmaking.matchmaking_commands:394
matchmaking.update_matchmaking_dialog<actor_param>YesLivematchmaking.matchmaking_commands:48
relationship.open_sim_profile_ui<profile_sim> <actor_sim>YesLiveserver_commands.relationship_commands:916
relationships.change_ab_group<ab_group_id> <is_valid_value>YesLiveserver_commands.relationship_commands:541
relationships.clear_ab_groupnoneYesLiveserver_commands.relationship_commands:560
relationships.set_object_relationship_name<sim_id> <obj_def_id> <name>YesLiveserver_commands.relationship_commands:329
genealogy.generate_dynasty<sim_id> <generations> <set_to_min_lod>NoAutomationserver_commands.genealogy_commands:42
matchmaking.get_contacted_sim_ids<actor_param>NoAutomationEP16matchmaking.matchmaking_commands:442
matchmaking.save_all_candidates<actor_param>NoAutomationEP16matchmaking.matchmaking_commands:416
relationship.add_bit<source_sim_id> <target_sim_id> <rel_bit>NoAutomationserver_commands.relationship_commands:579
relationship.add_score<source_sim_id> <target_sim_id> <score_delta> <track_type>NoAutomationserver_commands.relationship_commands:429
relationship.add_track<source_sim_id> <target_sim_id> <track_type>NoAutomationserver_commands.relationship_commands:459
relationship.bulk_add_reltrack<track> <max_sims>NoAutomationserver_commands.relationship_commands:377
relationship.bulk_remove_reltrack<track_type>NoAutomationserver_commands.relationship_commands:411
relationship.destroy<source_sim_id> <*sim_id_list>NoAutomationserver_commands.relationship_commands:97
relationship.enforce_marriage<x> <y>NoAutomationserver_commands.relationship_commands:807
relationship.remove_track<source_sim_id> <target_sim_id> <track_type>NoAutomationserver_commands.relationship_commands:476
relationship.set_average_relationships<avg_relationships>NoAutomationserver_commands.relationship_commands:848
relationship.set_can_add_reltrack<source_sim_id> <target_sim_id> <can_add>NoAutomationserver_commands.relationship_commands:446
relationship.set_score<source_sim_id> <target_sim_id> <score> <track_type> <bidirectional>NoAutomationserver_commands.relationship_commands:492
genealogy.find_relation<x_sim> <y_sim>NoDebugOnlyserver_commands.genealogy_commands:82
genealogy.print<sim_id> <max_depth>NoDebugOnlyserver_commands.genealogy_commands:26
relationship.add_knows_career<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:630
relationship.add_knows_relationship_expectations<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:687
relationship.add_knows_sexuality<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:657
relationship.attraction.refresh<source_sim_id> <target_sim_id>NoDebugOnlyrelationships.attraction_commands:8
relationship.attraction.set_refresh_enabled<enabled>NoDebugOnlyrelationships.attraction_commands:27
relationship.attraction.show_calculation<source_sim_id> <target_sim_id>NoDebugOnlyrelationships.attraction_commands:41
relationship.check_culling_alarmsnoneNoDebugOnlyserver_commands.relationship_commands:896
relationship.clear<source_sim_id>NoDebugOnlyserver_commands.relationship_commands:222
relationship.create<source_sim_id> <*sim_id_list>NoDebugOnlyserver_commands.relationship_commands:70
relationship.hide_relationship<sim_id> <target_id> <value>NoDebugOnlyserver_commands.relationship_commands:352
relationship.introduce_all_simsnoneNoDebugOnlyserver_commands.relationship_commands:127
relationship.print_compatibility<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:956
relationship.print_depth<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:611
relationship.print_hidden_relationships<sim_id>NoDebugOnlyserver_commands.relationship_commands:360
relationship.print_info<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:710
relationship.print_non_reciprocalnoneNoDebugOnlyserver_commands.relationship_commands:818
relationship.print_score<source_sim_id> <target_sim_id> <track_name>NoDebugOnlyserver_commands.relationship_commands:518
relationship.remove_bit<source_sim_id> <target_sim_id> <rel_bit>NoDebugOnlyserver_commands.relationship_commands:595
relationship.remove_knows_career<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:643
relationship.remove_knows_relationship_expectations<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:697
relationship.remove_knows_sexuality<source_sim_id> <target_sim_id>NoDebugOnlyserver_commands.relationship_commands:672
relationship.update_compatibilities<source_sim_id>NoDebugOnlyserver_commands.relationship_commands:945
relationships.print_object_relationship<sim_id> <obj_def_id>NoDebugOnlyserver_commands.relationship_commands:310
relationships.set_object_relationship<sim_id> <obj_inst_id> <value> <obj_def_id>NoDebugOnlyserver_commands.relationship_commands:258

The four types break down as 5 cheat, 31 live, 14 automation and 26 debug. Cheat commands run once testingcheats true is on. Live commands are always callable, but they are the calls the game's own panels make: the matchmaking, genealogy and family-tree rows take Sim IDs, profile IDs and relationship-bit GUIDs, so they are reference rather than something to paste. Automation commands are driven through the QA channel. Debug commands never reach the registration call in a shipped build, so typing one does nothing at all.

No registration in this build ships a description string, so a filled cell in that column is our own sentence, written from the code the command calls, and a dash means we have not established the behaviour. A dash under Pack means the registration declares no pack code; EP16 where it appears is the code the file itself carries, not a pack name this page has independently confirmed.

Enabling cheats, and what it costs

Open the console with Ctrl+Shift+C. That is the same combination on Mac: the Control key, not Command. Command+Shift+C is a macOS shortcut, so the game never sees it, and reaching for Command instead is a common reason a Mac player thinks cheats are broken.

On PlayStation and Xbox, EA documents the cheat box as opening when you hold all four shoulder buttons at once, and notes that a keyboard plugged into a console still uses Ctrl+Shift+C.

testingcheats true Required before any cheat-type command. Costs nothing to re-enter if one does nothing

The cost is achievements. EA's cheat FAQ states that cheat codes requiring testingcheats true disable achievements and trophies in the save being played, with build mode cheats as the exception and other saves unaffected.

If you would rather drag a relationship bar than type a six-word command, ui cheat sims 4 covers the mod route. Needs and moods are how to kill a sim on the sims 4, and editing the Sim itself is sims 4 cas.

Common questions

What is the full syntax of modifyrelationship in The Sims 4?

Four parameters you type plus one the console fills in: the first Sim, the second Sim, an amount, and a relationship track. A Sim is written as a first and last name, which costs two words, or as a numeric Sim ID, which costs one. So a name-based call reads modifyrelationship Amy Ito Jun Ito 100 LTR_Friendship_Main. The fifth parameter is the connection handle and is never typed.

Does modifyrelationship set the relationship or add to it?

It adds. The registration at server_commands.relationship_commands:508 calls add_relationship_score on the first Sim's relationship tracker, passing the amount as an increment. The result is clamped to the track's tuned minimum and maximum, which is why 100 fills a bar that was already half full instead of overshooting it, and why running the same command twice does not double anything once the bar is full.

Do I need to run the relationship cheat in both directions?

No. Friendship and romance are RelationshipTrackType.RELATIONSHIP tracks, and those live on the shared bidirectional relationship data rather than on either Sim. Changing A toward B changes B toward A in the same write. Sentiments and attraction are the opposite case: those are per-Sim, so each direction really is a separate value.

Why does the relationship cheat do nothing on a townie?

Because relationships cannot be created against a Sim held at minimum detail. RelationshipService._can_create_relationship returns False when either Sim's level of detail is MINIMUM, so the write is dropped with no error line. Background Sims you have never met are the usual case. Meeting the Sim in play, or switching to their household, raises the detail level and the command then lands.

Which relationship commands actually work in a retail game?

Thirty-six of the seventy-six registered under this section: five declared as cheat type and thirty-one as live type. The other forty are automation or debug registrations. Both are registered, but into the Automation group, which answers the testing channel rather than the console, so a page that lists relationship.set_score or relationship.add_score as a cheat is listing something a player cannot run.