How to use the move objects cheat in The Sims 4, and every other Build/Buy cheat
The move objects cheat is bb.moveobjects on, entered in the cheat console after testingcheats true. Objects then place off the grid and overlap freely; bb.moveobjects off restores normal placement. The string is in the game executable, not the Python.
Turn cheats on, then toggle placement
Nothing typed into the cheat console does anything until cheats are enabled for the session. The flag clears every time a save loads, so this command goes in first, every time.
testingcheats true
Enables cheats for this session. Re-enter after every load.
The move objects cheat itself is a toggle. On frees placement, off restores the grid.
bb.moveobjects on
The executable's own help text reads: MoveObjects cheat [<on/off>]. Allows objects to intersect other objects and architecture and/or float in midair
bb.moveobjects off
Back to normal placement rules. Objects already placed stay where you put them.
The string is one word: a dot after bb, then moveobjects with no space and no underscore. Most reports of a broken cheat come down to that one detail.
Opening the console on each platform
| Platform | Open the console with | Typing |
|---|---|---|
| PC | Ctrl + Shift + C | Keyboard |
| Mac | Ctrl + Shift + C | Keyboard - Control, not Command |
| PlayStation 4 / PlayStation 5 | All four shoulder buttons at once | On-screen keyboard |
| Xbox One / Xbox Series X and S | All four shoulder buttons at once | On-screen keyboard |
The command strings are the same everywhere. Only the way you open the console and type into it changes, which is why controller players hit typos more often.
The other native Build/Buy cheats
These five sit beside the move objects cheat in the executable, in a block of help strings outside the eleven-entry console help table. Two of them carry help text we could read and it is quoted below; for the other three the note is our own description of what happens in Build mode.
bb.showhiddenobjects
The executable's own help text reads: Show game objects in the catalog that are traditionally hidden, e.g. rewards. Toggles the NoCatalog exclusion flag. No build stamp.
bb.showliveeditobjects
Adds the live-edit-only set to the catalogue. Our description: no help string was recovered for this one. No build stamp.
bb.ignoregameplayunlocks
Objects normally locked behind careers and aspirations become buyable. Our description: no help string was recovered for this one. No build stamp.
bb.enablefreebuild
Build on lots the game locks, such as community and career lots. Our description: no help string was recovered for this one. No build stamp.
freerealestate on
Entered from the world map before moving a household in, so the lot costs nothing. Native string at 0x1E3AC60, in the console help table.
Why this page carries no verified build
Most cheat pages on this site name the build their commands were checked against, because the command turns up in the game's own shipped Python at a module and a line number. That proof does not exist for the bb. family, and the CAS page carries no stamp for the same reason.
The native executable handles those strings, and nothing next to them records a version, so any build number pinned to them would be borrowed from somewhere else rather than measured. The page gives the offset instead.
The next table is the opposite case: the game registers each of those commands in a Python module it ships with, at the line shown.
Build/Buy and object commands the game registers in Python
These are the Build/Buy adjacent commands the game itself registers. The Type column comes from the registration: entries marked Cheat require cheats enabled, entries marked Live are mostly the game talking to its own interface and are listed for completeness.
The file records an argument signature and a type for each command but no description, so there is no effect column here. Other sites fill that column with guesses. A dash in Pack means the file records no pack code against that command.
| Command | Arguments | Type | Pack | Registered at |
|---|---|---|---|---|
bb.set_build_eco_effects_enabled | <enabled> | Live | EP09 | server_commands.buildbuy_commands:45 |
inventory.open_ui | <inventory_obj> <sim_only> | Live | — | server_commands.inventory_commands:435 |
inventory.open_ui_with_preselection | <opt_sim> <filter_tag> | Live | — | server_commands.inventory_commands:806 |
inventory.purchase_picker_response | <inventory_target> <mailman_purchase> <*def_ids_and_amounts> | Live | — | server_commands.inventory_commands:121 |
inventory.purchase_picker_response_by_ids | <inventory_target> <inventory_source> <currency_type> <dialog_id> <delivery_method> <object_ids_or_definition_ids> <*ids_and_amounts_and_price> | Live | — | server_commands.inventory_commands:201 |
inventory.purge | <opt_target> | Cheat | — | server_commands.inventory_commands:109 |
inventory.sell_picker_response_by_ids | <inventory_source> <currency_type> <dialog_id> <*ids_and_amounts_and_price> | Live | — | server_commands.inventory_commands:368 |
inventory.sim_inventory_favorite_multiple | <sim_id> <is_add> <*items> | Live | — | server_commands.inventory_commands:553 |
inventory.sim_inventory_sell_multiple | <msg> | Live | — | server_commands.inventory_commands:467 |
inventory.view_update | <obj_id> | Live | — | server_commands.inventory_commands:453 |
objects.consumables_infinite_toggle | — | Cheat | — | server_commands.object_commands:1435 |
objects.fadeout_finished | <obj_id> | Live | — | server_commands.object_commands:838 |
objects.focus_camera_on_object | <obj_id> | Live | — | server_commands.object_commands:1141 |
objects.get_inventory_counts | — | Live | — | server_commands.object_commands:1216 |
objects.lock_all_doors | — | Cheat | — | server_commands.object_commands:1568 |
objects.lock_door | <obj_id> | Cheat | — | server_commands.object_commands:1546 |
objects.notify_image_composite_failed | <obj_id> | Live | — | server_commands.object_commands:1527 |
objects.notify_image_composited | <obj_id> <resource_key> <resource_key_type> <resource_key_group> <no_op_version> | Live | — | server_commands.object_commands:1511 |
objects.print_transform | <obj_id> | Cheat | — | server_commands.object_commands:1413 |
objects.remove_object_set_as_head | — | Cheat | — | server_commands.object_commands:424 |
objects.replace_with_random | <obj_id> <num_tries> <error_margin> | Cheat | — | server_commands.object_commands:1493 |
objects.request_customizable_object_data | <*object_ids> | Live | — | server_commands.object_commands:1468 |
objects.reset | <obj_id> <expected> | Cheat | — | server_commands.object_commands:453 |
objects.set_as_head | <obj_id> <scale> <forward_rot> <up_rot> | Cheat | — | server_commands.object_commands:358 |
objects.set_object_color | <response_id> <r> <g> <b> <slider> <checkbox> | Live | — | server_commands.object_commands:1827 |
objects.set_voice_actor | <obj_id> <voice_actor> | Cheat | — | server_commands.object_commands:1601 |
objects.show_color_picker | <object_id> | Live | — | server_commands.object_commands:1844 |
objects.stop_wearing_trendi_outfit | <target_sim> <set_current_outfit> | Live | — | server_commands.object_commands:1726 |
objects.unlock_all_doors | — | Cheat | — | server_commands.object_commands:1577 |
objects.unlock_door | <obj_id> | Cheat | — | server_commands.object_commands:1557 |
objects.update_display_number | <obj_id> <*display_numbers> | Cheat | — | server_commands.object_commands:1586 |
objects.wear_trendi_outfit | <inventory_obj_id> <target_sim> <set_current_outfit> | Live | — | server_commands.object_commands:1652 |
The pack column prints the code the file carries, such as EP09, rather than a store name, because the code is what the file contains. One entry has a pack code; the rest are base registrations with no pack gate recorded.
Commands taking an obj_id need the id of a specific object, and the Build/Buy interface does not hand you one. They are listed here because the game registers them, not because you are likely to use them.
When a Build/Buy cheat does nothing
Work through these in order before assuming a patch broke something.
- Cheats were never enabled this session, or the save was reloaded since they were.
- The command was mistyped: moveobjects takes no space and no underscore.
- You are in Live mode. Placement cheats change nothing outside Build mode.
- A script mod is failing to load and taking the Python command registration down with it. Move the Mods folder aside and retest before blaming the game.
- The cheat did work and the effect is not visible: bb.showhiddenobjects changes what a Build/Buy search returns, not what the catalogue shows by default.
The cheat flag is the same one every other section depends on, so if nothing at all responds, the problem is upstream of Build/Buy and applies across cheats list equally. Appearance and Sim editing are covered in the cas cheat sims 4.
More Build/Buy pages
Common questions
Why is the move objects cheat not working?
Usually the cheat flag is off, so testingcheats true has to go in before bb.moveobjects on. After that, check the spelling: it is one word, no space and no underscore between move and objects. The cheat also does nothing outside Build mode.
Does bb.moveobjects work on PlayStation and Xbox?
The command string is identical on every platform. What changes is how you reach the console: a keyboard chord on PC and Mac, and holding all four shoulder buttons at once on PlayStation and Xbox. Console players type with the on-screen keyboard, which is why typos are the common failure there.
Why does this page not stamp bb.moveobjects with a game build?
Because the site cannot prove it from a file. Every command this site stamps traces to the module and line in the game's shipped Python that registers it. bb.moveobjects is not registered there; the string lives in the executable, in a block of help text outside the console help table, and carries no version marker. Rather than borrow a build number from another site, the page says where the string is.
What do all the objects.* commands in the table do?
The shipped Python registers them but records no description for any command, so this page does not invent one. The file does give the argument signature, the module and line, and whether the command is flagged Live or Cheat. Anything flagged Cheat needs cheats enabled for the session; the Live entries are mostly the game talking to its own interface.
Do I have to type testingcheats true again after loading a save?
Players report yes, and re-entering it costs nothing, so that is the advice. The shipped code is less clear-cut: CheatService.save writes cheats_enabled into the account data and CheatService.load reads it back (services.cheat_service:45 and :59), so the flag is stored rather than discarded. This site has not play-tested which behaviour wins and will not state one as fact.