The Soul of The Sims, by Will Wright
Tuesday, January 28, 1997 / 9:25 AM
I had just started working at the Maxis Core Technology Group on "Project X" aka "Dollhouse", and Will Wright brought this code in one morning, to demonstrate his design for the motives, feedback loop and failure conditions of the simulated people. While going through old papers, I ran across this print-out that I had saved, so I scanned it and cleaned the images up, and got permission from Will to publish it.
This code is a interesting example of game design, programming and prototyping techniques. The Sims code has certainly changed a lot since Will wrote this original prototype code. For example, there is no longer any "stress" motive. And the game doesn't store motives in global variables, of course.
My hope is that this code will give you a glimpse of how Will Wright designs games, and what was going on in his head at the time!
I've published the source code and content of SimFaux as Open Source Software. It's available via read-only anonymous subversion. Here's the command to get all the source code and content:
svn co svn://SimFaux.com/SimFaux/trunk/SimFaux
I've started writing a README.txt file, but that's about all the documentation there is so far.
SimFaux 1.0 README SimFaux is an interactive TV station simulator written in OpenLaszlo, by Don Hopkins, for the HuffingtonPost Contagious Festival. It's an open-ended framework for plugging together keyword tagged multimedia character simulations, video, text, quotes, surveys, interactive games and application. It's configured with XML files, so non-programmers can easily add characters, video and other types of content. It includes tools for validating, processing and compressing the content into appropriate file formats. ======================================================================== Installation:
;;; -*- Mode: LISP -*- ;;; ;;; Pushy bounce window mixin ;;; Implemented for the Lisp Machine with Flavors ;;; By Don Hopkins (defflavor pushy-bounce-window-mixin (x-vel y-vel gravity friction proc delay) () :gettable-instance-variables :settable-instance-variables :initable-instance-variables (:required-flavors tv:window)) (defflavor pushy-bounce-lisp-listener () (pushy-bounce-window-mixin tv:lisp-listener))
Designing to Facilitate Browsing: A Look Back at the Hyperties Workstation Browser
By Ben Shneiderman, Catherine Plaisant, Rodrigo Botafogo, Don Hopkins, William Weiland.
Human-Computer Interaction Laboratory
A.V. Williams Bldg., University of Maryland
College Park MD 20742, U.S.A.
Since browsing hypertext can present a formidable cognitive challenge, user interface design plays a major role in determining acceptability. In the Unix workstation version of Hyperties, a research-oriented prototype, we focussed on design features that facilitate browsing. We first give a general overview of Hyperties and its markup language. Customizable documents can be generated by the conditional text feature that enables dynamic and selective display of text and graphics. In addition we present:
- an innovative solution to link identification: pop-out graphical buttons of arbitrary shape.
- application of pie menus to permit low cognitive load actions that reduce the distraction of common actions, such as page turning or window selection.
- multiple window selection strategies that reduce clutter and housekeeping effort. We preferred piles-of-tiles, in which standard-sized windows were arranged in a consistent pattern on the display and actions could be done rapidly, allowing users to concentrate on the contents.
The Shape of PSIBER Space:
PostScript Interactive Bug Eradication Routines
Written by Don Hopkins, October 1989.
University of Maryland
Human-Computer Interaction Lab
Computer Science Department
College Park, Maryland 20742
The PSIBER Space Deck is an interactive visual user interface to a graphical programming environment, the NeWS window system. It lets you display, manipulate, and navigate the data structures, programs, and processes living in the virtual memory space of NeWS. It is useful as a debugging tool, and as a hands on way to learn about programming in PostScript and NeWS.
Cyberspace. A consensual hallucination experienced daily by billions of legitimate operators, in every nation, by children being taught mathematical concepts ... A graphic representation of data abstracted from the banks of every computer in the human system. Unthinkable complexity. Lines of light ranged in the nonspace of the mind, clusters and constellations of data. Like city lights, receding ....
I released the source code for a NeWS window manager based on pie menus, called NeatWindow (source).
Date: Wed, 11 May 88 02:31:51 EDT
Subject: class NeatWindow From: Don Hopkins <email@example.com>
Here is a window class with window managment menus designed to work well with pie menus. You should of course have piemenu.ps loaded up before running this. Just psh it into your environment, and the DefaultWindow will be set up so that the next window you get will be a NeatWindow! Fire up a clock or something, pop up the frame menu, and play around! I am not including any instructions right now, because I would like to hear what you think of it after trying to figure out what the menus do on your own. (heh heh heh -- the code is free but you gotta be a guinea pig!) This is experimental, so I'll be coming out with a more refined version later. If you'd care to answer the following questions after playing around with the NeatWindow menus, I'd really appreciate it!
- Which functions were obvious by their direction, or their labeling?
- How would you change the labels to make their meanings clearer?
- Why do you think the selections are arranged the way they are?
- What mnemonic tricks can you think of to remember the selection directions?
- After using them for a while, which selections do you find yourself mousing into without looking at the menu?
I release the first version of pie menus for NeWS 1.1 on March 30, 1988. Here is the source code written in NeWS's dialect of PostScript with Owen Densmore's object oriented extensions, using the "Lite" user interface toolkit.
Date: Wed, 30 Mar 88 08:02:23 EST
From: Don Hopkins <firstname.lastname@example.org>
Subject: Pie Menus for NeWS 1.1
Here's the latest piemenu.ps, for NeWS 1.1! You can psh it into your NeWS server, or load it from your user.ps. Note that because of a problem with /flipstyle, you should load piemenu.ps after customizing the NeWS rootmenu and its submenus. This is because flipstyle changes the submenu objects under rootmenu, but not the variables in systemdict that refer to them. The function /setdefaultmenu, defined and invoked in piemenu.ps, sends a /flipstyle to roomenu and redefines the rootmenu in systemdict. If you want to change the menus after running piemenu.ps, one fix for this problem is to use /searchkey in your user.ps, after running piemenu.ps, to redefine the variables in systemdict to refer to the new submenus. Then you can send /insertitem and /deleteitem messages to terminalmenu, etc. (Otherwise you'd be changing the old submenus, and see no effect on the pie submenus.)
I refactored "uwm" and integrated it into Mitch Bradley's Sun Forth system, to implement a Forth programmable window manager with pie menus called "pietest" (source code). I reprogramming the window manager's main loop in Forth, to perform an empirical comparison of pie menus with linear menus.
Later, I wrote this generic pie menu layout and tracking code written in C is open source, and may be used as a basis to implement pie menus on other systems. It supports pie menus with any number of items. Each item can be of any positive angular width, as long as all the item widths add up to 360 degrees. Each item records the quadrant and slope of its leading edge. A leading edge is a ray going out from the menu center in the direction given by an item's (quadrant,slope) pair. The area of a pie menu item is the wedge between its leading edge, and the leading edge of the next menu item.
The generic pie menu tracking code is optimized to minimize floating point division and avoid calling atan2 during mouse tracking. But now most computers are much faster and have floating point hardware, so the optimizations are no longer necessary to keep up with the mouse (but they still might be useful on low end computers and small embedded devices).