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.
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
| Parameter | Declared type | How you type it | Words it costs | Default |
|---|---|---|---|---|
info1 | SimInfoParam | First and last name, or a numeric Sim ID | 2 | required |
info2 | SimInfoParam | The second Sim, same two forms | 2 | required |
amount | float | A number, negative allowed | 1 | 0 |
track_type | STATISTIC tuning instance | A track's tuning name, such as LTR_Friendship_Main | 1 | None |
_connection | console handle | Never typed. The console supplies it | 0 | None |
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.
| Track | Name | Evidence |
|---|---|---|
| Friendship | LTR_Friendship_Main | Named in the game's own tuning documentation at simulation/filters/household_template.txt:10 |
| Romance | LTR_Romance_Main | Community-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.
- Cheats were never enabled this session.
modifyrelationshipis declared cheat type, so it is refused untiltestingcheats truehas been entered. The flag clears every time you go back to the main menu or load another save. - One of the Sims is held at minimum detail.
RelationshipService._can_create_relationshipreturns False if either Sim's level of detail isMINIMUM, and every path that creates a relationship goes through it. The write is dropped silently.SimInfoLODLevelruns MINIMUM, BACKGROUND, BASE, INTERACTED, FULL, ACTIVE, and unmet background Sims sit at the bottom of it. - 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.
- 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.
| Command | Arguments | Works in retail | Type | What it does | Pack | Registered at |
|---|---|---|---|---|---|---|
modifyrelationship | <info1> <info2> <amount> <track_type> | Yes | Cheat | Changes a relationship track between two Sims by an amount. | — | server_commands.relationship_commands:508 |
relationship.introduce_sim_to_all_others | <opt_sim> | Yes | Cheat | — | — | server_commands.relationship_commands:207 |
relationship.make_all_sims_friends | <opt_sim> | Yes | Cheat | — | — | server_commands.relationship_commands:149 |
relationship.test_marriage | none | Yes | Cheat | — | — | server_commands.relationship_commands:769 |
relationships.create_friends_for_sim | <opt_sim> | Yes | Cheat | — | — | server_commands.relationship_commands:168 |
family_tree_forgery.complete_forgery | <forger_sim> <origin_sim> <target_sim> <relbit_id> <path_ids_str> | Yes | Live | — | — | family_tree.family_tree_forgery_command:193 |
family_tree_forgery.get_origin_or_target_sim | <forger_sim> <is_target> <opt_origin_sim> <opt_target_sim> | Yes | Live | — | — | family_tree.family_tree_forgery_command:89 |
family_tree_forgery.select_path_step | <forger_sim> <sim_id_list> <connection_name_hash> | Yes | Live | — | — | family_tree.family_tree_forgery_command:154 |
family_tree_forgery.set_secret_child | <pregnancy_sim> <chosen_partner_parent_sim> | Yes | Live | — | — | family_tree.family_tree_forgery_command:216 |
family_tree_forgery.set_secret_child_chosen_partner_parent | <pregnancy_sim> <chosen_sim_type> | Yes | Live | — | — | family_tree.family_tree_forgery_command:230 |
family_tree_forgery.show_dialog | <forger_sim_id> <origin_sim> <target_sim> | Yes | Live | — | — | family_tree.family_tree_forgery_command:24 |
genealogy.restore_archived_family_link | <source_sim_id> <target_sim_id> <relbit_guid> | Yes | Live | — | — | server_commands.genealogy_commands:321 |
genealogy.show_archived_family_links | none | Yes | Live | — | — | server_commands.genealogy_commands:283 |
genealogy.show_family_tree | <sim_info_id> <antecedent_depth> <descendant_depth> | Yes | Live | — | — | server_commands.genealogy_commands:96 |
genealogy.unpin_family_link | <source_sim_id> <target_sim_id> <relbit_guid> | Yes | Live | — | — | server_commands.genealogy_commands:336 |
matchmaking.ask_on_date | <actor_param> <target_actor_sim_id> | Yes | Live | — | — | matchmaking.matchmaking_commands:204 |
matchmaking.clean_up_gallery_sim | <sim_id> <gallery_sim_id> <family_info_pb_data> <*gallery_siminfos> | Yes | Live | — | — | matchmaking.matchmaking_commands:297 |
matchmaking.contact_action_used | <actor_param> <candidate_id> | Yes | Live | — | — | matchmaking.matchmaking_commands:256 |
matchmaking.delete_matchmaking_profile | <actor_param> <candidate_id> | Yes | Live | — | — | matchmaking.matchmaking_commands:85 |
matchmaking.on_age_deselect | <actor_param> <age_deselected> | Yes | Live | — | — | matchmaking.matchmaking_commands:145 |
matchmaking.on_age_select | <actor_param> <age_selected> | Yes | Live | — | — | matchmaking.matchmaking_commands:127 |
matchmaking.open_camera | <actor_param> | Yes | Live | — | — | matchmaking.matchmaking_commands:233 |
matchmaking.refresh_candidates | <actor_param> <replace_gallery_sims> <enable_gallery_kill_switch> | Yes | Live | — | — | matchmaking.matchmaking_commands:278 |
matchmaking.report_matchmaking_gallery_profile | <actor_param> <candidate_id> | Yes | Live | — | — | matchmaking.matchmaking_commands:106 |
matchmaking.save_matchmaking_profile | <actor_param> <candidate_id> | Yes | Live | — | — | matchmaking.matchmaking_commands:64 |
matchmaking.set_profile_thumbnail | <target_actor_sim_id> <thumbnail_url> | Yes | Live | — | — | matchmaking.matchmaking_commands:184 |
matchmaking.set_profile_traits | <actor_param> | Yes | Live | — | — | matchmaking.matchmaking_commands:163 |
matchmaking.show_matchmaking_dialog | <actor_param> | Yes | Live | — | — | matchmaking.matchmaking_commands:32 |
matchmaking.toggle_gallery_sims_enabled | <enable> | Yes | Live | — | EP16 | matchmaking.matchmaking_commands:383 |
matchmaking.toggle_gallery_sims_favorites_only_enabled | <enable> | Yes | Live | — | EP16 | matchmaking.matchmaking_commands:405 |
matchmaking.toggle_occult_sims_enabled | <enable> | Yes | Live | — | EP16 | matchmaking.matchmaking_commands:394 |
matchmaking.update_matchmaking_dialog | <actor_param> | Yes | Live | — | — | matchmaking.matchmaking_commands:48 |
relationship.open_sim_profile_ui | <profile_sim> <actor_sim> | Yes | Live | — | — | server_commands.relationship_commands:916 |
relationships.change_ab_group | <ab_group_id> <is_valid_value> | Yes | Live | — | — | server_commands.relationship_commands:541 |
relationships.clear_ab_group | none | Yes | Live | — | — | server_commands.relationship_commands:560 |
relationships.set_object_relationship_name | <sim_id> <obj_def_id> <name> | Yes | Live | — | — | server_commands.relationship_commands:329 |
genealogy.generate_dynasty | <sim_id> <generations> <set_to_min_lod> | No | Automation | — | — | server_commands.genealogy_commands:42 |
matchmaking.get_contacted_sim_ids | <actor_param> | No | Automation | — | EP16 | matchmaking.matchmaking_commands:442 |
matchmaking.save_all_candidates | <actor_param> | No | Automation | — | EP16 | matchmaking.matchmaking_commands:416 |
relationship.add_bit | <source_sim_id> <target_sim_id> <rel_bit> | No | Automation | — | — | server_commands.relationship_commands:579 |
relationship.add_score | <source_sim_id> <target_sim_id> <score_delta> <track_type> | No | Automation | — | — | server_commands.relationship_commands:429 |
relationship.add_track | <source_sim_id> <target_sim_id> <track_type> | No | Automation | — | — | server_commands.relationship_commands:459 |
relationship.bulk_add_reltrack | <track> <max_sims> | No | Automation | — | — | server_commands.relationship_commands:377 |
relationship.bulk_remove_reltrack | <track_type> | No | Automation | — | — | server_commands.relationship_commands:411 |
relationship.destroy | <source_sim_id> <*sim_id_list> | No | Automation | — | — | server_commands.relationship_commands:97 |
relationship.enforce_marriage | <x> <y> | No | Automation | — | — | server_commands.relationship_commands:807 |
relationship.remove_track | <source_sim_id> <target_sim_id> <track_type> | No | Automation | — | — | server_commands.relationship_commands:476 |
relationship.set_average_relationships | <avg_relationships> | No | Automation | — | — | server_commands.relationship_commands:848 |
relationship.set_can_add_reltrack | <source_sim_id> <target_sim_id> <can_add> | No | Automation | — | — | server_commands.relationship_commands:446 |
relationship.set_score | <source_sim_id> <target_sim_id> <score> <track_type> <bidirectional> | No | Automation | — | — | server_commands.relationship_commands:492 |
genealogy.find_relation | <x_sim> <y_sim> | No | DebugOnly | — | — | server_commands.genealogy_commands:82 |
genealogy.print | <sim_id> <max_depth> | No | DebugOnly | — | — | server_commands.genealogy_commands:26 |
relationship.add_knows_career | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:630 |
relationship.add_knows_relationship_expectations | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:687 |
relationship.add_knows_sexuality | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:657 |
relationship.attraction.refresh | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | relationships.attraction_commands:8 |
relationship.attraction.set_refresh_enabled | <enabled> | No | DebugOnly | — | — | relationships.attraction_commands:27 |
relationship.attraction.show_calculation | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | relationships.attraction_commands:41 |
relationship.check_culling_alarms | none | No | DebugOnly | — | — | server_commands.relationship_commands:896 |
relationship.clear | <source_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:222 |
relationship.create | <source_sim_id> <*sim_id_list> | No | DebugOnly | — | — | server_commands.relationship_commands:70 |
relationship.hide_relationship | <sim_id> <target_id> <value> | No | DebugOnly | — | — | server_commands.relationship_commands:352 |
relationship.introduce_all_sims | none | No | DebugOnly | — | — | server_commands.relationship_commands:127 |
relationship.print_compatibility | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:956 |
relationship.print_depth | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:611 |
relationship.print_hidden_relationships | <sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:360 |
relationship.print_info | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:710 |
relationship.print_non_reciprocal | none | No | DebugOnly | — | — | server_commands.relationship_commands:818 |
relationship.print_score | <source_sim_id> <target_sim_id> <track_name> | No | DebugOnly | — | — | server_commands.relationship_commands:518 |
relationship.remove_bit | <source_sim_id> <target_sim_id> <rel_bit> | No | DebugOnly | — | — | server_commands.relationship_commands:595 |
relationship.remove_knows_career | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:643 |
relationship.remove_knows_relationship_expectations | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:697 |
relationship.remove_knows_sexuality | <source_sim_id> <target_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:672 |
relationship.update_compatibilities | <source_sim_id> | No | DebugOnly | — | — | server_commands.relationship_commands:945 |
relationships.print_object_relationship | <sim_id> <obj_def_id> | No | DebugOnly | — | — | server_commands.relationship_commands:310 |
relationships.set_object_relationship | <sim_id> <obj_inst_id> <value> <obj_def_id> | No | DebugOnly | — | — | server_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.