The Sims Object Placement Tool

Demo and early design description (August 20, 1998) of The Sims object placement tool.

The Sims Object Placement Tool Moving a Table
The Sims Object Placement Tool Moving a Table

From: Don Hopkins
Date: Thursday, August 20, 1998 5:45 PM
Subject: New simple object placement and rotation implemented for arch mode!

I’ve implemented a new simple object placement mode, and turned it on in architecture mode.

The move button in buy mode, and the buy placement tool, are still the same old tools, though.

To try out the new placement tool:

Place a few chairs, a few large sofas, and a few beds to try out the multi tile placement behavior.

Then switch to architecture, select the hand, and try moving things around.

The basic idea is that you are able to optionally rotate the object to face an absolute direction, at the beginning and/or the end of the move gesture, by holding down the button and moving as you pick it up or drop it down.

So you can rotate it while you pick it up, as well as while you place it down, neither, or both. And then you can double click to rotate it clockwise (double click picks it up and and sets it down again, rotated). It also rotates when you try to drop it in an illegal position, which may be redundant but is convenient.

So there are lots of ways to rotate, that fit naturally into the movement gesture, but don’t get in the way of making movement very easy. The good old “click to pick up, move, click to put down” works without any weird “sticky” behavior, and rotating on double clicks is as convenient as it needs to be, given that there are even easier way to rotate.

When you pick an object up, it remembers the offset from the cursor position to the tile center of the object, and adds that in as it tracks, so the base of the object does not snap to the cursor position when you pick it up. That was causing problems picking up pictures against walls, and especially picking up tall things like trees. Now it just picks it up relative to wherever you grabbed it so it doesn’t jump under the mouse.

A) When you’re not holding an object, you can pick one up by clicking,
or rotate it around then pick it up by pressing and dragging (the footprint becomes visible on mouse down):

  1. Click (press down and release without moving) to pick the object up.
  2. Drag (press down and move) to pin the object down and rotate it towards the cursor, and it rotates in place while you hold the button down.
    It rotates until you release, then it’s picked up and snaps to the mouse,
    allowing you to move it normally.

B) When you’re holding an object, it follows the cursor around, even though the button isn’t held down. It has a “footprint” underneath it to show you’re holding it. You can drop it by clicking again, or drop then rotate it around by pressing and dragging:

  1. Click to drop the object.
    a) If the object is in a valid location, it’s dropped. (footprint no longer visible)
    b) If not, it displays red X’s (or whatever), and it beeps and rotates instead.
    (footprint remains visible). This makes it very easy to rotate a long object into place so it fits.
  2. Drag to pin the object down and rotate it towards the cursor, and it rotates in place until you release, then it’s dropped and stays where it is
    (footprint no longer visible).

If you’re not holding an object, and you double click on an object (pick it up and put it back in the same place without moving the mouse), the object rotates when you drop it and is then deselected.

So you can double click again and again to rotate any number of times, without moving it. So you can rotate it, without getting it stuck to the mouse.

When a multi tile object rotates, it rotates around the tile that you picked up.
When you drag in a direction to make the object face in an absolute direction,
that tile of the multi tile object may have a different idea about which was is “front” that you would expect. We need an object field so we can specify which direction is “front” for the purposes of object placement rotation. i.e. the direction towards the head of the bed would be “front” instead of the current sideways front.

To be implemented:

Placing objects on the ground floor outside when the level is above ground.

Subclass of MoveTool called BuyTool that creates new objects and lets you place them.

Deploy MoveTool and BuyTool in the rest of the game.

Placing trees at any location.

Animation that lifts the object up off of the footprint (so you can see the footprint, and so the moving object is very obvious), and smooth dragging and snapping feedback.

User interface flower child. Pie menus, PizzaTool, SimCity, The Sims, Visual Programming, VR, AR, Unity3D / JavaScript bridge.